Takashi Iwai b751cb
From: Takashi Iwai <tiwai@suse.de>
Takashi Iwai b751cb
Subject: drm/nouveau: blacklist Turing and Ampere models as default
Takashi Iwai b751cb
Patch-mainline: Never, SLE-specific workaround
Takashi Iwai b751cb
References: bsc#1208209
Takashi Iwai b751cb
Takashi Iwai b751cb
The nouveau driver is broken in many ways for the recent models.
Takashi Iwai b751cb
Since we already provide opengpu driver for Turing and Ampere models
Takashi Iwai b751cb
as a better alternative, let's disable the probing for those models.
Takashi Iwai b751cb
Takashi Iwai b751cb
User can still enable nouveau to probe of those models by passing the
Takashi Iwai b751cb
force_probe=1 module option, too.
Takashi Iwai b751cb
Takashi Iwai b751cb
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai b751cb
Takashi Iwai b751cb
---
Takashi Iwai b751cb
 drivers/gpu/drm/nouveau/nouveau_blacklist.c |  186 ++++++++++++++++++++++++++++
Takashi Iwai b2a56d
 drivers/gpu/drm/nouveau/nouveau_drm.c       |   34 +++++
Takashi Iwai b2a56d
 2 files changed, 220 insertions(+)
Takashi Iwai b751cb
Takashi Iwai b751cb
--- /dev/null
Takashi Iwai b751cb
+++ b/drivers/gpu/drm/nouveau/nouveau_blacklist.c
Takashi Iwai b751cb
@@ -0,0 +1,186 @@
Takashi Iwai b751cb
+/*
Takashi Iwai b751cb
+ * List of PCI SSIDs to be disabled as default (Turing and Ampere models)
Takashi Iwai b751cb
+ * that are supported by Nvidia opengpu driver
Takashi Iwai b751cb
+ */
Takashi Iwai b751cb
+
Takashi Iwai b751cb
+static const u16 nouveau_probe_blacklist[] = {
Takashi Iwai b751cb
+	0x1E02, /* NVIDIA TITAN RTX */
Takashi Iwai b751cb
+	0x1E04, /* NVIDIA GeForce RTX 2080 Ti */
Takashi Iwai b751cb
+	0x1E07, /* NVIDIA GeForce RTX 2080 Ti */
Takashi Iwai b751cb
+	0x1E30, /* Quadro RTX 8000 */
Takashi Iwai b751cb
+	0x1E36, /* Quadro RTX 6000 */
Takashi Iwai b751cb
+	0x1E78, /* Quadro RTX 6000 */
Takashi Iwai b751cb
+	0x1E81, /* NVIDIA GeForce RTX 2080 SUPER */
Takashi Iwai b751cb
+	0x1E82, /* NVIDIA GeForce RTX 2080 */
Takashi Iwai b751cb
+	0x1E84, /* NVIDIA GeForce RTX 2070 SUPER */
Takashi Iwai b751cb
+	0x1E87, /* NVIDIA GeForce RTX 2080 */
Takashi Iwai b751cb
+	0x1E89, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1E90, /* NVIDIA GeForce RTX 2080 with Max-Q Design */
Takashi Iwai b751cb
+	0x1E91, /* NVIDIA GeForce RTX 2070 Super with Max-Q Design */
Takashi Iwai b751cb
+	0x1E93, /* NVIDIA GeForce RTX 2080 Super with Max-Q Design */
Takashi Iwai b751cb
+	0x1EB0, /* Quadro RTX 5000 */
Takashi Iwai b751cb
+	0x1EB1, /* Quadro RTX 4000 */
Takashi Iwai b751cb
+	0x1EB5, /* Quadro RTX 5000 with Max-Q Design */
Takashi Iwai b751cb
+	0x1EB6, /* Quadro RTX 4000 with Max-Q Design */
Takashi Iwai b751cb
+	0x1EC2, /* NVIDIA GeForce RTX 2070 SUPER */
Takashi Iwai b751cb
+	0x1EC7, /* NVIDIA GeForce RTX 2070 SUPER */
Takashi Iwai b751cb
+	0x1ED0, /* NVIDIA GeForce RTX 2080 with Max-Q Design */
Takashi Iwai b751cb
+	0x1ED1, /* NVIDIA GeForce RTX 2070 Super with Max-Q Design */
Takashi Iwai b751cb
+	0x1ED3, /* NVIDIA GeForce RTX 2080 Super with Max-Q Design */
Takashi Iwai b751cb
+	0x1EF5, /* Quadro RTX 5000 */
Takashi Iwai b751cb
+	0x1F02, /* NVIDIA GeForce RTX 2070 */
Takashi Iwai b751cb
+	0x1F03, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F06, /* NVIDIA GeForce RTX 2060 SUPER */
Takashi Iwai b751cb
+	0x1F07, /* NVIDIA GeForce RTX 2070 */
Takashi Iwai b751cb
+	0x1F08, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F0A, /* NVIDIA GeForce GTX 1650 */
Takashi Iwai b751cb
+	0x1F10, /* NVIDIA GeForce RTX 2070 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F11, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F12, /* NVIDIA GeForce RTX 2060 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F14, /* NVIDIA GeForce RTX 2070 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F15, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F36, /* Quadro RTX 3000 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F42, /* NVIDIA GeForce RTX 2060 SUPER */
Takashi Iwai b751cb
+	0x1F47, /* NVIDIA GeForce RTX 2060 SUPER */
Takashi Iwai b751cb
+	0x1F50, /* NVIDIA GeForce RTX 2070 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F51, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F54, /* NVIDIA GeForce RTX 2070 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F55, /* NVIDIA GeForce RTX 2060 */
Takashi Iwai b751cb
+	0x1F76, /* Matrox D-Series D2480 */
Takashi Iwai b751cb
+	0x1F82, /* NVIDIA GeForce GTX 1650 */
Takashi Iwai b751cb
+	0x1F83, /* NVIDIA GeForce GTX 1630 */
Takashi Iwai b751cb
+	0x1F91, /* NVIDIA GeForce GTX 1650 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F95, /* NVIDIA GeForce GTX 1650 Ti with Max-Q Design */
Takashi Iwai b751cb
+	0x1F96, /* NVIDIA GeForce GTX 1650 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F97, /* NVIDIA GeForce MX450 */
Takashi Iwai b751cb
+	0x1F98, /* NVIDIA GeForce MX450 */
Takashi Iwai b751cb
+	0x1F99, /* NVIDIA GeForce GTX 1650 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F9C, /* NVIDIA GeForce MX450 */
Takashi Iwai b751cb
+	0x1F9D, /* NVIDIA GeForce GTX 1650 with Max-Q Design */
Takashi Iwai b751cb
+	0x1F9F, /* NVIDIA GeForce MX550 */
Takashi Iwai b751cb
+	0x1FA0, /* NVIDIA GeForce MX550 */
Takashi Iwai b751cb
+	0x1FB0, /* NVIDIA T1000 */
Takashi Iwai b751cb
+	0x1FB1, /* NVIDIA T600 */
Takashi Iwai b751cb
+	0x1FB2, /* NVIDIA T400 */
Takashi Iwai b751cb
+	0x1FB6, /* NVIDIA T600 Laptop GPU */
Takashi Iwai b751cb
+	0x1FB7, /* NVIDIA T550 Laptop GPU */
Takashi Iwai b751cb
+	0x1FB8, /* Quadro T2000 with Max-Q Design */
Takashi Iwai b751cb
+	0x1FB9, /* Quadro T1000 with Max-Q Design */
Takashi Iwai b751cb
+	0x1FBA, /* NVIDIA T600 Laptop GPU */
Takashi Iwai b751cb
+	0x1FBB, /* NVIDIA T500 */
Takashi Iwai b751cb
+	0x1FBC, /* NVIDIA T1200 Laptop GPU */
Takashi Iwai b751cb
+	0x1FDD, /* NVIDIA GeForce GTX 1650 */
Takashi Iwai b751cb
+	0x1FF0, /* NVIDIA T1000 8GB */
Takashi Iwai b751cb
+	0x1FF2, /* NVIDIA T400 4GB */
Takashi Iwai b751cb
+	0x1FF9, /* Quadro T1000 */
Takashi Iwai b751cb
+	0x20F3, /* NVIDIA A800-SXM4-80GB */
Takashi Iwai b751cb
+	0x20F5, /* NVIDIA A800 80GB PCIe LC */
Takashi Iwai b751cb
+	0x2182, /* NVIDIA GeForce GTX 1660 Ti */
Takashi Iwai b751cb
+	0x2184, /* NVIDIA GeForce GTX 1660 */
Takashi Iwai b751cb
+	0x2187, /* NVIDIA GeForce GTX 1650 SUPER */
Takashi Iwai b751cb
+	0x2188, /* NVIDIA GeForce GTX 1650 */
Takashi Iwai b751cb
+	0x2191, /* NVIDIA GeForce GTX 1660 Ti with Max-Q Design */
Takashi Iwai b751cb
+	0x2192, /* NVIDIA GeForce GTX 1650 Ti */
Takashi Iwai b751cb
+	0x21C4, /* NVIDIA GeForce GTX 1660 SUPER */
Takashi Iwai b751cb
+	0x21D1, /* NVIDIA GeForce GTX 1660 Ti */
Takashi Iwai b751cb
+	0x2203, /* NVIDIA GeForce RTX 3090 Ti */
Takashi Iwai b751cb
+	0x2204, /* NVIDIA GeForce RTX 3090 */
Takashi Iwai b751cb
+	0x2206, /* NVIDIA GeForce RTX 3080 */
Takashi Iwai b751cb
+	0x2207, /* NVIDIA GeForce RTX 3070 Ti */
Takashi Iwai b751cb
+	0x2208, /* NVIDIA GeForce RTX 3080 Ti */
Takashi Iwai b751cb
+	0x220A, /* NVIDIA GeForce RTX 3080 */
Takashi Iwai b751cb
+	0x220D, /* NVIDIA CMP 90HX */
Takashi Iwai b751cb
+	0x2216, /* NVIDIA GeForce RTX 3080 */
Takashi Iwai b751cb
+	0x2230, /* NVIDIA RTX A6000 */
Takashi Iwai b751cb
+	0x2231, /* NVIDIA RTX A5000 */
Takashi Iwai b751cb
+	0x2232, /* NVIDIA RTX A4500 */
Takashi Iwai b751cb
+	0x2233, /* NVIDIA RTX A5500 */
Takashi Iwai b751cb
+	0x2238, /* NVIDIA A10M */
Takashi Iwai b751cb
+	0x2322, /* NVIDIA H800 PCIe */
Takashi Iwai b751cb
+	0x2324, /* NVIDIA H800 */
Takashi Iwai b751cb
+	0x2330, /* NVIDIA H100 80GB HBM3 */
Takashi Iwai b751cb
+	0x2331, /* NVIDIA H100 PCIe */
Takashi Iwai b751cb
+	0x2339, /* NVIDIA H100 */
Takashi Iwai b751cb
+	0x2414, /* NVIDIA GeForce RTX 3060 Ti */
Takashi Iwai b751cb
+	0x2420, /* NVIDIA GeForce RTX 3080 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x2438, /* NVIDIA RTX A5500 Laptop GPU */
Takashi Iwai b751cb
+	0x2460, /* NVIDIA GeForce RTX 3080 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x2482, /* NVIDIA GeForce RTX 3070 Ti */
Takashi Iwai b751cb
+	0x2484, /* NVIDIA GeForce RTX 3070 */
Takashi Iwai b751cb
+	0x2486, /* NVIDIA GeForce RTX 3060 Ti */
Takashi Iwai b751cb
+	0x2487, /* NVIDIA GeForce RTX 3060 */
Takashi Iwai b751cb
+	0x2488, /* NVIDIA GeForce RTX 3070 */
Takashi Iwai b751cb
+	0x2489, /* NVIDIA GeForce RTX 3060 Ti */
Takashi Iwai b751cb
+	0x248A, /* NVIDIA CMP 70HX */
Takashi Iwai b751cb
+	0x249C, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x249D, /* NVIDIA GeForce RTX 3070 Laptop GPU */
Takashi Iwai b751cb
+	0x24A0, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x24B0, /* NVIDIA RTX A4000 */
Takashi Iwai b751cb
+	0x24B1, /* NVIDIA RTX A4000H */
Takashi Iwai b751cb
+	0x24B6, /* NVIDIA RTX A5000 Laptop GPU */
Takashi Iwai b751cb
+	0x24B7, /* NVIDIA RTX A4000 Laptop GPU */
Takashi Iwai b751cb
+	0x24B8, /* NVIDIA RTX A3000 Laptop GPU */
Takashi Iwai b751cb
+	0x24B9, /* NVIDIA RTX A3000 12GB Laptop GPU */
Takashi Iwai b751cb
+	0x24BA, /* NVIDIA RTX A4500 Laptop GPU */
Takashi Iwai b751cb
+	0x24BB, /* NVIDIA RTX A3000 12GB Laptop GPU */
Takashi Iwai b751cb
+	0x24C9, /* NVIDIA GeForce RTX 3060 Ti */
Takashi Iwai b751cb
+	0x24DC, /* NVIDIA GeForce RTX 3080 Laptop GPU */
Takashi Iwai b751cb
+	0x24DD, /* NVIDIA GeForce RTX 3070 Laptop GPU */
Takashi Iwai b751cb
+	0x24E0, /* NVIDIA GeForce RTX 3070 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x24FA, /* NVIDIA RTX A4500 Embedded GPU */
Takashi Iwai b751cb
+	0x2503, /* NVIDIA GeForce RTX 3060 */
Takashi Iwai b751cb
+	0x2504, /* NVIDIA GeForce RTX 3060 */
Takashi Iwai b751cb
+	0x2507, /* NVIDIA GeForce RTX 3050 */
Takashi Iwai b751cb
+	0x2508, /* NVIDIA GeForce RTX 3050 OEM */
Takashi Iwai b751cb
+	0x2520, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x2521, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x2523, /* NVIDIA GeForce RTX 3050 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x2531, /* NVIDIA RTX A2000 */
Takashi Iwai b751cb
+	0x2544, /* NVIDIA GeForce RTX 3060 */
Takashi Iwai b751cb
+	0x2560, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x2563, /* NVIDIA GeForce RTX 3050 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x2571, /* NVIDIA RTX A2000 12GB */
Takashi Iwai b751cb
+	0x2582, /* NVIDIA GeForce RTX 3050 */
Takashi Iwai b751cb
+	0x25A0, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x25A2, /* NVIDIA GeForce RTX 3060 Laptop GPU */
Takashi Iwai b751cb
+	0x25A5, /* NVIDIA GeForce RTX 3050 Laptop GPU */
Takashi Iwai b751cb
+	0x25A6, /* NVIDIA GeForce MX570 */
Takashi Iwai b751cb
+	0x25A7, /* NVIDIA GeForce RTX 2050 */
Takashi Iwai b751cb
+	0x25A9, /* NVIDIA GeForce RTX 2050 */
Takashi Iwai b751cb
+	0x25AA, /* NVIDIA GeForce MX570 A */
Takashi Iwai b751cb
+	0x25AB, /* NVIDIA GeForce RTX 3050 4GB Laptop GPU */
Takashi Iwai b751cb
+	0x25AC, /* NVIDIA GeForce RTX 3050 6GB Laptop GPU */
Takashi Iwai b751cb
+	0x25AD, /* NVIDIA GeForce RTX 2050 */
Takashi Iwai b751cb
+	0x25B8, /* NVIDIA RTX A2000 Laptop GPU */
Takashi Iwai b751cb
+	0x25B9, /* NVIDIA RTX A1000 Laptop GPU */
Takashi Iwai b751cb
+	0x25BA, /* NVIDIA RTX A2000 8GB Laptop GPU */
Takashi Iwai b751cb
+	0x25BB, /* NVIDIA RTX A500 Laptop GPU */
Takashi Iwai b751cb
+	0x25E0, /* NVIDIA GeForce RTX 3050 Ti Laptop GPU */
Takashi Iwai b751cb
+	0x25E2, /* NVIDIA GeForce RTX 3050 Laptop GPU */
Takashi Iwai b751cb
+	0x25E5, /* NVIDIA GeForce RTX 3050 Laptop GPU */
Takashi Iwai b751cb
+	0x25EC, /* NVIDIA GeForce RTX 3050 6GB Laptop GPU */
Takashi Iwai b751cb
+	0x25ED, /* NVIDIA GeForce RTX 2050 */
Takashi Iwai b751cb
+	0x25F9, /* NVIDIA RTX A1000 Embedded GPU */
Takashi Iwai b751cb
+	0x25FA, /* NVIDIA RTX A2000 Embedded GPU */
Takashi Iwai b751cb
+	0x25FB, /* NVIDIA RTX A500 Embedded GPU */
Takashi Iwai b751cb
+	0x2684, /* NVIDIA GeForce RTX 4090 */
Takashi Iwai b751cb
+	0x26B1, /* NVIDIA RTX 6000 Ada Generation */
Takashi Iwai b751cb
+	0x26B5, /* NVIDIA L40 */
Takashi Iwai b751cb
+	0x2704, /* NVIDIA GeForce RTX 4080 */
Takashi Iwai b751cb
+	0x2717, /* NVIDIA GeForce RTX 4090 Laptop GPU */
Takashi Iwai b751cb
+	0x2757, /* NVIDIA GeForce RTX 4090 Laptop GPU */
Takashi Iwai b751cb
+	0x2782, /* NVIDIA GeForce RTX 4070 Ti */
Takashi Iwai b751cb
+	0x27A0, /* NVIDIA GeForce RTX 4080 Laptop GPU */
Takashi Iwai b751cb
+	0x27B0, /* NVIDIA RTX 4000 SFF Ada Generation */
Takashi Iwai b751cb
+	0x27B8, /* NVIDIA L4 */
Takashi Iwai b751cb
+	0x27E0, /* NVIDIA GeForce RTX 4080 Laptop GPU */
Takashi Iwai b751cb
+	0x2820, /* NVIDIA GeForce RTX 4070 Laptop GPU */
Takashi Iwai b751cb
+	0x2860, /* NVIDIA GeForce RTX 4070 Laptop GPU */
Takashi Iwai b751cb
+	0x28A0, /* NVIDIA GeForce RTX 4060 Laptop GPU */
Takashi Iwai b751cb
+	0x28A1, /* NVIDIA GeForce RTX 4050 Laptop GPU */
Takashi Iwai b751cb
+	0x28E0, /* NVIDIA GeForce RTX 4060 Laptop GPU */
Takashi Iwai b751cb
+	0x28E1, /* NVIDIA GeForce RTX 4050 Laptop GPU */
Takashi Iwai b751cb
+
Takashi Iwai b751cb
+	0 /* terminator */
Takashi Iwai b751cb
+};
Takashi Iwai b751cb
+
Takashi Iwai b751cb
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
Takashi Iwai b751cb
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
Takashi Iwai b751cb
@@ -95,6 +95,11 @@ MODULE_PARM_DESC(runpm, "disable (0), fo
Takashi Iwai b751cb
 static int nouveau_runtime_pm = -1;
Takashi Iwai b751cb
 module_param_named(runpm, nouveau_runtime_pm, int, 0400);
Takashi Iwai b751cb
 
Takashi Iwai b751cb
+/* XXX: SLE-specific option for controlling blacklist */
Takashi Iwai b751cb
+MODULE_PARM_DESC(force_probe, "Force probe the driver for specified device");
Takashi Iwai b751cb
+static bool nouveau_force_probe;
Takashi Iwai b751cb
+module_param_named(force_probe, nouveau_force_probe, bool, 0400);
Takashi Iwai b751cb
+
Takashi Iwai b751cb
 static struct drm_driver driver_stub;
Takashi Iwai b751cb
 static struct drm_driver driver_pci;
Takashi Iwai b751cb
 static struct drm_driver driver_platform;
Takashi Iwai b2a56d
@@ -741,6 +746,32 @@ static void quirk_broken_nv_runpm(struct
Takashi Iwai b751cb
 	}
Takashi Iwai b751cb
 }
Takashi Iwai b751cb
 
Takashi Iwai b751cb
+/* XXX: SLE-specific device blacklisting */
Takashi Iwai b751cb
+#include "nouveau_blacklist.c"
Takashi Iwai b751cb
+static bool nouveau_probe_is_blacklisted(struct pci_dev *pdev)
Takashi Iwai b751cb
+{
Takashi Iwai b751cb
+	const u16 *p;
Takashi Iwai b751cb
+
Takashi Iwai b751cb
+	if (pdev->vendor != PCI_VENDOR_ID_NVIDIA)
Takashi Iwai b751cb
+		return false;
Takashi Iwai b751cb
+	for (p = nouveau_probe_blacklist; *p; p++) {
Takashi Iwai b751cb
+		if (pdev->device == *p)
Takashi Iwai b751cb
+			goto check_option;
Takashi Iwai b751cb
+	}
Takashi Iwai b751cb
+	return false;
Takashi Iwai b751cb
+
Takashi Iwai b751cb
+ check_option:
Takashi Iwai b751cb
+	if (nouveau_force_probe)
Takashi Iwai b751cb
+		return false; /* forced probe */
Takashi Iwai b751cb
+
Takashi Iwai b751cb
+	dev_info(&pdev->dev,
Takashi Iwai b751cb
+		 "Probe of device %04x skipped due to experimental state of this driver.\n"
Takashi Iwai b751cb
+		 "You can enable nouveau driver via force_probe=1 option (kernel boot parameter 'nouveau.force_probe=1')\n"
Takashi Iwai b751cb
+		 "However we recommend the usage of nVidia's openGPU driver meanwhile. See our Release Notes for more details.\n",
Takashi Iwai b751cb
+		 pdev->device);
Takashi Iwai b751cb
+	return true;
Takashi Iwai b751cb
+}
Takashi Iwai b751cb
+
Takashi Iwai b751cb
 static int nouveau_drm_probe(struct pci_dev *pdev,
Takashi Iwai b751cb
 			     const struct pci_device_id *pent)
Takashi Iwai b751cb
 {
Takashi Iwai b2a56d
@@ -748,6 +779,9 @@ static int nouveau_drm_probe(struct pci_
Takashi Iwai b751cb
 	struct drm_device *drm_dev;
Takashi Iwai b751cb
 	int ret;
Takashi Iwai b751cb
 
Takashi Iwai b751cb
+	if (nouveau_probe_is_blacklisted(pdev))
Takashi Iwai b751cb
+		return -ENODEV;
Takashi Iwai b751cb
+
Takashi Iwai b751cb
 	if (vga_switcheroo_client_probe_defer(pdev))
Takashi Iwai b751cb
 		return -EPROBE_DEFER;
Takashi Iwai b751cb