diff --git a/.gitignore b/.gitignore index d9848a9a2..12d63e1fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,2 @@ -clog *.xz -*.gz *.bz2 -*.rpm -*.orig -*.sign -kernel-[2345]*/ -perf-man-*.tar.gz -kernel-headers/ -kernel-tools/ diff --git a/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch b/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch deleted file mode 100644 index 1a5bec6ce..000000000 --- a/0001-ACPI-APEI-arm64-Ignore-broken-HPE-moonshot-APEI-supp.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Al Stone -Date: Tue, 27 Feb 2018 00:21:23 -0500 -Subject: [PATCH] ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support - -Message-id: <20180227002123.21608-1-ahs3@redhat.com> -Patchwork-id: 206052 -O-Subject: [RHEL8 BZ1518076 PATCH] ACPI: APEI: arm64: Ignore broken HPE moonshot APEI support -Bugzilla: 1518076 -RH-Acked-by: Mark Salter -RH-Acked-by: Jeremy McNicoll - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1518076 -Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15417197 -Tested: compile-only; several other patches are required for full booting - QE has tested limited boot (see comment#12 of BZ) - -This is a re-post of a RHEL-ALT-7.5 patch specific to aarch64 moonshots -that we use in beaker. It is required for these machines to boot. - - commit 8a663a264863efedf8bb4a9d76ac603920fdd739 - Author: Robert Richter - Date: Wed Aug 16 19:49:30 2017 -0400 - - [acpi] APEI: arm64: Ignore broken HPE moonshot APEI support - - From: Mark Salter - Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1344237 - Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=13768971 - Tested: Booted on moonshot with patched 4.11.0-20 kernel - Upstream: RHEL-only - - The aarch64 HP moonshot platforms we have in beaker and elsewhere have - a firmware bug which causes a spurious fatal memory error via APEI at - boot time. This platform is no longer supported and no further firmware - updates are expected. This is a downstream-only hack to avoid the problem - by bailing out of HEST table probing if we detect a moonshot HEST table. - - Signed-off-by: Mark Salter - Signed-off-by: Robert Richter - Signed-off-by: Herton R. Krzesinski - -Upstream Status: RHEL only -Signed-off-by: Al Stone -Signed-off-by: Herton R. Krzesinski ---- - drivers/acpi/apei/hest.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c -index 953a2fae8b15..7ea07f7da582 100644 ---- a/drivers/acpi/apei/hest.c -+++ b/drivers/acpi/apei/hest.c -@@ -88,6 +88,14 @@ int apei_hest_parse(apei_hest_func_t func, void *data) - if (hest_disable || !hest_tab) - return -EINVAL; - -+#ifdef CONFIG_ARM64 -+ /* Ignore broken firmware */ -+ if (!strncmp(hest_tab->header.oem_id, "HPE ", 6) && -+ !strncmp(hest_tab->header.oem_table_id, "ProLiant", 8) && -+ MIDR_IMPLEMENTOR(read_cpuid_id()) == ARM_CPU_IMP_APM) -+ return -EINVAL; -+#endif -+ - hest_hdr = (struct acpi_hest_header *)(hest_tab + 1); - for (i = 0; i < hest_tab->error_source_count; i++) { - len = hest_esrc_len(hest_hdr); --- -2.26.2 - diff --git a/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch b/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch deleted file mode 100644 index 1cc560ee8..000000000 --- a/0001-ACPI-irq-Workaround-firmware-issue-on-X-Gene-based-m.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Mark Salter -Date: Thu, 10 May 2018 17:38:43 -0400 -Subject: [PATCH] ACPI / irq: Workaround firmware issue on X-Gene based m400 - -Message-id: <20180510173844.29580-3-msalter@redhat.com> -Patchwork-id: 214383 -O-Subject: [RHEL-8 BZ1519554 2/3] ACPI / irq: Workaround firmware issue on X-Gene based m400 -Bugzilla: 1519554 -RH-Acked-by: Al Stone -RH-Acked-by: Tony Camuso - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519554 -Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16144520 - -The ACPI firmware on the xgene-based m400 platorms erroneously -describes its UART interrupt as ACPI_PRODUCER rather than -ACPI_CONSUMER. This leads to the UART driver being unable to -find its interrupt and the kernel unable find a console. -Work around this by avoiding the producer/consumer check -for X-Gene UARTs. - -Upstream Status: RHEL only -Signed-off-by: Mark Salter -Signed-off-by: Herton R. Krzesinski ---- - drivers/acpi/irq.c | 17 +++++++++++++++-- - 1 file changed, 15 insertions(+), 2 deletions(-) - -diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c -index e209081d644b..7484bcf59a1b 100644 ---- a/drivers/acpi/irq.c -+++ b/drivers/acpi/irq.c -@@ -126,6 +126,7 @@ struct acpi_irq_parse_one_ctx { - unsigned int index; - unsigned long *res_flags; - struct irq_fwspec *fwspec; -+ bool skip_producer_check; - }; - - /** -@@ -197,7 +198,8 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - return AE_CTRL_TERMINATE; - case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: - eirq = &ares->data.extended_irq; -- if (eirq->producer_consumer == ACPI_PRODUCER) -+ if (!ctx->skip_producer_check && -+ eirq->producer_consumer == ACPI_PRODUCER) - return AE_OK; - if (ctx->index >= eirq->interrupt_count) { - ctx->index -= eirq->interrupt_count; -@@ -232,8 +234,19 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares, - static int acpi_irq_parse_one(acpi_handle handle, unsigned int index, - struct irq_fwspec *fwspec, unsigned long *flags) - { -- struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec }; -+ struct acpi_irq_parse_one_ctx ctx = { -EINVAL, index, flags, fwspec, false }; - -+ /* -+ * Firmware on arm64-based HPE m400 platform incorrectly marks -+ * its UART interrupt as ACPI_PRODUCER rather than ACPI_CONSUMER. -+ * Don't do the producer/consumer check for that device. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64)) { -+ struct acpi_device *adev = acpi_bus_get_acpi_device(handle); -+ -+ if (adev && !strcmp(acpi_device_hid(adev), "APMC0D08")) -+ ctx.skip_producer_check = true; -+ } - acpi_walk_resources(handle, METHOD_NAME__CRS, acpi_irq_parse_one_cb, &ctx); - return ctx.rc; - } --- -2.26.2 - diff --git a/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch b/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch deleted file mode 100644 index c5a43608f..000000000 --- a/0001-ARM-fix-__get_user_check-in-case-uaccess_-calls-are-.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Masahiro Yamada -Date: Mon, 30 Sep 2019 14:59:25 +0900 -Subject: [PATCH] ARM: fix __get_user_check() in case uaccess_* calls are not - inlined - -KernelCI reports that bcm2835_defconfig is no longer booting since -commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING -forcibly"): - - https://lkml.org/lkml/2019/9/26/825 - -I also received a regression report from Nicolas Saenz Julienne: - - https://lkml.org/lkml/2019/9/27/263 - -This problem has cropped up on arch/arm/config/bcm2835_defconfig -because it enables CONFIG_CC_OPTIMIZE_FOR_SIZE. The compiler tends -to prefer not inlining functions with -Os. I was able to reproduce -it with other boards and defconfig files by manually enabling -CONFIG_CC_OPTIMIZE_FOR_SIZE. - -The __get_user_check() specifically uses r0, r1, r2 registers. -So, uaccess_save_and_enable() and uaccess_restore() must be inlined -in order to avoid those registers being overwritten in the callees. - -Prior to commit 9012d011660e ("compiler: allow all arches to enable -CONFIG_OPTIMIZE_INLINING"), the 'inline' marker was always enough for -inlining functions, except on x86. - -Since that commit, all architectures can enable CONFIG_OPTIMIZE_INLINING. -So, __always_inline is now the only guaranteed way of forcible inlining. - -I want to keep as much compiler's freedom as possible about the inlining -decision. So, I changed the function call order instead of adding -__always_inline around. - -Call uaccess_save_and_enable() before assigning the __p ("r0"), and -uaccess_restore() after evacuating the __e ("r0"). - -Fixes: 9012d011660e ("compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING") -Reported-by: "kernelci.org bot" -Reported-by: Nicolas Saenz Julienne -Signed-off-by: Masahiro Yamada -Acked-by: Arnd Bergmann -Tested-by: Nicolas Saenz Julienne -Tested-by: Fabrizio Castro -Tested-by: Geert Uytterhoeven ---- - arch/arm/include/asm/uaccess.h | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h -index 98c6b91be4a8..60055827dddc 100644 ---- a/arch/arm/include/asm/uaccess.h -+++ b/arch/arm/include/asm/uaccess.h -@@ -191,11 +191,12 @@ extern int __get_user_64t_4(void *); - #define __get_user_check(x, p) \ - ({ \ - unsigned long __limit = current_thread_info()->addr_limit - 1; \ -+ unsigned int __ua_flags = uaccess_save_and_enable(); \ - register typeof(*(p)) __user *__p asm("r0") = (p); \ - register __inttype(x) __r2 asm("r2"); \ - register unsigned long __l asm("r1") = __limit; \ - register int __e asm("r0"); \ -- unsigned int __ua_flags = uaccess_save_and_enable(); \ -+ unsigned int __err; \ - switch (sizeof(*(__p))) { \ - case 1: \ - if (sizeof((x)) >= 8) \ -@@ -223,9 +224,10 @@ extern int __get_user_64t_4(void *); - break; \ - default: __e = __get_user_bad(); break; \ - } \ -- uaccess_restore(__ua_flags); \ -+ __err = __e; \ - x = (typeof(*(p))) __r2; \ -- __e; \ -+ uaccess_restore(__ua_flags); \ -+ __err; \ - }) - - #define get_user(x, p) \ --- -2.26.2 - diff --git a/0001-ARM-tegra-usb-no-reset.patch b/0001-ARM-tegra-usb-no-reset.patch deleted file mode 100644 index 21ebad41e..000000000 --- a/0001-ARM-tegra-usb-no-reset.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Thu, 3 May 2012 20:27:11 +0100 -Subject: [PATCH] ARM: tegra: usb no reset - -Patch for disconnect issues with storage attached to a - tegra-ehci controller ---- - drivers/usb/core/hub.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index b1e14beaac5f..b28779779058 100644 ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -5517,6 +5517,13 @@ static void hub_event(struct work_struct *work) - (u16) hub->change_bits[0], - (u16) hub->event_bits[0]); - -+ /* Don't disconnect USB-SATA on TrimSlice */ -+ if (strcmp(dev_name(hdev->bus->controller), "tegra-ehci.0") == 0) { -+ if ((hdev->state == 7) && (hub->change_bits[0] == 0) && -+ (hub->event_bits[0] == 0x2)) -+ hub->event_bits[0] = 0; -+ } -+ - /* Lock the device, then check to see if we were - * disconnected while waiting for the lock to succeed. */ - usb_lock_device(hdev); --- -2.26.2 - diff --git a/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch b/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch deleted file mode 100644 index 9fa2f1a8e..000000000 --- a/0001-Add-efi_status_to_str-and-rework-efi_status_to_err.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 2 Oct 2017 18:22:13 -0400 -Subject: [PATCH] Add efi_status_to_str() and rework efi_status_to_err(). - -This adds efi_status_to_str() for use when printing efi_status_t -messages, and reworks efi_status_to_err() so that the two use a common -list of errors. - -Upstream Status: RHEL only -Signed-off-by: Peter Jones ---- - drivers/firmware/efi/efi.c | 124 +++++++++++++++++++++++++++---------- - include/linux/efi.h | 3 + - 2 files changed, 96 insertions(+), 31 deletions(-) - -diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c -index fdd1db025dbf..8ef7d1df09dd 100644 ---- a/drivers/firmware/efi/efi.c -+++ b/drivers/firmware/efi/efi.c -@@ -31,6 +31,7 @@ - #include - #include - #include -+#include - - #include - -@@ -831,40 +832,101 @@ int efi_mem_type(unsigned long phys_addr) - } - #endif - -+struct efi_error_code { -+ efi_status_t status; -+ int errno; -+ const char *description; -+}; -+ -+static const struct efi_error_code efi_error_codes[] = { -+ { EFI_SUCCESS, 0, "Success"}, -+#if 0 -+ { EFI_LOAD_ERROR, -EPICK_AN_ERRNO, "Load Error"}, -+#endif -+ { EFI_INVALID_PARAMETER, -EINVAL, "Invalid Parameter"}, -+ { EFI_UNSUPPORTED, -ENOSYS, "Unsupported"}, -+ { EFI_BAD_BUFFER_SIZE, -ENOSPC, "Bad Buffer Size"}, -+ { EFI_BUFFER_TOO_SMALL, -ENOSPC, "Buffer Too Small"}, -+ { EFI_NOT_READY, -EAGAIN, "Not Ready"}, -+ { EFI_DEVICE_ERROR, -EIO, "Device Error"}, -+ { EFI_WRITE_PROTECTED, -EROFS, "Write Protected"}, -+ { EFI_OUT_OF_RESOURCES, -ENOMEM, "Out of Resources"}, -+#if 0 -+ { EFI_VOLUME_CORRUPTED, -EPICK_AN_ERRNO, "Volume Corrupt"}, -+ { EFI_VOLUME_FULL, -EPICK_AN_ERRNO, "Volume Full"}, -+ { EFI_NO_MEDIA, -EPICK_AN_ERRNO, "No Media"}, -+ { EFI_MEDIA_CHANGED, -EPICK_AN_ERRNO, "Media changed"}, -+#endif -+ { EFI_NOT_FOUND, -ENOENT, "Not Found"}, -+#if 0 -+ { EFI_ACCESS_DENIED, -EPICK_AN_ERRNO, "Access Denied"}, -+ { EFI_NO_RESPONSE, -EPICK_AN_ERRNO, "No Response"}, -+ { EFI_NO_MAPPING, -EPICK_AN_ERRNO, "No mapping"}, -+ { EFI_TIMEOUT, -EPICK_AN_ERRNO, "Time out"}, -+ { EFI_NOT_STARTED, -EPICK_AN_ERRNO, "Not started"}, -+ { EFI_ALREADY_STARTED, -EPICK_AN_ERRNO, "Already started"}, -+#endif -+ { EFI_ABORTED, -EINTR, "Aborted"}, -+#if 0 -+ { EFI_ICMP_ERROR, -EPICK_AN_ERRNO, "ICMP Error"}, -+ { EFI_TFTP_ERROR, -EPICK_AN_ERRNO, "TFTP Error"}, -+ { EFI_PROTOCOL_ERROR, -EPICK_AN_ERRNO, "Protocol Error"}, -+ { EFI_INCOMPATIBLE_VERSION, -EPICK_AN_ERRNO, "Incompatible Version"}, -+#endif -+ { EFI_SECURITY_VIOLATION, -EACCES, "Security Policy Violation"}, -+#if 0 -+ { EFI_CRC_ERROR, -EPICK_AN_ERRNO, "CRC Error"}, -+ { EFI_END_OF_MEDIA, -EPICK_AN_ERRNO, "End of Media"}, -+ { EFI_END_OF_FILE, -EPICK_AN_ERRNO, "End of File"}, -+ { EFI_INVALID_LANGUAGE, -EPICK_AN_ERRNO, "Invalid Languages"}, -+ { EFI_COMPROMISED_DATA, -EPICK_AN_ERRNO, "Compromised Data"}, -+ -+ // warnings -+ { EFI_WARN_UNKOWN_GLYPH, -EPICK_AN_ERRNO, "Warning Unknown Glyph"}, -+ { EFI_WARN_DELETE_FAILURE, -EPICK_AN_ERRNO, "Warning Delete Failure"}, -+ { EFI_WARN_WRITE_FAILURE, -EPICK_AN_ERRNO, "Warning Write Failure"}, -+ { EFI_WARN_BUFFER_TOO_SMALL, -EPICK_AN_ERRNO, "Warning Buffer Too Small"}, -+#endif -+}; -+ -+static int -+efi_status_cmp_bsearch(const void *key, const void *item) -+{ -+ u64 status = (u64)(uintptr_t)key; -+ struct efi_error_code *code = (struct efi_error_code *)item; -+ -+ if (status < code->status) -+ return -1; -+ if (status > code->status) -+ return 1; -+ return 0; -+} -+ - int efi_status_to_err(efi_status_t status) - { -- int err; -- -- switch (status) { -- case EFI_SUCCESS: -- err = 0; -- break; -- case EFI_INVALID_PARAMETER: -- err = -EINVAL; -- break; -- case EFI_OUT_OF_RESOURCES: -- err = -ENOSPC; -- break; -- case EFI_DEVICE_ERROR: -- err = -EIO; -- break; -- case EFI_WRITE_PROTECTED: -- err = -EROFS; -- break; -- case EFI_SECURITY_VIOLATION: -- err = -EACCES; -- break; -- case EFI_NOT_FOUND: -- err = -ENOENT; -- break; -- case EFI_ABORTED: -- err = -EINTR; -- break; -- default: -- err = -EINVAL; -- } -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); - -- return err; -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return -EINVAL; -+ return found->errno; -+} -+ -+const char * -+efi_status_to_str(efi_status_t status) -+{ -+ struct efi_error_code *found; -+ size_t num = sizeof(efi_error_codes) / sizeof(struct efi_error_code); -+ -+ found = bsearch((void *)(uintptr_t)status, efi_error_codes, -+ sizeof(struct efi_error_code), num, -+ efi_status_cmp_bsearch); -+ if (!found) -+ return "Unknown error code"; -+ return found->description; - } - - static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); -diff --git a/include/linux/efi.h b/include/linux/efi.h -index 05c47f857383..2e2f9f608f68 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -43,6 +43,8 @@ - #define EFI_ABORTED (21 | (1UL << (BITS_PER_LONG-1))) - #define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1))) - -+#define EFI_IS_ERROR(x) ((x) & (1UL << (BITS_PER_LONG-1))) -+ - typedef unsigned long efi_status_t; - typedef u8 efi_bool_t; - typedef u16 efi_char16_t; /* UNICODE character */ -@@ -828,6 +830,7 @@ static inline bool efi_rt_services_supported(unsigned int mask) - #endif - - extern int efi_status_to_err(efi_status_t status); -+extern const char *efi_status_to_str(efi_status_t status); - - /* - * Variable Attributes --- -2.26.2 - diff --git a/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch b/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch deleted file mode 100644 index 64cdd4136..000000000 --- a/0001-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Wed, 26 Feb 2020 13:38:40 -0500 -Subject: [PATCH] Add option of 13 for FORCE_MAX_ZONEORDER - -This is a hack, but it's what the other distros currently use -for aarch64 with 4K pages so we'll do the same while upstream -decides what the best outcome is (which isn't this). - -Upstream Status: RHEL only -Signed-off-by: Peter Robinson -[Add a dependency on RHEL_DIFFERENCES] -Signed-off-by: Jeremy Cline ---- - arch/arm64/Kconfig | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 2e0700a451e5..77e7e749d7e5 100644 ---- a/arch/arm64/Kconfig -+++ b/arch/arm64/Kconfig -@@ -1133,6 +1133,7 @@ config XEN - config FORCE_MAX_ZONEORDER - int - default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) -+ default "13" if (ARCH_THUNDER && !ARM64_64K_PAGES && !RHEL_DIFFERENCES) - default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) - default "11" - help --- -2.26.2 - diff --git a/0001-Drop-that-for-now.patch b/0001-Drop-that-for-now.patch deleted file mode 100644 index c26066ec6..000000000 --- a/0001-Drop-that-for-now.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Laura Abbott -Date: Wed, 23 Jan 2019 14:36:37 +0100 -Subject: [PATCH] Drop that for now - ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 37cfb39d77af..c65a263990ae 100644 ---- a/Makefile -+++ b/Makefile -@@ -496,7 +496,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ -fno-PIE - KBUILD_CFLAGS := -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs \ - -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE \ - -Werror=implicit-function-declaration -Werror=implicit-int \ -- -Wno-format-security \ -+ -Wno-format-security -Wno-address-of-packed-member \ - -std=gnu89 - KBUILD_CPPFLAGS := -D__KERNEL__ - KBUILD_AFLAGS_KERNEL := --- -2.26.2 - diff --git a/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch b/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch deleted file mode 100644 index 4d7bef554..000000000 --- a/0001-Input-rmi4-remove-the-need-for-artificial-IRQ-in-cas.patch +++ /dev/null @@ -1,330 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Tissoires -Date: Mon, 3 Apr 2017 18:18:21 +0200 -Subject: [PATCH] Input: rmi4 - remove the need for artificial IRQ in case of - HID - -The IRQ from rmi4 may interfere with the one we currently use on i2c-hid. -Given that there is already a need for an external API from rmi4 to -forward the attention data, we can, in this particular case rely on a -separate workqueue to prevent cursor jumps. - -Reported-by: Cameron Gutman -Reported-by: Thorsten Leemhuis -Reported-by: Jason Ekstrand -Tested-by: Andrew Duggan -Signed-off-by: Benjamin Tissoires -Signed-off-by: Lyude ---- - drivers/hid/hid-rmi.c | 64 ----------------- - drivers/input/rmi4/rmi_driver.c | 124 +++++++++++++++++++------------- - include/linux/rmi.h | 1 + - 3 files changed, 75 insertions(+), 114 deletions(-) - -diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c -index 8cffa84c9650..6c4e3675601a 100644 ---- a/drivers/hid/hid-rmi.c -+++ b/drivers/hid/hid-rmi.c -@@ -322,19 +322,12 @@ static int rmi_input_event(struct hid_device *hdev, u8 *data, int size) - { - struct rmi_data *hdata = hid_get_drvdata(hdev); - struct rmi_device *rmi_dev = hdata->xport.rmi_dev; -- unsigned long flags; - - if (!(test_bit(RMI_STARTED, &hdata->flags))) - return 0; - -- local_irq_save(flags); -- - rmi_set_attn_data(rmi_dev, data[1], &data[2], size - 2); - -- generic_handle_irq(hdata->rmi_irq); -- -- local_irq_restore(flags); -- - return 1; - } - -@@ -592,56 +585,6 @@ static const struct rmi_transport_ops hid_rmi_ops = { - .reset = rmi_hid_reset, - }; - --static void rmi_irq_teardown(void *data) --{ -- struct rmi_data *hdata = data; -- struct irq_domain *domain = hdata->domain; -- -- if (!domain) -- return; -- -- irq_dispose_mapping(irq_find_mapping(domain, 0)); -- -- irq_domain_remove(domain); -- hdata->domain = NULL; -- hdata->rmi_irq = 0; --} -- --static int rmi_irq_map(struct irq_domain *h, unsigned int virq, -- irq_hw_number_t hw_irq_num) --{ -- irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq); -- -- return 0; --} -- --static const struct irq_domain_ops rmi_irq_ops = { -- .map = rmi_irq_map, --}; -- --static int rmi_setup_irq_domain(struct hid_device *hdev) --{ -- struct rmi_data *hdata = hid_get_drvdata(hdev); -- int ret; -- -- hdata->domain = irq_domain_create_linear(hdev->dev.fwnode, 1, -- &rmi_irq_ops, hdata); -- if (!hdata->domain) -- return -ENOMEM; -- -- ret = devm_add_action_or_reset(&hdev->dev, &rmi_irq_teardown, hdata); -- if (ret) -- return ret; -- -- hdata->rmi_irq = irq_create_mapping(hdata->domain, 0); -- if (hdata->rmi_irq <= 0) { -- hid_err(hdev, "Can't allocate an IRQ\n"); -- return hdata->rmi_irq < 0 ? hdata->rmi_irq : -ENXIO; -- } -- -- return 0; --} -- - static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - { - struct rmi_data *data = NULL; -@@ -714,18 +657,11 @@ static int rmi_probe(struct hid_device *hdev, const struct hid_device_id *id) - - mutex_init(&data->page_mutex); - -- ret = rmi_setup_irq_domain(hdev); -- if (ret) { -- hid_err(hdev, "failed to allocate IRQ domain\n"); -- return ret; -- } -- - if (data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS) - rmi_hid_pdata.f30_data.disable = true; - - data->xport.dev = hdev->dev.parent; - data->xport.pdata = rmi_hid_pdata; -- data->xport.pdata.irq = data->rmi_irq; - data->xport.proto_name = "hid"; - data->xport.ops = &hid_rmi_ops; - -diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c -index 258d5fe3d395..f7298e3dc8f3 100644 ---- a/drivers/input/rmi4/rmi_driver.c -+++ b/drivers/input/rmi4/rmi_driver.c -@@ -182,34 +182,47 @@ void rmi_set_attn_data(struct rmi_device *rmi_dev, unsigned long irq_status, - attn_data.data = fifo_data; - - kfifo_put(&drvdata->attn_fifo, attn_data); -+ -+ schedule_work(&drvdata->attn_work); - } - EXPORT_SYMBOL_GPL(rmi_set_attn_data); - --static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+static void attn_callback(struct work_struct *work) - { -- struct rmi_device *rmi_dev = dev_id; -- struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev); -+ struct rmi_driver_data *drvdata = container_of(work, -+ struct rmi_driver_data, -+ attn_work); - struct rmi4_attn_data attn_data = {0}; - int ret, count; - - count = kfifo_get(&drvdata->attn_fifo, &attn_data); -- if (count) { -- *(drvdata->irq_status) = attn_data.irq_status; -- drvdata->attn_data = attn_data; -- } -+ if (!count) -+ return; - -- ret = rmi_process_interrupt_requests(rmi_dev); -+ *(drvdata->irq_status) = attn_data.irq_status; -+ drvdata->attn_data = attn_data; -+ -+ ret = rmi_process_interrupt_requests(drvdata->rmi_dev); - if (ret) -- rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ rmi_dbg(RMI_DEBUG_CORE, &drvdata->rmi_dev->dev, - "Failed to process interrupt request: %d\n", ret); - -- if (count) { -- kfree(attn_data.data); -- drvdata->attn_data.data = NULL; -- } -+ kfree(attn_data.data); -+ drvdata->attn_data.data = NULL; - - if (!kfifo_is_empty(&drvdata->attn_fifo)) -- return rmi_irq_fn(irq, dev_id); -+ schedule_work(&drvdata->attn_work); -+} -+ -+static irqreturn_t rmi_irq_fn(int irq, void *dev_id) -+{ -+ struct rmi_device *rmi_dev = dev_id; -+ int ret; -+ -+ ret = rmi_process_interrupt_requests(rmi_dev); -+ if (ret) -+ rmi_dbg(RMI_DEBUG_CORE, &rmi_dev->dev, -+ "Failed to process interrupt request: %d\n", ret); - - return IRQ_HANDLED; - } -@@ -217,7 +230,6 @@ static irqreturn_t rmi_irq_fn(int irq, void *dev_id) - static int rmi_irq_init(struct rmi_device *rmi_dev) - { - struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev); -- struct rmi_driver_data *data = dev_get_drvdata(&rmi_dev->dev); - int irq_flags = irq_get_trigger_type(pdata->irq); - int ret; - -@@ -235,8 +247,6 @@ static int rmi_irq_init(struct rmi_device *rmi_dev) - return ret; - } - -- data->enabled = true; -- - return 0; - } - -@@ -886,23 +896,27 @@ void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake) - if (data->enabled) - goto out; - -- enable_irq(irq); -- data->enabled = true; -- if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = disable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to disable irq for wake: %d\n", -- retval); -- } -+ if (irq) { -+ enable_irq(irq); -+ data->enabled = true; -+ if (clear_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = disable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to disable irq for wake: %d\n", -+ retval); -+ } - -- /* -- * Call rmi_process_interrupt_requests() after enabling irq, -- * otherwise we may lose interrupt on edge-triggered systems. -- */ -- irq_flags = irq_get_trigger_type(pdata->irq); -- if (irq_flags & IRQ_TYPE_EDGE_BOTH) -- rmi_process_interrupt_requests(rmi_dev); -+ /* -+ * Call rmi_process_interrupt_requests() after enabling irq, -+ * otherwise we may lose interrupt on edge-triggered systems. -+ */ -+ irq_flags = irq_get_trigger_type(pdata->irq); -+ if (irq_flags & IRQ_TYPE_EDGE_BOTH) -+ rmi_process_interrupt_requests(rmi_dev); -+ } else { -+ data->enabled = true; -+ } - - out: - mutex_unlock(&data->enabled_mutex); -@@ -922,20 +936,22 @@ void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake) - goto out; - - data->enabled = false; -- disable_irq(irq); -- if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -- retval = enable_irq_wake(irq); -- if (retval) -- dev_warn(&rmi_dev->dev, -- "Failed to enable irq for wake: %d\n", -- retval); -- } -- -- /* make sure the fifo is clean */ -- while (!kfifo_is_empty(&data->attn_fifo)) { -- count = kfifo_get(&data->attn_fifo, &attn_data); -- if (count) -- kfree(attn_data.data); -+ if (irq) { -+ disable_irq(irq); -+ if (enable_wake && device_may_wakeup(rmi_dev->xport->dev)) { -+ retval = enable_irq_wake(irq); -+ if (retval) -+ dev_warn(&rmi_dev->dev, -+ "Failed to enable irq for wake: %d\n", -+ retval); -+ } -+ } else { -+ /* make sure the fifo is clean */ -+ while (!kfifo_is_empty(&data->attn_fifo)) { -+ count = kfifo_get(&data->attn_fifo, &attn_data); -+ if (count) -+ kfree(attn_data.data); -+ } - } - - out: -@@ -981,6 +997,8 @@ static int rmi_driver_remove(struct device *dev) - irq_domain_remove(data->irqdomain); - data->irqdomain = NULL; - -+ cancel_work_sync(&data->attn_work); -+ - rmi_f34_remove_sysfs(rmi_dev); - rmi_free_function_list(rmi_dev); - -@@ -1219,9 +1237,15 @@ static int rmi_driver_probe(struct device *dev) - } - } - -- retval = rmi_irq_init(rmi_dev); -- if (retval < 0) -- goto err_destroy_functions; -+ if (pdata->irq) { -+ retval = rmi_irq_init(rmi_dev); -+ if (retval < 0) -+ goto err_destroy_functions; -+ } -+ -+ data->enabled = true; -+ -+ INIT_WORK(&data->attn_work, attn_callback); - - if (data->f01_container->dev.driver) { - /* Driver already bound, so enable ATTN now. */ -diff --git a/include/linux/rmi.h b/include/linux/rmi.h -index 7b22366d0065..307a651b2755 100644 ---- a/include/linux/rmi.h -+++ b/include/linux/rmi.h -@@ -363,6 +363,7 @@ struct rmi_driver_data { - - struct rmi4_attn_data attn_data; - DECLARE_KFIFO(attn_fifo, struct rmi4_attn_data, 16); -+ struct work_struct attn_work; - }; - - int rmi_register_transport_device(struct rmi_transport_dev *xport); --- -2.26.2 - diff --git a/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch b/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch deleted file mode 100644 index b53addbe3..000000000 --- a/0001-KEYS-Make-use-of-platform-keyring-for-module-signatu.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Robert Holmes -Date: Tue, 23 Apr 2019 07:39:29 +0000 -Subject: [PATCH] KEYS: Make use of platform keyring for module signature - verify - -This patch completes commit 278311e417be ("kexec, KEYS: Make use of -platform keyring for signature verify") which, while adding the -platform keyring for bzImage verification, neglected to also add -this keyring for module verification. - -As such, kernel modules signed with keys from the MokList variable -were not successfully verified. - -Signed-off-by: Robert Holmes -Signed-off-by: Jeremy Cline ---- - kernel/module_signing.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/kernel/module_signing.c b/kernel/module_signing.c -index 9d9fc678c91d..84ad75a53c83 100644 ---- a/kernel/module_signing.c -+++ b/kernel/module_signing.c -@@ -38,8 +38,15 @@ int mod_verify_sig(const void *mod, struct load_info *info) - modlen -= sig_len + sizeof(ms); - info->len = modlen; - -- return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, - VERIFY_USE_SECONDARY_KEYRING, - VERIFYING_MODULE_SIGNATURE, - NULL, NULL); -+ if (ret == -ENOKEY && IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING)) { -+ ret = verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len, -+ VERIFY_USE_PLATFORM_KEYRING, -+ VERIFYING_MODULE_SIGNATURE, -+ NULL, NULL); -+ } -+ return ret; - } --- -2.26.2 - diff --git a/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch b/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch deleted file mode 100644 index 671b7402f..000000000 --- a/0001-Make-get_cert_list-use-efi_status_to_str-to-print-er.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 2 Oct 2017 18:18:30 -0400 -Subject: [PATCH] Make get_cert_list() use efi_status_to_str() to print error - messages. - -Upstream Status: RHEL only -Signed-off-by: Peter Jones -Signed-off-by: Jeremy Cline ---- - security/integrity/platform_certs/load_uefi.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c -index 253fb9a7fc98..8c95b68d86d4 100644 ---- a/security/integrity/platform_certs/load_uefi.c -+++ b/security/integrity/platform_certs/load_uefi.c -@@ -46,7 +46,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - return NULL; - - if (*status != EFI_BUFFER_TOO_SMALL) { -- pr_err("Couldn't get size: 0x%lx\n", *status); -+ pr_err("Couldn't get size: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - -@@ -57,7 +58,8 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, - *status = efi.get_variable(name, guid, NULL, &lsize, db); - if (*status != EFI_SUCCESS) { - kfree(db); -- pr_err("Error reading db var: 0x%lx\n", *status); -+ pr_err("Error reading db var: %s (0x%lx)\n", -+ efi_status_to_str(*status), *status); - return NULL; - } - --- -2.26.2 - diff --git a/0001-PCI-Add-MCFG-quirks-for-Tegra194-host-controllers.patch b/0001-PCI-Add-MCFG-quirks-for-Tegra194-host-controllers.patch deleted file mode 100644 index bf1e48016..000000000 --- a/0001-PCI-Add-MCFG-quirks-for-Tegra194-host-controllers.patch +++ /dev/null @@ -1,240 +0,0 @@ -From 9134295c0515492b1ab7733c0290b2afde336d6b Mon Sep 17 00:00:00 2001 -From: Vidya Sagar -Date: Sat, 11 Jan 2020 00:45:00 +0530 -Subject: [PATCH] PCI: Add MCFG quirks for Tegra194 host controllers - -The PCIe controller in Tegra194 SoC is not completely ECAM-compliant. -With the current hardware design limitations in place, ECAM can be enabled -only for one controller (C5 controller to be precise) with bus numbers -starting from 160 instead of 0. A different approach is taken to avoid this -abnormal way of enabling ECAM for just one controller but to enable -configuration space access for all the other controllers. In this approach, -ops are added through MCFG quirk mechanism which access the configuration -spaces by dynamically programming iATU (internal AddressTranslation Unit) -to generate respective configuration accesses just like the way it is -done in DesignWare core sub-system. - -Signed-off-by: Vidya Sagar -Acked-by: Thierry Reding -[ Updated by jonathanh@nvidia.com only permit building the Tegra194 - PCIe driver into the kernel and not as a module ] -Signed-off-by: Jon Hunter ---- - drivers/acpi/pci_mcfg.c | 7 ++ - drivers/pci/controller/dwc/Kconfig | 10 +- - drivers/pci/controller/dwc/Makefile | 2 +- - drivers/pci/controller/dwc/pcie-tegra194.c | 102 +++++++++++++++++++++ - include/linux/pci-ecam.h | 1 + - 5 files changed, 117 insertions(+), 5 deletions(-) - -diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c -index 54b36b7ad47d9..6573d495d9c1f 100644 ---- a/drivers/acpi/pci_mcfg.c -+++ b/drivers/acpi/pci_mcfg.c -@@ -116,6 +116,13 @@ static struct mcfg_fixup mcfg_quirks[] = { - THUNDER_ECAM_QUIRK(2, 12), - THUNDER_ECAM_QUIRK(2, 13), - -+ { "NVIDIA", "TEGRA194", 1, 0, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ { "NVIDIA", "TEGRA194", 1, 1, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ { "NVIDIA", "TEGRA194", 1, 2, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ { "NVIDIA", "TEGRA194", 1, 3, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ { "NVIDIA", "TEGRA194", 1, 4, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ { "NVIDIA", "TEGRA194", 1, 5, MCFG_BUS_ANY, &tegra194_pcie_ops}, -+ - #define XGENE_V1_ECAM_MCFG(rev, seg) \ - {"APM ", "XGENE ", rev, seg, MCFG_BUS_ANY, \ - &xgene_v1_pcie_ecam_ops } -diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig -index 044a3761c44f2..e4ee4bf9ac64a 100644 ---- a/drivers/pci/controller/dwc/Kconfig -+++ b/drivers/pci/controller/dwc/Kconfig -@@ -247,25 +247,27 @@ config PCI_MESON - implement the driver. - - config PCIE_TEGRA194 -- tristate -+ bool - - config PCIE_TEGRA194_HOST -- tristate "NVIDIA Tegra194 (and later) PCIe controller - Host Mode" -+ bool "NVIDIA Tegra194 (and later) PCIe controller - Host Mode" - depends on ARCH_TEGRA_194_SOC || COMPILE_TEST - depends on PCI_MSI_IRQ_DOMAIN - select PCIE_DW_HOST - select PHY_TEGRA194_P2U - select PCIE_TEGRA194 -+ default y if ARCH_TEGRA_194_SOC - help - Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to - work in host mode. There are two instances of PCIe controllers in - Tegra194. This controller can work either as EP or RC. In order to - enable host-specific features PCIE_TEGRA194_HOST must be selected and - in order to enable device-specific features PCIE_TEGRA194_EP must be -- selected. This uses the DesignWare core. -+ selected. This uses the DesignWare core. ACPI platforms with Tegra194 -+ don't need to enable this. - - config PCIE_TEGRA194_EP -- tristate "NVIDIA Tegra194 (and later) PCIe controller - Endpoint Mode" -+ bool "NVIDIA Tegra194 (and later) PCIe controller - Endpoint Mode" - depends on ARCH_TEGRA_194_SOC || COMPILE_TEST - depends on PCI_ENDPOINT - select PCIE_DW_EP -diff --git a/drivers/pci/controller/dwc/Makefile b/drivers/pci/controller/dwc/Makefile -index a751553fa0dbd..dbb9818765566 100644 ---- a/drivers/pci/controller/dwc/Makefile -+++ b/drivers/pci/controller/dwc/Makefile -@@ -17,7 +17,6 @@ obj-$(CONFIG_PCIE_INTEL_GW) += pcie-intel-gw.o - obj-$(CONFIG_PCIE_KIRIN) += pcie-kirin.o - obj-$(CONFIG_PCIE_HISI_STB) += pcie-histb.o - obj-$(CONFIG_PCI_MESON) += pci-meson.o --obj-$(CONFIG_PCIE_TEGRA194) += pcie-tegra194.o - obj-$(CONFIG_PCIE_UNIPHIER) += pcie-uniphier.o - obj-$(CONFIG_PCIE_UNIPHIER_EP) += pcie-uniphier-ep.o - -@@ -34,4 +33,5 @@ obj-$(CONFIG_PCIE_UNIPHIER_EP) += pcie-uniphier-ep.o - ifdef CONFIG_PCI - obj-$(CONFIG_ARM64) += pcie-al.o - obj-$(CONFIG_ARM64) += pcie-hisi.o -+obj-$(CONFIG_ARM64) += pcie-tegra194.o - endif -diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/controller/dwc/pcie-tegra194.c -index 92b77f7d83546..7b3d581795197 100644 ---- a/drivers/pci/controller/dwc/pcie-tegra194.c -+++ b/drivers/pci/controller/dwc/pcie-tegra194.c -@@ -22,6 +22,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -324,6 +326,103 @@ struct tegra_pcie_dw_of_data { - enum dw_pcie_device_mode mode; - }; - -+#if defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS) -+struct tegra194_pcie_acpi { -+ void __iomem *config_base; -+ void __iomem *iatu_base; -+ void __iomem *dbi_base; -+}; -+ -+static int tegra194_acpi_init(struct pci_config_window *cfg) -+{ -+ struct device *dev = cfg->parent; -+ struct tegra194_pcie_acpi *pcie; -+ -+ pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL); -+ if (!pcie) -+ return -ENOMEM; -+ -+ pcie->config_base = cfg->win; -+ pcie->iatu_base = cfg->win + SZ_256K; -+ pcie->dbi_base = cfg->win + SZ_512K; -+ cfg->priv = pcie; -+ -+ return 0; -+} -+ -+static inline void atu_reg_write(struct tegra194_pcie_acpi *pcie, int index, -+ u32 val, u32 reg) -+{ -+ u32 offset = PCIE_GET_ATU_OUTB_UNR_REG_OFFSET(index); -+ -+ writel(val, pcie->iatu_base + offset + reg); -+} -+ -+static void program_outbound_atu(struct tegra194_pcie_acpi *pcie, int index, -+ int type, u64 cpu_addr, u64 pci_addr, u64 size) -+{ -+ atu_reg_write(pcie, index, lower_32_bits(cpu_addr), -+ PCIE_ATU_LOWER_BASE); -+ atu_reg_write(pcie, index, upper_32_bits(cpu_addr), -+ PCIE_ATU_UPPER_BASE); -+ atu_reg_write(pcie, index, lower_32_bits(pci_addr), -+ PCIE_ATU_LOWER_TARGET); -+ atu_reg_write(pcie, index, lower_32_bits(cpu_addr + size - 1), -+ PCIE_ATU_LIMIT); -+ atu_reg_write(pcie, index, upper_32_bits(pci_addr), -+ PCIE_ATU_UPPER_TARGET); -+ atu_reg_write(pcie, index, type, PCIE_ATU_CR1); -+ atu_reg_write(pcie, index, PCIE_ATU_ENABLE, PCIE_ATU_CR2); -+} -+ -+static void __iomem *tegra194_map_bus(struct pci_bus *bus, -+ unsigned int devfn, int where) -+{ -+ struct pci_config_window *cfg = bus->sysdata; -+ struct tegra194_pcie_acpi *pcie = cfg->priv; -+ u32 busdev; -+ int type; -+ -+ if (bus->number < cfg->busr.start || bus->number > cfg->busr.end) -+ return NULL; -+ -+ if (bus->number == cfg->busr.start) { -+ if (PCI_SLOT(devfn) == 0) -+ return pcie->dbi_base + where; -+ else -+ return NULL; -+ } -+ -+ busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) | -+ PCIE_ATU_FUNC(PCI_FUNC(devfn)); -+ -+ if (bus->parent->number == cfg->busr.start) { -+ if (PCI_SLOT(devfn) == 0) -+ type = PCIE_ATU_TYPE_CFG0; -+ else -+ return NULL; -+ } else { -+ type = PCIE_ATU_TYPE_CFG1; -+ } -+ -+ program_outbound_atu(pcie, PCIE_ATU_REGION_INDEX0, type, -+ cfg->res.start, busdev, SZ_256K); -+ return (void __iomem *)(pcie->config_base + where); -+} -+ -+const struct pci_ecam_ops tegra194_pcie_ops = { -+ .bus_shift = 20, -+ .init = tegra194_acpi_init, -+ .pci_ops = { -+ .map_bus = tegra194_map_bus, -+ .read = pci_generic_config_read, -+ .write = pci_generic_config_write, -+ } -+}; -+#endif /* defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS) */ -+ -+#ifdef CONFIG_PCIE_TEGRA194 -+ - static inline struct tegra_pcie_dw *to_tegra_pcie(struct dw_pcie *pci) - { - return container_of(pci, struct tegra_pcie_dw, pci); -@@ -2405,3 +2504,6 @@ MODULE_DEVICE_TABLE(of, tegra_pcie_dw_of_match); - MODULE_AUTHOR("Vidya Sagar "); - MODULE_DESCRIPTION("NVIDIA PCIe host controller driver"); - MODULE_LICENSE("GPL v2"); -+ -+#endif /* CONFIG_PCIE_TEGRA194 */ -+ -diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h -index 1af5cb02ef7f9..3fb16ada505a0 100644 ---- a/include/linux/pci-ecam.h -+++ b/include/linux/pci-ecam.h -@@ -57,6 +57,7 @@ extern const struct pci_ecam_ops pci_thunder_ecam_ops; /* Cavium ThunderX 1.x */ - extern const struct pci_ecam_ops xgene_v1_pcie_ecam_ops; /* APM X-Gene PCIe v1 */ - extern const struct pci_ecam_ops xgene_v2_pcie_ecam_ops; /* APM X-Gene PCIe v2.x */ - extern const struct pci_ecam_ops al_pcie_ops; /* Amazon Annapurna Labs PCIe */ -+extern const struct pci_ecam_ops tegra194_pcie_ops; /* Tegra194 PCIe */ - #endif - - #if IS_ENABLED(CONFIG_PCI_HOST_COMMON) --- -2.26.2 - diff --git a/0001-Revert-arm64-allwinner-dts-a64-add-LCD-related-devic.patch b/0001-Revert-arm64-allwinner-dts-a64-add-LCD-related-devic.patch deleted file mode 100644 index 0ea8f7da8..000000000 --- a/0001-Revert-arm64-allwinner-dts-a64-add-LCD-related-devic.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 12 Jul 2020 13:42:14 +0100 -Subject: [PATCH] Revert "arm64: allwinner: dts: a64: add LCD-related device - nodes for PinePhone" - -This reverts commit 6b9deda8c30064a254bc66e3f6763281c96db7db. ---- - .../dts/allwinner/sun50i-a64-pinephone.dtsi | 37 ------------------- - 1 file changed, 37 deletions(-) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -index 96d9150423e0..cefda145c3c9 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -@@ -16,15 +16,6 @@ aliases { - serial0 = &uart0; - }; - -- backlight: backlight { -- compatible = "pwm-backlight"; -- pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; -- brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>; -- default-brightness-level = <15>; -- enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -- power-supply = <®_ldo_io0>; -- }; -- - chosen { - stdout-path = "serial0:115200n8"; - }; -@@ -93,30 +84,6 @@ &dai { - status = "okay"; - }; - --&de { -- status = "okay"; --}; -- --&dphy { -- status = "okay"; --}; -- --&dsi { -- vcc-dsi-supply = <®_dldo1>; -- #address-cells = <1>; -- #size-cells = <0>; -- status = "okay"; -- -- panel@0 { -- compatible = "xingbangda,xbd599"; -- reg = <0>; -- reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ -- iovcc-supply = <®_dldo2>; -- vcc-supply = <®_ldo_io0>; -- backlight = <&backlight>; -- }; --}; -- - &ehci0 { - status = "okay"; - }; -@@ -221,10 +188,6 @@ &r_pio { - */ - }; - --&r_pwm { -- status = "okay"; --}; -- - &r_rsb { - status = "okay"; - --- -2.26.2 - diff --git a/0001-Revert-drm-panel-add-Xingbangda-XBD599-panel.patch b/0001-Revert-drm-panel-add-Xingbangda-XBD599-panel.patch deleted file mode 100644 index 2950f8a79..000000000 --- a/0001-Revert-drm-panel-add-Xingbangda-XBD599-panel.patch +++ /dev/null @@ -1,418 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 12 Jul 2020 13:41:56 +0100 -Subject: [PATCH] Revert "drm: panel: add Xingbangda XBD599 panel" - -This reverts commit 5d53795bb19e39f048ac8028ec36ff04765e1237. ---- - drivers/gpu/drm/panel/Kconfig | 9 - - drivers/gpu/drm/panel/Makefile | 1 - - .../gpu/drm/panel/panel-xingbangda-xbd599.c | 366 ------------------ - 3 files changed, 376 deletions(-) - delete mode 100644 drivers/gpu/drm/panel/panel-xingbangda-xbd599.c - -diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 1f55a87bb657..39055c1f0e2f 100644 ---- a/drivers/gpu/drm/panel/Kconfig -+++ b/drivers/gpu/drm/panel/Kconfig -@@ -462,15 +462,6 @@ config DRM_PANEL_VISIONOX_RM69299 - Say Y here if you want to enable support for Visionox - RM69299 DSI Video Mode panel. - --config DRM_PANEL_XINGBANGDA_XBD599 -- tristate "Xingbangda XBD599 panel" -- depends on OF -- depends on DRM_MIPI_DSI -- depends on BACKLIGHT_CLASS_DEVICE -- help -- Say Y here if you want to enable support for the Xingbangda XBD599 -- MIPI DSI Video Mode panel. -- - config DRM_PANEL_XINPENG_XPP055C272 - tristate "Xinpeng XPP055C272 panel driver" - depends on OF -diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile -index 7b6b0c0397d6..de74f282c433 100644 ---- a/drivers/gpu/drm/panel/Makefile -+++ b/drivers/gpu/drm/panel/Makefile -@@ -49,5 +49,4 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o - obj-$(CONFIG_DRM_PANEL_TPO_TPG110) += panel-tpo-tpg110.o - obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o - obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) += panel-visionox-rm69299.o --obj-$(CONFIG_DRM_PANEL_XINGBANGDA_XBD599) += panel-xingbangda-xbd599.o - obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o -diff --git a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -deleted file mode 100644 -index b483f96ee1db..000000000000 ---- a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -+++ /dev/null -@@ -1,366 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* -- * Xingbangda XBD599 MIPI-DSI panel driver -- * -- * Copyright (C) 2019-2020 Icenowy Zheng -- * -- * Based on panel-rocktech-jh057n00900.c, which is: -- * Copyright (C) Purism SPC 2019 -- */ -- --#include --#include --#include --#include --#include --#include -- --#include --#include --#include --#include -- --/* Manufacturer specific Commands send via DSI */ --#define ST7703_CMD_ALL_PIXEL_OFF 0x22 --#define ST7703_CMD_ALL_PIXEL_ON 0x23 --#define ST7703_CMD_SETDISP 0xB2 --#define ST7703_CMD_SETRGBIF 0xB3 --#define ST7703_CMD_SETCYC 0xB4 --#define ST7703_CMD_SETBGP 0xB5 --#define ST7703_CMD_SETVCOM 0xB6 --#define ST7703_CMD_SETOTP 0xB7 --#define ST7703_CMD_SETPOWER_EXT 0xB8 --#define ST7703_CMD_SETEXTC 0xB9 --#define ST7703_CMD_SETMIPI 0xBA --#define ST7703_CMD_SETVDC 0xBC --#define ST7703_CMD_SETSCR 0xC0 --#define ST7703_CMD_SETPOWER 0xC1 --#define ST7703_CMD_UNK_C6 0xC6 --#define ST7703_CMD_SETPANEL 0xCC --#define ST7703_CMD_SETGAMMA 0xE0 --#define ST7703_CMD_SETEQ 0xE3 --#define ST7703_CMD_SETGIP1 0xE9 --#define ST7703_CMD_SETGIP2 0xEA -- --static const char * const regulator_names[] = { -- "iovcc", -- "vcc", --}; -- --struct xbd599 { -- struct device *dev; -- struct drm_panel panel; -- struct gpio_desc *reset_gpio; -- struct regulator_bulk_data supplies[ARRAY_SIZE(regulator_names)]; -- bool prepared; --}; -- --static inline struct xbd599 *panel_to_xbd599(struct drm_panel *panel) --{ -- return container_of(panel, struct xbd599, panel); --} -- --#define dsi_dcs_write_seq(dsi, cmd, seq...) do { \ -- static const u8 d[] = { seq }; \ -- int ret; \ -- ret = mipi_dsi_dcs_write(dsi, cmd, d, ARRAY_SIZE(d)); \ -- if (ret < 0) \ -- return ret; \ -- } while (0) -- --static int xbd599_init_sequence(struct xbd599 *ctx) --{ -- struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -- struct device *dev = ctx->dev; -- int ret; -- -- /* -- * Init sequence was supplied by the panel vendor. -- */ -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, -- 0xF1, 0x12, 0x83); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, -- 0x33, 0x81, 0x05, 0xF9, 0x0E, 0x0E, 0x20, 0x00, -- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, -- 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, -- 0x00, 0x00, 0x37); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, -- 0x25, 0x22, 0x20, 0x03); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, -- 0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00, -- 0x00, 0x00); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, -- 0x73, 0x73, 0x50, 0x50, 0x00, 0xC0, 0x08, 0x70, -- 0x00); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x4E); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0B); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xF0, 0x12, 0xF0); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, -- 0x00, 0x00, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, -- 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10); -- dsi_dcs_write_seq(dsi, 0xC6, 0x01, 0x00, 0xFF, 0xFF, 0x00); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, -- 0x74, 0x00, 0x32, 0x32, 0x77, 0xF1, 0xFF, 0xFF, -- 0xCC, 0xCC, 0x77, 0x77); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x07, 0x07); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x2C, 0x2C); -- dsi_dcs_write_seq(dsi, 0xBF, 0x02, 0x11, 0x00); -- -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, -- 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, -- 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, -- 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -- 0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88, -- 0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64, -- 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -- 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, -- 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -- 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, -- 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -- 0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -- 0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00, -- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, -- 0xA5, 0x00, 0x00, 0x00, 0x00); -- dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, -- 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, -- 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, -- 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -- 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, -- 0x12, 0x18); -- msleep(20); -- -- ret = mipi_dsi_dcs_exit_sleep_mode(dsi); -- if (ret < 0) { -- DRM_DEV_ERROR(dev, "Failed to exit sleep mode\n"); -- return ret; -- } -- msleep(250); -- -- ret = mipi_dsi_dcs_set_display_on(dsi); -- if (ret) -- return ret; -- msleep(50); -- -- DRM_DEV_DEBUG_DRIVER(dev, "Panel init sequence done\n"); -- return 0; --} -- --static int xbd599_prepare(struct drm_panel *panel) --{ -- struct xbd599 *ctx = panel_to_xbd599(panel); -- int ret; -- -- if (ctx->prepared) -- return 0; -- -- ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -- if (ret) -- return ret; -- -- DRM_DEV_DEBUG_DRIVER(ctx->dev, "Resetting the panel\n"); -- gpiod_set_value_cansleep(ctx->reset_gpio, 1); -- usleep_range(20, 40); -- gpiod_set_value_cansleep(ctx->reset_gpio, 0); -- msleep(20); -- -- ctx->prepared = true; -- -- return 0; --} -- --static int xbd599_enable(struct drm_panel *panel) --{ -- struct xbd599 *ctx = panel_to_xbd599(panel); -- int ret; -- -- ret = xbd599_init_sequence(ctx); -- if (ret < 0) { -- DRM_DEV_ERROR(ctx->dev, "Panel init sequence failed: %d\n", -- ret); -- return ret; -- } -- -- return 0; --} -- --static int xbd599_disable(struct drm_panel *panel) --{ -- struct xbd599 *ctx = panel_to_xbd599(panel); -- struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -- -- return mipi_dsi_dcs_set_display_off(dsi); --} -- --static int xbd599_unprepare(struct drm_panel *panel) --{ -- struct xbd599 *ctx = panel_to_xbd599(panel); -- -- if (!ctx->prepared) -- return 0; -- -- gpiod_set_value_cansleep(ctx->reset_gpio, 1); -- regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -- ctx->prepared = false; -- -- return 0; --} -- --static const struct drm_display_mode xbd599_default_mode = { -- .hdisplay = 720, -- .hsync_start = 720 + 40, -- .hsync_end = 720 + 40 + 40, -- .htotal = 720 + 40 + 40 + 40, -- .vdisplay = 1440, -- .vsync_start = 1440 + 18, -- .vsync_end = 1440 + 18 + 10, -- .vtotal = 1440 + 18 + 10 + 17, -- .vrefresh = 60, -- .clock = 69000, -- .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, -- -- .width_mm = 68, -- .height_mm = 136, -- .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, --}; -- --static int xbd599_get_modes(struct drm_panel *panel, -- struct drm_connector *connector) --{ -- struct xbd599 *ctx = panel_to_xbd599(panel); -- struct drm_display_mode *mode; -- -- mode = drm_mode_duplicate(connector->dev, &xbd599_default_mode); -- if (!mode) { -- DRM_DEV_ERROR(ctx->dev, "Failed to add mode\n"); -- return -ENOMEM; -- } -- -- drm_mode_set_name(mode); -- -- mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; -- connector->display_info.width_mm = mode->width_mm; -- connector->display_info.height_mm = mode->height_mm; -- drm_mode_probed_add(connector, mode); -- -- return 1; --} -- --static const struct drm_panel_funcs xbd599_drm_funcs = { -- .prepare = xbd599_prepare, -- .enable = xbd599_enable, -- .disable = xbd599_disable, -- .unprepare = xbd599_unprepare, -- .get_modes = xbd599_get_modes, --}; -- --static int xbd599_probe(struct mipi_dsi_device *dsi) --{ -- struct device *dev = &dsi->dev; -- struct xbd599 *ctx; -- int i, ret; -- -- ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); -- if (!ctx) -- return -ENOMEM; -- -- for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) -- ctx->supplies[i].supply = regulator_names[i]; -- -- ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), -- ctx->supplies); -- if (ret < 0) { -- DRM_DEV_ERROR(&dsi->dev, "cannot get regulators\n"); -- return ret; -- } -- -- ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); -- if (IS_ERR(ctx->reset_gpio)) { -- DRM_DEV_ERROR(dev, "cannot get reset gpio\n"); -- return PTR_ERR(ctx->reset_gpio); -- } -- -- mipi_dsi_set_drvdata(dsi, ctx); -- -- ctx->dev = dev; -- -- dsi->lanes = 4; -- dsi->format = MIPI_DSI_FMT_RGB888; -- dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; -- -- drm_panel_init(&ctx->panel, &dsi->dev, &xbd599_drm_funcs, -- DRM_MODE_CONNECTOR_DSI); -- -- ret = drm_panel_of_backlight(&ctx->panel); -- if (ret) -- return ret; -- -- drm_panel_add(&ctx->panel); -- -- ret = mipi_dsi_attach(dsi); -- if (ret < 0) { -- DRM_DEV_ERROR(dev, "mipi_dsi_attach failed. Is host ready?\n"); -- drm_panel_remove(&ctx->panel); -- return ret; -- } -- -- DRM_DEV_INFO(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", -- xbd599_default_mode.hdisplay, -- xbd599_default_mode.vdisplay, -- xbd599_default_mode.vrefresh, -- mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); -- -- return 0; --} -- --static void xbd599_shutdown(struct mipi_dsi_device *dsi) --{ -- struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -- int ret; -- -- ret = drm_panel_unprepare(&ctx->panel); -- if (ret < 0) -- DRM_DEV_ERROR(&dsi->dev, "Failed to unprepare panel: %d\n", -- ret); --} -- --static int xbd599_remove(struct mipi_dsi_device *dsi) --{ -- struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -- int ret; -- -- xbd599_shutdown(dsi); -- -- ret = mipi_dsi_detach(dsi); -- if (ret < 0) -- DRM_DEV_ERROR(&dsi->dev, "Failed to detach from DSI host: %d\n", -- ret); -- -- drm_panel_remove(&ctx->panel); -- -- return 0; --} -- --static const struct of_device_id xbd599_of_match[] = { -- { .compatible = "xingbangda,xbd599", }, -- { /* sentinel */ } --}; --MODULE_DEVICE_TABLE(of, xbd599_of_match); -- --static struct mipi_dsi_driver xbd599_driver = { -- .probe = xbd599_probe, -- .remove = xbd599_remove, -- .shutdown = xbd599_shutdown, -- .driver = { -- .name = "panel-xingbangda-xbd599", -- .of_match_table = xbd599_of_match, -- }, --}; --module_mipi_dsi_driver(xbd599_driver); -- --MODULE_AUTHOR("Icenowy Zheng "); --MODULE_DESCRIPTION("DRM driver for Xingbangda XBD599 MIPI DSI panel"); --MODULE_LICENSE("GPL v2"); --- -2.26.2 - diff --git a/0001-Revert-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timin.patch b/0001-Revert-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timin.patch deleted file mode 100644 index c290e7ab7..000000000 --- a/0001-Revert-drm-sun4i-sun6i_mipi_dsi-fix-horizontal-timin.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 12 Jul 2020 13:42:04 +0100 -Subject: [PATCH] Revert "drm/sun4i: sun6i_mipi_dsi: fix horizontal timing - calculation" - -This reverts commit d20a2ac9c6ecf514e115f06b6744b584bbc7c1b8. ---- - drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -index 52e009dc632b..aa67cb037e9d 100644 ---- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c -@@ -556,7 +556,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HSA_PACKET_OVERHEAD 10 - hsa = max((unsigned int)HSA_PACKET_OVERHEAD, -- (mode->hsync_end - mode->hsync_start) * Bpp) - HSA_PACKET_OVERHEAD; -+ (mode->hsync_end - mode->hsync_start) * Bpp - HSA_PACKET_OVERHEAD); - - /* - * The backporch is set using a blanking packet (4 -@@ -565,7 +565,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBP_PACKET_OVERHEAD 6 - hbp = max((unsigned int)HBP_PACKET_OVERHEAD, -- (mode->htotal - mode->hsync_end) * Bpp) - HBP_PACKET_OVERHEAD; -+ (mode->htotal - mode->hsync_end) * Bpp - HBP_PACKET_OVERHEAD); - - /* - * The frontporch is set using a sync event (4 bytes) -@@ -575,7 +575,7 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HFP_PACKET_OVERHEAD 16 - hfp = max((unsigned int)HFP_PACKET_OVERHEAD, -- (mode->hsync_start - mode->hdisplay) * Bpp) - HFP_PACKET_OVERHEAD; -+ (mode->hsync_start - mode->hdisplay) * Bpp - HFP_PACKET_OVERHEAD); - - /* - * The blanking is set using a sync event (4 bytes) -@@ -584,8 +584,8 @@ static void sun6i_dsi_setup_timings(struct sun6i_dsi *dsi, - */ - #define HBLK_PACKET_OVERHEAD 10 - hblk = max((unsigned int)HBLK_PACKET_OVERHEAD, -- (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp) - -- HBLK_PACKET_OVERHEAD; -+ (mode->htotal - (mode->hsync_end - mode->hsync_start)) * Bpp - -+ HBLK_PACKET_OVERHEAD); - - /* - * And I'm not entirely sure what vblk is about. The driver in --- -2.26.2 - diff --git a/0001-Revert-dt-bindings-panel-add-binding-for-Xingbangda-.patch b/0001-Revert-dt-bindings-panel-add-binding-for-Xingbangda-.patch deleted file mode 100644 index 990e624d3..000000000 --- a/0001-Revert-dt-bindings-panel-add-binding-for-Xingbangda-.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Sun, 12 Jul 2020 13:41:49 +0100 -Subject: [PATCH] Revert "dt-bindings: panel: add binding for Xingbangda XBD599 - panel" - -This reverts commit 8a717270db2000ff734d89e9448b32fbc038c49a. ---- - .../display/panel/xingbangda,xbd599.yaml | 50 ------------------- - 1 file changed, 50 deletions(-) - delete mode 100644 Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml - -diff --git a/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml b/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -deleted file mode 100644 -index b27bcf11198f..000000000000 ---- a/Documentation/devicetree/bindings/display/panel/xingbangda,xbd599.yaml -+++ /dev/null -@@ -1,50 +0,0 @@ --# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) --%YAML 1.2 ----- --$id: http://devicetree.org/schemas/display/panel/xingbangda,xbd599.yaml# --$schema: http://devicetree.org/meta-schemas/core.yaml# -- --title: Xingbangda XBD599 5.99in MIPI-DSI LCD panel -- --maintainers: -- - Icenowy Zheng -- --allOf: -- - $ref: panel-common.yaml# -- --properties: -- compatible: -- const: xingbangda,xbd599 -- reg: true -- backlight: true -- reset-gpios: true -- vcc-supply: -- description: regulator that supplies the VCC voltage -- iovcc-supply: -- description: regulator that supplies the IOVCC voltage -- --required: -- - compatible -- - reg -- - backlight -- - vcc-supply -- - iovcc-supply -- --additionalProperties: false -- --examples: -- - | -- dsi { -- #address-cells = <1>; -- #size-cells = <0>; -- -- panel@0 { -- compatible = "xingbangda,xbd599"; -- reg = <0>; -- backlight = <&backlight>; -- iovcc-supply = <®_dldo2>; -- vcc-supply = <®_ldo_io0>; -- }; -- }; -- --... --- -2.26.2 - diff --git a/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch b/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch deleted file mode 100644 index 6352ff73a..000000000 --- a/0001-Vulcan-AHCI-PCI-bar-fix-for-Broadcom-Vulcan-early-si.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Robert Richter -Date: Thu, 7 Jun 2018 22:59:32 -0400 -Subject: [PATCH] Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon - -Message-id: <1528412373-19128-2-git-send-email-rrichter@redhat.com> -Patchwork-id: 220950 -O-Subject: [RHEL-8.0 BZ 1563590 v2 1/2] PCI: Vulcan: AHCI PCI bar fix for Broadcom Vulcan early silicon -Bugzilla: 1563590 -RH-Acked-by: Dean Nelson -RH-Acked-by: Mark Langsdorf -RH-Acked-by: Mark Salter - -From: Ashok Kumar Sekar - -PCI BAR 5 is not setup correctly for the on-board AHCI -controller on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 -by using BAR 4's resources which are populated correctly but NOT used -by the AHCI controller actually. - -RHEL-only: - -Both patches are in RHEL-7.6 also. Inclusion of the patches into RHEL-8 -was discussed. Since there are partners with Ax system configurations it -was decided to carry them in RHEL8 too. See: - - https://bugzilla.redhat.com/show_bug.cgi?id=1563590#c1 - -Upstream Status: RHEL only -Signed-off-by: Ashok Kumar Sekar -Signed-off-by: Jayachandran C -Signed-off-by: Robert Richter -Signed-off-by: Herton R. Krzesinski ---- - drivers/pci/quirks.c | 24 ++++++++++++++++++++++++ - 1 file changed, 24 insertions(+) - -diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c -index 2ea61abd5830..abb314891f5b 100644 ---- a/drivers/pci/quirks.c -+++ b/drivers/pci/quirks.c -@@ -4196,6 +4196,30 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000, - DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084, - quirk_bridge_cavm_thrx2_pcie_root); - -+/* -+ * PCI BAR 5 is not setup correctly for the on-board AHCI controller -+ * on Broadcom's Vulcan processor. Added a quirk to fix BAR 5 by -+ * using BAR 4's resources which are populated correctly and NOT -+ * actually used by the AHCI controller. -+ */ -+static void quirk_fix_vulcan_ahci_bars(struct pci_dev *dev) -+{ -+ struct resource *r = &dev->resource[4]; -+ -+ if (!(r->flags & IORESOURCE_MEM) || (r->start == 0)) -+ return; -+ -+ /* Set BAR5 resource to BAR4 */ -+ dev->resource[5] = *r; -+ -+ /* Update BAR5 in pci config space */ -+ pci_write_config_dword(dev, PCI_BASE_ADDRESS_5, r->start); -+ -+ /* Clear BAR4's resource */ -+ memset(r, 0, sizeof(*r)); -+} -+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9027, quirk_fix_vulcan_ahci_bars); -+ - /* - * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero) - * class code. Fix it. --- -2.26.2 - diff --git a/0001-Work-around-for-gcc-bug-https-gcc.gnu.org-bugzilla-s.patch b/0001-Work-around-for-gcc-bug-https-gcc.gnu.org-bugzilla-s.patch deleted file mode 100644 index 93b1e9be0..000000000 --- a/0001-Work-around-for-gcc-bug-https-gcc.gnu.org-bugzilla-s.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 90750a5b1205a7dcc002224738585b861779cdae Mon Sep 17 00:00:00 2001 -From: "Justin M. Forbes" -Date: Thu, 30 Jul 2020 10:26:11 -0500 -Subject: [PATCH] Work around for gcc bug - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96377 - -Signed-off-by: Justin M. Forbes ---- - crypto/aegis128-neon-inner.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/crypto/aegis128-neon-inner.c b/crypto/aegis128-neon-inner.c -index 2a660ac1bc3a..fa87ff6a2a71 100644 ---- a/crypto/aegis128-neon-inner.c -+++ b/crypto/aegis128-neon-inner.c -@@ -148,8 +148,8 @@ void crypto_aegis128_init_neon(void *state, const void *key, const void *iv) - kiv, - vld1q_u8(const1), - vld1q_u8(const0), -- k ^ vld1q_u8(const0), -- k ^ vld1q_u8(const1), -+ (uint8x16_t) (k ^ vld1q_u8(const0)), -+ (uint8x16_t) (k ^ vld1q_u8(const1)), - }}; - int i; - --- -2.26.2 - diff --git a/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch b/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch deleted file mode 100644 index eea0deea2..000000000 --- a/0001-aarch64-acpi-scan-Fix-regression-related-to-X-Gene-U.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Mark Salter -Date: Thu, 10 May 2018 17:38:44 -0400 -Subject: [PATCH] aarch64: acpi scan: Fix regression related to X-Gene UARTs - -Message-id: <20180510173844.29580-4-msalter@redhat.com> -Patchwork-id: 214381 -O-Subject: [RHEL-8 BZ1519554 3/3] aarch64: acpi scan: Fix regression related to X-Gene UARTs -Bugzilla: 1519554 -RH-Acked-by: Al Stone -RH-Acked-by: Tony Camuso - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519554 -Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=16144520 - -Commit e361d1f85855 ("ACPI / scan: Fix enumeration for special UART -devices") caused a regression with some X-Gene based platforms (Mustang -and M400) with invalid DSDT. The DSDT makes it appear that the UART -device is also a slave device attached to itself. With the above commit -the UART won't be enumerated by ACPI scan (slave serial devices shouldn't -be). So check for X-Gene UART device and skip slace device check on it. - -Upstream Status: RHEL only -Signed-off-by: Mark Salter -Signed-off-by: Herton R. Krzesinski ---- - drivers/acpi/scan.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index 8777faced51a..2e60d792005f 100644 ---- a/drivers/acpi/scan.c -+++ b/drivers/acpi/scan.c -@@ -1572,6 +1572,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) - if (!acpi_match_device_ids(device, i2c_multi_instantiate_ids)) - return false; - -+ /* -+ * Firmware on some arm64 X-Gene platforms will make the UART -+ * device appear as both a UART and a slave of that UART. Just -+ * bail out here for X-Gene UARTs. -+ */ -+ if (IS_ENABLED(CONFIG_ARM64) && -+ !strcmp(acpi_device_hid(device), "APMC0D08")) -+ return false; -+ - INIT_LIST_HEAD(&resource_list); - acpi_dev_get_resources(device, &resource_list, - acpi_check_serial_bus_slave, --- -2.26.2 - diff --git a/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch b/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch deleted file mode 100644 index 0299e965c..000000000 --- a/0001-ahci-thunderx2-Fix-for-errata-that-affects-stop-engi.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Robert Richter -Date: Thu, 7 Jun 2018 22:59:33 -0400 -Subject: [PATCH] ahci: thunderx2: Fix for errata that affects stop engine - -Message-id: <1528412373-19128-3-git-send-email-rrichter@redhat.com> -Patchwork-id: 220952 -O-Subject: [RHEL-8.0 BZ 1563590 v2 2/2] ahci: thunderx2: Fix for errata that affects stop engine -Bugzilla: 1563590 -RH-Acked-by: Dean Nelson -RH-Acked-by: Mark Langsdorf -RH-Acked-by: Mark Salter - -From: Jayachandran C - -Apply workaround for this errata: - Synopsis: Resetting PxCMD.ST may hang the SATA device - - Description: An internal ping-pong buffer state is not reset - correctly for an PxCMD.ST=0 command for a SATA channel. This - may cause the SATA interface to hang when a PxCMD.ST=0 command - is received. - - Workaround: A SATA_BIU_CORE_ENABLE.sw_init_bsi must be asserted - by the driver whenever the PxCMD.ST needs to be de-asserted. This - will reset both the ports. So, it may not always work in a 2 - channel SATA system. - - Resolution: Fix in B0. - -Add the code to ahci_stop_engine() to do this. It is not easy to -stop the other "port" since it is associated with a different AHCI -interface. Please note that with this fix, SATA reset does not -hang any more, but it can cause failures on the other interface -if that is in active use. - -Unfortunately, we have nothing other the the CPU ID to check if the -SATA block has this issue. - -RHEL-only: - -Both patches are in RHEL-7.6 also. Inclusion of the patches into RHEL-8 -was discussed. Since there are partners with Ax system configurations it -was decided to carry them in RHEL8 too. See: - - https://bugzilla.redhat.com/show_bug.cgi?id=1563590#c1 - -[v3 with new delays] -Signed-off-by: Jayachandran C - -Upstream Status: RHEL only -Signed-off-by: Robert Richter -Signed-off-by: Herton R. Krzesinski ---- - drivers/ata/libahci.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index ea5bf5f4cbed..71c55cae27ac 100644 ---- a/drivers/ata/libahci.c -+++ b/drivers/ata/libahci.c -@@ -666,6 +666,24 @@ int ahci_stop_engine(struct ata_port *ap) - tmp &= ~PORT_CMD_START; - writel(tmp, port_mmio + PORT_CMD); - -+#ifdef CONFIG_ARM64 -+ /* Rev Ax of Cavium CN99XX needs a hack for port stop */ -+ if (dev_is_pci(ap->host->dev) && -+ to_pci_dev(ap->host->dev)->vendor == 0x14e4 && -+ to_pci_dev(ap->host->dev)->device == 0x9027 && -+ midr_is_cpu_model_range(read_cpuid_id(), -+ MIDR_CPU_MODEL(ARM_CPU_IMP_BRCM, BRCM_CPU_PART_VULCAN), -+ MIDR_CPU_VAR_REV(0, 0), -+ MIDR_CPU_VAR_REV(0, MIDR_REVISION_MASK))) { -+ tmp = readl(hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp | (1 << 26), hpriv->mmio + 0x8000); -+ udelay(100); -+ writel(tmp & ~(1 << 26), hpriv->mmio + 0x8000); -+ dev_warn(ap->host->dev, "CN99XX SATA reset workaround applied\n"); -+ } -+#endif -+ - /* wait for engine to stop. This could be as long as 500 msec */ - tmp = ata_wait_register(ap, port_mmio + PORT_CMD, - PORT_CMD_LIST_ON, PORT_CMD_LIST_ON, 1, 500); --- -2.26.2 - diff --git a/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch b/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch deleted file mode 100644 index 89eea8f8b..000000000 --- a/0001-arm-aarch64-Drop-the-EXPERT-setting-from-ARM64_FORCE.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jeremy Cline -Date: Tue, 1 Oct 2019 15:51:23 +0000 -Subject: [PATCH] arm: aarch64: Drop the EXPERT setting from ARM64_FORCE_52BIT - -Message-id: <20191001181256.22935-1-jcline@redhat.com> -Patchwork-id: 275498 -O-Subject: [ARK INTERNAL PATCH] [ARK INTERNAL PATCH] [redhat] Add patch - to drop the EXPERT setting from ARM64_FORCE_52BIT -Bugzilla: -RH-Acked-by: Laura Abbott - -We don't turn on EXPERT as there are few settings we actually want to -mess with. Remove the dependency for ARM64_FORCE_52BIT as we do want -that on in debug builds to help find 52-bit bugs. - -Upstream Status: RHEL only -Signed-off-by: Jeremy Cline ---- - arch/arm64/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 66dc41fd49f2..2e0700a451e5 100644 ---- a/arch/arm64/Kconfig -+++ b/arch/arm64/Kconfig -@@ -861,7 +861,7 @@ endchoice - - config ARM64_FORCE_52BIT - bool "Force 52-bit virtual addresses for userspace" -- depends on ARM64_VA_BITS_52 && EXPERT -+ depends on ARM64_VA_BITS_52 - help - For systems with 52-bit userspace VAs enabled, the kernel will attempt - to maintain compatibility with older software by providing 48-bit VAs --- -2.26.2 - diff --git a/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch b/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch deleted file mode 100644 index 498ffaf18..000000000 --- a/0001-arm-make-CONFIG_HIGHPTE-optional-without-CONFIG_EXPE.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jon Masters -Date: Thu, 18 Jul 2019 15:47:26 -0400 -Subject: [PATCH] arm: make CONFIG_HIGHPTE optional without CONFIG_EXPERT - -We will use this to force CONFIG_HIGHPTE off on LPAE for now - -Signed-off-by: Jon Masters ---- - arch/arm/Kconfig | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 2ac74904a3ce..f0094424f76a 100644 ---- a/arch/arm/Kconfig -+++ b/arch/arm/Kconfig -@@ -1549,9 +1549,9 @@ config HIGHMEM - If unsure, say n. - - config HIGHPTE -- bool "Allocate 2nd-level pagetables from highmem" if EXPERT -+ bool "Allocate 2nd-level pagetables from highmem" - depends on HIGHMEM -- default y -+ default n - help - The VM uses one page of physical memory for each page table. - For systems with a lot of processes, this can use a lot of --- -2.26.2 - diff --git a/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch b/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch deleted file mode 100644 index e3b07c2bb..000000000 --- a/0001-arm64-allwinner-dts-a64-add-LCD-related-device-nodes.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Mon, 16 Mar 2020 21:35:03 +0800 -Subject: [PATCH] arm64: allwinner: dts: a64: add LCD-related device nodes for - PinePhone - -PinePhone uses PWM backlight and a XBD599 LCD panel over DSI for -display. - -Add its device nodes. - -Signed-off-by: Icenowy Zheng ---- - .../dts/allwinner/sun50i-a64-pinephone.dtsi | 37 +++++++++++++++++++ - 1 file changed, 37 insertions(+) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -index cefda145c3c9..96d9150423e0 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -@@ -16,6 +16,15 @@ aliases { - serial0 = &uart0; - }; - -+ backlight: backlight { -+ compatible = "pwm-backlight"; -+ pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; -+ brightness-levels = <0 16 18 20 22 24 26 29 32 35 38 42 46 51 56 62 68 75 83 91 100>; -+ default-brightness-level = <15>; -+ enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -+ power-supply = <®_ldo_io0>; -+ }; -+ - chosen { - stdout-path = "serial0:115200n8"; - }; -@@ -84,6 +93,30 @@ &dai { - status = "okay"; - }; - -+&de { -+ status = "okay"; -+}; -+ -+&dphy { -+ status = "okay"; -+}; -+ -+&dsi { -+ vcc-dsi-supply = <®_dldo1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ -+ panel@0 { -+ compatible = "xingbangda,xbd599"; -+ reg = <0>; -+ reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ -+ iovcc-supply = <®_dldo2>; -+ vcc-supply = <®_ldo_io0>; -+ backlight = <&backlight>; -+ }; -+}; -+ - &ehci0 { - status = "okay"; - }; -@@ -188,6 +221,10 @@ &r_pio { - */ - }; - -+&r_pwm { -+ status = "okay"; -+}; -+ - &r_rsb { - status = "okay"; - --- -2.26.2 - diff --git a/0001-arm64-dts-sun50i-a64-pinephone-Add-touchscreen-suppo.patch b/0001-arm64-dts-sun50i-a64-pinephone-Add-touchscreen-suppo.patch deleted file mode 100644 index d2511ae64..000000000 --- a/0001-arm64-dts-sun50i-a64-pinephone-Add-touchscreen-suppo.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ondrej Jirman -Date: Fri, 26 Jun 2020 02:56:01 +0200 -Subject: [PATCH] arm64: dts: sun50i-a64-pinephone: Add touchscreen support - -Pinephone has a Goodix GT917S capacitive touchscreen controller on -I2C0 bus. Add support for it. - -Signed-off-by: Ondrej Jirman ---- - .../dts/allwinner/sun50i-a64-pinephone.dtsi | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -index 85a7aa5efd32..2d5694446d17 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -@@ -123,6 +123,25 @@ &ehci1 { - status = "okay"; - }; - -+&i2c0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c0_pins>; -+ status = "okay"; -+ -+ touchscreen@5d { -+ compatible = "goodix,gt917s", "goodix,gt911"; -+ reg = <0x5d>; -+ interrupt-parent = <&pio>; -+ interrupts = <7 4 IRQ_TYPE_LEVEL_HIGH>; /* PH4 */ -+ irq-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */ -+ reset-gpios = <&pio 7 11 GPIO_ACTIVE_HIGH>; /* PH11 */ -+ AVDD28-supply = <®_ldo_io0>; -+ VDDIO-supply = <®_ldo_io0>; -+ touchscreen-size-x = <720>; -+ touchscreen-size-y = <1440>; -+ }; -+}; -+ - &i2c1 { - status = "okay"; - --- -2.26.2 - diff --git a/0001-arm64-dts-sun50i-a64-pinephone-Enable-LCD-support-on.patch b/0001-arm64-dts-sun50i-a64-pinephone-Enable-LCD-support-on.patch deleted file mode 100644 index a38cd7250..000000000 --- a/0001-arm64-dts-sun50i-a64-pinephone-Enable-LCD-support-on.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Fri, 26 Jun 2020 02:56:00 +0200 -Subject: [PATCH] arm64: dts: sun50i-a64-pinephone: Enable LCD support on - PinePhone - -PinePhone uses PWM backlight and a XBD599 LCD panel over DSI for -display. - -Backlight levels curve was optimized by Martijn Braam using a -lux meter. - -Add its device nodes. - -Signed-off-by: Icenowy Zheng -Signed-off-by: Martijn Braam -Signed-off-by: Ondrej Jirman ---- - .../allwinner/sun50i-a64-pinephone-1.1.dts | 19 ++++++++++ - .../dts/allwinner/sun50i-a64-pinephone.dtsi | 35 +++++++++++++++++++ - 2 files changed, 54 insertions(+) - -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts -index 06a775c41664..3e99a87e9ce5 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.1.dts -@@ -9,3 +9,22 @@ / { - model = "Pine64 PinePhone Braveheart (1.1)"; - compatible = "pine64,pinephone-1.1", "allwinner,sun50i-a64"; - }; -+ -+&backlight { -+ power-supply = <®_ldo_io0>; -+ /* -+ * PWM backlight circuit on this PinePhone revision was changed since -+ * 1.0, and the lowest PWM duty cycle that doesn't lead to backlight -+ * being off is around 20%. Duty cycle for the lowest brightness level -+ * also varries quite a bit between individual boards, so the lowest -+ * value here was chosen as a safe default. -+ */ -+ brightness-levels = < -+ 774 793 814 842 -+ 882 935 1003 1088 -+ 1192 1316 1462 1633 -+ 1830 2054 2309 2596 -+ 2916 3271 3664 4096>; -+ num-interpolated-steps = <50>; -+ default-brightness-level = <400>; -+}; -diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -index cefda145c3c9..85a7aa5efd32 100644 ---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone.dtsi -@@ -16,6 +16,13 @@ aliases { - serial0 = &uart0; - }; - -+ backlight: backlight { -+ compatible = "pwm-backlight"; -+ pwms = <&r_pwm 0 50000 PWM_POLARITY_INVERTED>; -+ enable-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -+ /* Backlight configuration differs per PinePhone revision. */ -+ }; -+ - chosen { - stdout-path = "serial0:115200n8"; - }; -@@ -84,6 +91,30 @@ &dai { - status = "okay"; - }; - -+&de { -+ status = "okay"; -+}; -+ -+&dphy { -+ status = "okay"; -+}; -+ -+&dsi { -+ vcc-dsi-supply = <®_dldo1>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ status = "okay"; -+ -+ panel@0 { -+ compatible = "xingbangda,xbd599"; -+ reg = <0>; -+ reset-gpios = <&pio 3 23 GPIO_ACTIVE_LOW>; /* PD23 */ -+ iovcc-supply = <®_dldo2>; -+ vcc-supply = <®_ldo_io0>; -+ backlight = <&backlight>; -+ }; -+}; -+ - &ehci0 { - status = "okay"; - }; -@@ -188,6 +219,10 @@ &r_pio { - */ - }; - -+&r_pwm { -+ status = "okay"; -+}; -+ - &r_rsb { - status = "okay"; - --- -2.26.2 - diff --git a/0001-drm-panel-add-Xingbangda-XBD599-panel.patch b/0001-drm-panel-add-Xingbangda-XBD599-panel.patch deleted file mode 100644 index 6866d5f69..000000000 --- a/0001-drm-panel-add-Xingbangda-XBD599-panel.patch +++ /dev/null @@ -1,423 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Icenowy Zheng -Date: Mon, 16 Mar 2020 21:35:01 +0800 -Subject: [PATCH] drm: panel: add Xingbangda XBD599 panel - -Xingbangda XBD599 is a 5.99" 720x1440 MIPI-DSI IPS LCD panel made by -Xingbangda, which is used on PinePhone final assembled phones. - -Add support for it. - -Signed-off-by: Icenowy Zheng ---- - drivers/gpu/drm/panel/Kconfig | 9 + - drivers/gpu/drm/panel/Makefile | 1 + - .../gpu/drm/panel/panel-xingbangda-xbd599.c | 366 ++++++++++++++++++ - 3 files changed, 376 insertions(+) - create mode 100644 drivers/gpu/drm/panel/panel-xingbangda-xbd599.c - -diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 39055c1f0e2f..1f55a87bb657 100644 ---- a/drivers/gpu/drm/panel/Kconfig -+++ b/drivers/gpu/drm/panel/Kconfig -@@ -462,6 +462,15 @@ config DRM_PANEL_VISIONOX_RM69299 - Say Y here if you want to enable support for Visionox - RM69299 DSI Video Mode panel. - -+config DRM_PANEL_XINGBANGDA_XBD599 -+ tristate "Xingbangda XBD599 panel" -+ depends on OF -+ depends on DRM_MIPI_DSI -+ depends on BACKLIGHT_CLASS_DEVICE -+ help -+ Say Y here if you want to enable support for the Xingbangda XBD599 -+ MIPI DSI Video Mode panel. -+ - config DRM_PANEL_XINPENG_XPP055C272 - tristate "Xinpeng XPP055C272 panel driver" - depends on OF -diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile -index de74f282c433..7b6b0c0397d6 100644 ---- a/drivers/gpu/drm/panel/Makefile -+++ b/drivers/gpu/drm/panel/Makefile -@@ -49,4 +49,5 @@ obj-$(CONFIG_DRM_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o - obj-$(CONFIG_DRM_PANEL_TPO_TPG110) += panel-tpo-tpg110.o - obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o - obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) += panel-visionox-rm69299.o -+obj-$(CONFIG_DRM_PANEL_XINGBANGDA_XBD599) += panel-xingbangda-xbd599.o - obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o -diff --git a/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -new file mode 100644 -index 000000000000..b483f96ee1db ---- /dev/null -+++ b/drivers/gpu/drm/panel/panel-xingbangda-xbd599.c -@@ -0,0 +1,366 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Xingbangda XBD599 MIPI-DSI panel driver -+ * -+ * Copyright (C) 2019-2020 Icenowy Zheng -+ * -+ * Based on panel-rocktech-jh057n00900.c, which is: -+ * Copyright (C) Purism SPC 2019 -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+/* Manufacturer specific Commands send via DSI */ -+#define ST7703_CMD_ALL_PIXEL_OFF 0x22 -+#define ST7703_CMD_ALL_PIXEL_ON 0x23 -+#define ST7703_CMD_SETDISP 0xB2 -+#define ST7703_CMD_SETRGBIF 0xB3 -+#define ST7703_CMD_SETCYC 0xB4 -+#define ST7703_CMD_SETBGP 0xB5 -+#define ST7703_CMD_SETVCOM 0xB6 -+#define ST7703_CMD_SETOTP 0xB7 -+#define ST7703_CMD_SETPOWER_EXT 0xB8 -+#define ST7703_CMD_SETEXTC 0xB9 -+#define ST7703_CMD_SETMIPI 0xBA -+#define ST7703_CMD_SETVDC 0xBC -+#define ST7703_CMD_SETSCR 0xC0 -+#define ST7703_CMD_SETPOWER 0xC1 -+#define ST7703_CMD_UNK_C6 0xC6 -+#define ST7703_CMD_SETPANEL 0xCC -+#define ST7703_CMD_SETGAMMA 0xE0 -+#define ST7703_CMD_SETEQ 0xE3 -+#define ST7703_CMD_SETGIP1 0xE9 -+#define ST7703_CMD_SETGIP2 0xEA -+ -+static const char * const regulator_names[] = { -+ "iovcc", -+ "vcc", -+}; -+ -+struct xbd599 { -+ struct device *dev; -+ struct drm_panel panel; -+ struct gpio_desc *reset_gpio; -+ struct regulator_bulk_data supplies[ARRAY_SIZE(regulator_names)]; -+ bool prepared; -+}; -+ -+static inline struct xbd599 *panel_to_xbd599(struct drm_panel *panel) -+{ -+ return container_of(panel, struct xbd599, panel); -+} -+ -+#define dsi_dcs_write_seq(dsi, cmd, seq...) do { \ -+ static const u8 d[] = { seq }; \ -+ int ret; \ -+ ret = mipi_dsi_dcs_write(dsi, cmd, d, ARRAY_SIZE(d)); \ -+ if (ret < 0) \ -+ return ret; \ -+ } while (0) -+ -+static int xbd599_init_sequence(struct xbd599 *ctx) -+{ -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ struct device *dev = ctx->dev; -+ int ret; -+ -+ /* -+ * Init sequence was supplied by the panel vendor. -+ */ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, -+ 0xF1, 0x12, 0x83); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, -+ 0x33, 0x81, 0x05, 0xF9, 0x0E, 0x0E, 0x20, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, -+ 0x00, 0x91, 0x0a, 0x00, 0x00, 0x02, 0x4F, 0x11, -+ 0x00, 0x00, 0x37); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, -+ 0x25, 0x22, 0x20, 0x03); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, -+ 0x10, 0x10, 0x05, 0x05, 0x03, 0xFF, 0x00, 0x00, -+ 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, -+ 0x73, 0x73, 0x50, 0x50, 0x00, 0xC0, 0x08, 0x70, -+ 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x4E); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0B); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0xF0, 0x12, 0xF0); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, -+ 0x00, 0x00, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, -+ 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x10); -+ dsi_dcs_write_seq(dsi, 0xC6, 0x01, 0x00, 0xFF, 0xFF, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, -+ 0x74, 0x00, 0x32, 0x32, 0x77, 0xF1, 0xFF, 0xFF, -+ 0xCC, 0xCC, 0x77, 0x77); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x07, 0x07); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x2C, 0x2C); -+ dsi_dcs_write_seq(dsi, 0xBF, 0x02, 0x11, 0x00); -+ -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, -+ 0x82, 0x10, 0x06, 0x05, 0xA2, 0x0A, 0xA5, 0x12, -+ 0x31, 0x23, 0x37, 0x83, 0x04, 0xBC, 0x27, 0x38, -+ 0x0C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, -+ 0x03, 0x00, 0x00, 0x00, 0x75, 0x75, 0x31, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x13, 0x88, 0x64, -+ 0x64, 0x20, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x02, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, -+ 0x02, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x46, 0x02, 0x88, -+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x64, 0x88, 0x13, -+ 0x57, 0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, -+ 0x75, 0x88, 0x23, 0x14, 0x00, 0x00, 0x02, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, -+ 0xA5, 0x00, 0x00, 0x00, 0x00); -+ dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, -+ 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, 0x35, -+ 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, 0x12, -+ 0x18, 0x00, 0x09, 0x0D, 0x23, 0x27, 0x3C, 0x41, -+ 0x35, 0x07, 0x0D, 0x0E, 0x12, 0x13, 0x10, 0x12, -+ 0x12, 0x18); -+ msleep(20); -+ -+ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "Failed to exit sleep mode\n"); -+ return ret; -+ } -+ msleep(250); -+ -+ ret = mipi_dsi_dcs_set_display_on(dsi); -+ if (ret) -+ return ret; -+ msleep(50); -+ -+ DRM_DEV_DEBUG_DRIVER(dev, "Panel init sequence done\n"); -+ return 0; -+} -+ -+static int xbd599_prepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ if (ctx->prepared) -+ return 0; -+ -+ ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ if (ret) -+ return ret; -+ -+ DRM_DEV_DEBUG_DRIVER(ctx->dev, "Resetting the panel\n"); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ usleep_range(20, 40); -+ gpiod_set_value_cansleep(ctx->reset_gpio, 0); -+ msleep(20); -+ -+ ctx->prepared = true; -+ -+ return 0; -+} -+ -+static int xbd599_enable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ int ret; -+ -+ ret = xbd599_init_sequence(ctx); -+ if (ret < 0) { -+ DRM_DEV_ERROR(ctx->dev, "Panel init sequence failed: %d\n", -+ ret); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+static int xbd599_disable(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); -+ -+ return mipi_dsi_dcs_set_display_off(dsi); -+} -+ -+static int xbd599_unprepare(struct drm_panel *panel) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ -+ if (!ctx->prepared) -+ return 0; -+ -+ gpiod_set_value_cansleep(ctx->reset_gpio, 1); -+ regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); -+ ctx->prepared = false; -+ -+ return 0; -+} -+ -+static const struct drm_display_mode xbd599_default_mode = { -+ .hdisplay = 720, -+ .hsync_start = 720 + 40, -+ .hsync_end = 720 + 40 + 40, -+ .htotal = 720 + 40 + 40 + 40, -+ .vdisplay = 1440, -+ .vsync_start = 1440 + 18, -+ .vsync_end = 1440 + 18 + 10, -+ .vtotal = 1440 + 18 + 10 + 17, -+ .vrefresh = 60, -+ .clock = 69000, -+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC, -+ -+ .width_mm = 68, -+ .height_mm = 136, -+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, -+}; -+ -+static int xbd599_get_modes(struct drm_panel *panel, -+ struct drm_connector *connector) -+{ -+ struct xbd599 *ctx = panel_to_xbd599(panel); -+ struct drm_display_mode *mode; -+ -+ mode = drm_mode_duplicate(connector->dev, &xbd599_default_mode); -+ if (!mode) { -+ DRM_DEV_ERROR(ctx->dev, "Failed to add mode\n"); -+ return -ENOMEM; -+ } -+ -+ drm_mode_set_name(mode); -+ -+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; -+ connector->display_info.width_mm = mode->width_mm; -+ connector->display_info.height_mm = mode->height_mm; -+ drm_mode_probed_add(connector, mode); -+ -+ return 1; -+} -+ -+static const struct drm_panel_funcs xbd599_drm_funcs = { -+ .prepare = xbd599_prepare, -+ .enable = xbd599_enable, -+ .disable = xbd599_disable, -+ .unprepare = xbd599_unprepare, -+ .get_modes = xbd599_get_modes, -+}; -+ -+static int xbd599_probe(struct mipi_dsi_device *dsi) -+{ -+ struct device *dev = &dsi->dev; -+ struct xbd599 *ctx; -+ int i, ret; -+ -+ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); -+ if (!ctx) -+ return -ENOMEM; -+ -+ for (i = 0; i < ARRAY_SIZE(ctx->supplies); i++) -+ ctx->supplies[i].supply = regulator_names[i]; -+ -+ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), -+ ctx->supplies); -+ if (ret < 0) { -+ DRM_DEV_ERROR(&dsi->dev, "cannot get regulators\n"); -+ return ret; -+ } -+ -+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); -+ if (IS_ERR(ctx->reset_gpio)) { -+ DRM_DEV_ERROR(dev, "cannot get reset gpio\n"); -+ return PTR_ERR(ctx->reset_gpio); -+ } -+ -+ mipi_dsi_set_drvdata(dsi, ctx); -+ -+ ctx->dev = dev; -+ -+ dsi->lanes = 4; -+ dsi->format = MIPI_DSI_FMT_RGB888; -+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; -+ -+ drm_panel_init(&ctx->panel, &dsi->dev, &xbd599_drm_funcs, -+ DRM_MODE_CONNECTOR_DSI); -+ -+ ret = drm_panel_of_backlight(&ctx->panel); -+ if (ret) -+ return ret; -+ -+ drm_panel_add(&ctx->panel); -+ -+ ret = mipi_dsi_attach(dsi); -+ if (ret < 0) { -+ DRM_DEV_ERROR(dev, "mipi_dsi_attach failed. Is host ready?\n"); -+ drm_panel_remove(&ctx->panel); -+ return ret; -+ } -+ -+ DRM_DEV_INFO(dev, "%ux%u@%u %ubpp dsi %udl - ready\n", -+ xbd599_default_mode.hdisplay, -+ xbd599_default_mode.vdisplay, -+ xbd599_default_mode.vrefresh, -+ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes); -+ -+ return 0; -+} -+ -+static void xbd599_shutdown(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ ret = drm_panel_unprepare(&ctx->panel); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to unprepare panel: %d\n", -+ ret); -+} -+ -+static int xbd599_remove(struct mipi_dsi_device *dsi) -+{ -+ struct xbd599 *ctx = mipi_dsi_get_drvdata(dsi); -+ int ret; -+ -+ xbd599_shutdown(dsi); -+ -+ ret = mipi_dsi_detach(dsi); -+ if (ret < 0) -+ DRM_DEV_ERROR(&dsi->dev, "Failed to detach from DSI host: %d\n", -+ ret); -+ -+ drm_panel_remove(&ctx->panel); -+ -+ return 0; -+} -+ -+static const struct of_device_id xbd599_of_match[] = { -+ { .compatible = "xingbangda,xbd599", }, -+ { /* sentinel */ } -+}; -+MODULE_DEVICE_TABLE(of, xbd599_of_match); -+ -+static struct mipi_dsi_driver xbd599_driver = { -+ .probe = xbd599_probe, -+ .remove = xbd599_remove, -+ .shutdown = xbd599_shutdown, -+ .driver = { -+ .name = "panel-xingbangda-xbd599", -+ .of_match_table = xbd599_of_match, -+ }, -+}; -+module_mipi_dsi_driver(xbd599_driver); -+ -+MODULE_AUTHOR("Icenowy Zheng "); -+MODULE_DESCRIPTION("DRM driver for Xingbangda XBD599 MIPI DSI panel"); -+MODULE_LICENSE("GPL v2"); --- -2.26.2 - diff --git a/0001-drm-panel-rocktech-jh057n00900-Rename-the-driver-to-.patch b/0001-drm-panel-rocktech-jh057n00900-Rename-the-driver-to-.patch deleted file mode 100644 index d78bf5644..000000000 --- a/0001-drm-panel-rocktech-jh057n00900-Rename-the-driver-to-.patch +++ /dev/null @@ -1,948 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ondrej Jirman -Date: Fri, 26 Jun 2020 02:55:52 +0200 -Subject: [PATCH] drm/panel: rocktech-jh057n00900: Rename the driver to st7703 - -This rename is done so that the driver matches the name of the -display controller and in preparation for adding support for more -panels to the driver. - -This is just a basic file rename, with no code changes. - -Signed-off-by: Ondrej Jirman ---- - drivers/gpu/drm/panel/Kconfig | 26 +- - drivers/gpu/drm/panel/Makefile | 2 +- - .../drm/panel/panel-rocktech-jh057n00900.c | 424 ------------------ - drivers/gpu/drm/panel/panel-sitronix-st7703.c | 424 ++++++++++++++++++ - 4 files changed, 438 insertions(+), 438 deletions(-) - delete mode 100644 drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c - create mode 100644 drivers/gpu/drm/panel/panel-sitronix-st7703.c - -diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 39055c1f0e2f..de2f2a452be5 100644 ---- a/drivers/gpu/drm/panel/Kconfig -+++ b/drivers/gpu/drm/panel/Kconfig -@@ -283,19 +283,6 @@ config DRM_PANEL_RAYDIUM_RM68200 - Say Y here if you want to enable support for Raydium RM68200 - 720x1280 DSI video mode panel. - --config DRM_PANEL_ROCKTECH_JH057N00900 -- tristate "Rocktech JH057N00900 MIPI touchscreen panel" -- depends on OF -- depends on DRM_MIPI_DSI -- depends on BACKLIGHT_CLASS_DEVICE -- help -- Say Y here if you want to enable support for Rocktech JH057N00900 -- MIPI DSI panel as e.g. used in the Librem 5 devkit. It has a -- resolution of 720x1440 pixels, a built in backlight and touch -- controller. -- Touch input support is provided by the goodix driver and needs to be -- selected separately. -- - config DRM_PANEL_RONBO_RB070D30 - tristate "Ronbo Electronics RB070D30 panel" - depends on OF -@@ -395,6 +382,19 @@ config DRM_PANEL_SITRONIX_ST7701 - ST7701 controller for 480X864 LCD panels with MIPI/RGB/SPI - system interfaces. - -+config DRM_PANEL_SITRONIX_ST7703 -+ tristate "Sitronix ST7703 based MIPI touchscreen panels" -+ depends on OF -+ depends on DRM_MIPI_DSI -+ depends on BACKLIGHT_CLASS_DEVICE -+ help -+ Say Y here if you want to enable support for Sitronix ST7703 based -+ panels, souch as Rocktech JH057N00900 MIPI DSI panel as e.g. used in -+ the Librem 5 devkit. It has a resolution of 720x1440 pixels, a built -+ in backlight and touch controller. -+ Touch input support is provided by the goodix driver and needs to be -+ selected separately. -+ - config DRM_PANEL_SITRONIX_ST7789V - tristate "Sitronix ST7789V panel" - depends on OF && SPI -diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile -index de74f282c433..e45ceac6286f 100644 ---- a/drivers/gpu/drm/panel/Makefile -+++ b/drivers/gpu/drm/panel/Makefile -@@ -27,7 +27,6 @@ obj-$(CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00) += panel-panasonic-vvx10f034n00.o - obj-$(CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN) += panel-raspberrypi-touchscreen.o - obj-$(CONFIG_DRM_PANEL_RAYDIUM_RM67191) += panel-raydium-rm67191.o - obj-$(CONFIG_DRM_PANEL_RAYDIUM_RM68200) += panel-raydium-rm68200.o --obj-$(CONFIG_DRM_PANEL_ROCKTECH_JH057N00900) += panel-rocktech-jh057n00900.o - obj-$(CONFIG_DRM_PANEL_RONBO_RB070D30) += panel-ronbo-rb070d30.o - obj-$(CONFIG_DRM_PANEL_SAMSUNG_LD9040) += panel-samsung-ld9040.o - obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6D16D0) += panel-samsung-s6d16d0.o -@@ -41,6 +40,7 @@ obj-$(CONFIG_DRM_PANEL_SHARP_LQ101R1SX01) += panel-sharp-lq101r1sx01.o - obj-$(CONFIG_DRM_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o - obj-$(CONFIG_DRM_PANEL_SHARP_LS043T1LE01) += panel-sharp-ls043t1le01.o - obj-$(CONFIG_DRM_PANEL_SITRONIX_ST7701) += panel-sitronix-st7701.o -+obj-$(CONFIG_DRM_PANEL_SITRONIX_ST7703) += panel-sitronix-st7703.o - obj-$(CONFIG_DRM_PANEL_SITRONIX_ST7789V) += panel-sitronix-st7789v.o - obj-$(CONFIG_DRM_PANEL_SONY_ACX424AKP) += panel-sony-acx424akp.o - obj-$(CONFIG_DRM_PANEL_SONY_ACX565AKM) += panel-sony-acx565akm.o -diff --git a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c b/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c -deleted file mode 100644 -index 38ff742bc120..000000000000 ---- a/drivers/gpu/drm/panel/panel-rocktech-jh057n00900.c -+++ /dev/null -@@ -1,424 +0,0 @@ --// SPDX-License-Identifier: GPL-2.0 --/* -- * Rockteck jh057n00900 5.5" MIPI-DSI panel driver -- * -- * Copyright (C) Purism SPC 2019 -- */ -- --#include --#include --#include --#include --#include --#include --#include -- --#include