From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3510E2F50A for ; Tue, 11 Jun 2024 15:39:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718120351; cv=none; b=Jk2+ZiyjKRkf28zqRd18726LcKWmQmZ0Zt/C4wgAimsuO0GtJyBLWROGM0jdYKDbEwZyVLB5j8IKCBubJx5chWNkXoHH4iZcK1IoNSOGqDA8hO+CqHu6iipoa3s5HIExEjW7JPD2+rYAKSpK/NdZLSB3hje0KqOuNzix2EyeNb0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718120351; c=relaxed/simple; bh=OTaL90AXV5eLd7cwrRGQ6YBQCVQKp35jIqJFQ1iMDAc=; h=From:Date:To:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition; b=cZmetBBUK3JNBAsKKQjDFb3Lk4mbkBbruGBwFbditVDjMxntdx5XoQ0H07NQ99ftmbujnkASrz6ysgBVvwMrHqh/hSFBl9xnlurv7uVPsCWhCzEcgMAPXcfdo1kHWc5elpZ78f3bLI+JF1v/Z5SmMO8Oes6y9iym9H0SxYFdFK8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=FAXcNqXS; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="FAXcNqXS" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-a62ef52e837so715925866b.3 for ; Tue, 11 Jun 2024 08:39:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1718120346; x=1718725146; darn=vger.kernel.org; h=content-transfer-encoding:content-disposition:mime-version :mail-followup-to:message-id:subject:to:date:from:from:to:cc:subject :date:message-id:reply-to; bh=hLG3B4Y+fGWVVVSqMDpP2O4ocS16RJ3mfLQLjDGSKMU=; b=FAXcNqXSV5pzEq2B9cnkll0/geRAUviZ7LxQF8B4EfZk1vZ/uRHgmzrrbftN8h1xJI gqXFEFJS1cppmNBgWZoTKr77URR+GxTnn+flLC55oPLfhXrbGtEMeUhMbDUJkxhKt9bF BXkuRfgXa5jUDr6bUzVhMggF7LbTzI08LscuGazw4DHWUk3hCJ7a5Xgh8Os40tu+YT45 vcWTjyPXvQ1E8Dge8X7tsr9AVMyXb8jL6x6nnIwLBGdJ3yyAK1Hmb6kon1woeh6zXvqp NkVvOyJ5hqL+hfzKYANWv4zcgo4j2F0aekkm0TeHOfmEhLl58nAjyd0jPlDWAUh/lKFy QL3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718120346; x=1718725146; h=content-transfer-encoding:content-disposition:mime-version :mail-followup-to:message-id:subject:to:date:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=hLG3B4Y+fGWVVVSqMDpP2O4ocS16RJ3mfLQLjDGSKMU=; b=Faad/j8iLlAHc2o5Hv9T9XG+bh5hZTbyNzVZ7iCL+17dc2foGiPsoetjleBqllObhr cuyZh6eavx+9lGVJlZyNX1htRA+g9HkgvfRQw5uGviTKpQ854ufPmKsbdjeZfnsLTNm9 X/ACJPTlJQYdR6fRURqoZ95zas74d+e/hsNa2cIYOSejzmQvKbPLZXEFI7+Bbzul+iRt +3+7ylky18DfFVNHPp2HbRVX9gxtxM0BDiI2n8esUkDIebfXSOuc5csZvjpXT3dJEB3Z 6Qy+pWqF3j0QmlHZkxeZQJ01N6D/RydmVesSIeoGTrt3xWSrsBcVgrAtai96/NRZyT83 JX2A== X-Forwarded-Encrypted: i=1; AJvYcCWHloRKxdJYgXe3fNjDEE70vOt0MkYDuIZ9eQNhJeHFJfOUPEFF0IigKiVsLtKo+0AZ7Bz82csvGxR0ZY2/uvht5gntjHa/R4L1 X-Gm-Message-State: AOJu0YylKqnAy/yvlq/aGVyU6BzgCj768EoZFOFOiXIZ0jaHnVVPW8cd +9Ztw0pUUtj/YOS/JxrUKp8hdpfvDH1lNnSw72jE+Y4dJzV4N/phW3xSur5nTYA= X-Google-Smtp-Source: AGHT+IGAiKP4S1ta0ypfd8GPYxs98AzoX0FvmrkDa7V2d9yDAJ1SdodaZM4gcGz3kq8Xk2Ny5tPKCw== X-Received: by 2002:a17:906:128d:b0:a6f:40d5:e287 with SMTP id a640c23a62f3a-a6f40d5e332mr58510666b.74.1718120346331; Tue, 11 Jun 2024 08:39:06 -0700 (PDT) Received: from localhost (host-79-27-228-9.retail.telecomitalia.it. [79.27.228.9]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6ef7913eb8sm537255666b.178.2024.06.11.08.39.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 08:39:06 -0700 (PDT) From: Andrea della Porta X-Google-Original-From: Andrea della Porta Date: Tue, 11 Jun 2024 17:39:23 +0200 To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Stefan Wahren , devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Bjorn Helgaas , linux-pci@vger.kernel.org, Dave Ertman , Lizhi Hou , clement.leger@bootlin.com Subject: Raspberry Pi5 - RP1 driver - RFC Message-ID: Mail-Followup-To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Stefan Wahren , devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Bjorn Helgaas , linux-pci@vger.kernel.org, Dave Ertman , Lizhi Hou , clement.leger@bootlin.com Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Hi, I'm on the verge of reworking the RP1 driver from downstream in order for it to be in good shape for upstream inclusion. RP1 is an MFD chipset that acts as a south-bridge PCIe endpoint sporting a pletora of subdevices (i.e. Ethernet, USB host controller, I2C, PWM, etc.) whose registers are all reachable starting from an offset from the BAR address. The main point here is that while the RP1 as an endpoint itself is discoverable via usual PCI enumeraiton, the devices it contains are not discoverable and must be declared e.g. via the devicetree. This is an RFC about the correct approach to use in integrating the driver and registering the subdevices. --- CURRENT DOWNSTREAM APPROACH --- The DTS shows something like this (see [1] and [2]): pcie { compatible = "brcm,bcm2712-pcie"; #address-cells = <0x03>; #size-cells = <0x02>; ranges = <0x2000000 0x00 0x00 0x1f 0x00 0x00 0xfffffffc>; ... rp1 { compatible = "simple-bus"; #address-cells = <0x02>; #size-cells = <0x02>; ranges = <0xc0 0x40000000 0x2000000 0x00 0x00 0x00 0x400000>; ... serial@34000 { compatible = "arm,pl011-axi"; reg = <0xc0 0x40034000 0x00 0x100>; ... }; }; }; The PCI bar address here is at CPU physical address 0x1f00000000 and the RP1 driver probe function calls of_platform_populate() on the 'rp1' node to register the platform drivers for each subdevices (e.g. in the above example: 'serial@34000'). Pros: - quite straightforward to implement - RP1's dts resides in the directory it should (possibly but not necessarily) belong to, e.g. somewhere under arch/*/boot/dts/... Cons: - the board dts must manually override 'pcie' ranges (in this case 0x1f00000000) depending on the BAR address value, while it should be retrieved by reading the PCI config register instead - the probe() function retieves a reference to 'rp1' node via of_find_node_by_name(NULL, "rp1"), harcoding the node name. This is not desirable since the node name is then set in stone, or otherwise if the node name needs to be changed it must be changed either in the dts *and* in driver code. --- ROB HERRING, LIZHI HOU (et al.) PROPOSED APPROACH --- A proposal (see [3]) presented at LPC advise to create a PCI bridge DT node ('pcie') leveraging the current OF dynamic infrastructure, adding a dtb overlay ('rpi1' node in the example above) on top of it during probe and rearranging the 'ranges' mapping dynamically. This sounds like the correct approach and is somewhat used in at least a couple of drivers (namely for Alveo U50 card and MicroChip LAN9662 SoC) but AFAIK none of them made their way to mainline, leaving some doubts about the applicability of this paradigm. Pros: - no need to provide the BAR address manually since it will be discovered and automatically amended into the 'ranges' property - no harcoded reference to 'rp1' node since the endpoint node will be reparented to the 'pcie' node automatically - the core OF dynamic infrastructure on which to base these changes are basically already in mainline (see [4] for discussions) Cons (albeit I'd consider them minor ones): - CONFIG_PCI_DYNAMIC_OF_NODES must be enabled - the dtb should probably reside somewhere near the driver source code, e.g. in drivers/mfd/... --- AUXILIARY BUS APPROACH --- The thread in [5] seems to advise to use the auxiliary bus for this kind of devices. In this case, here's the drawbacks: - as stated in kernel docs for aux bus (cit.) "need a mechanism to connect and provide access to a shared object allocated by the auxiliary_device’s registering driver...", and again (cit.) "A key requirement for utilizing the auxiliary bus is that there is no dependency on a physical bus...These individual devices split from the core cannot live on the platform bus as they are not physical devices that are controlled by DT/ACPI". Those statements are of course at the opposite of how RP1 behaves - subdevices drivers may need rework in order to cope with the auxiliary bus, while we need to use the already existing drivers without modifications so, for all of the above (and probably other cons I'm not aware of right now), the auxiliary bus does not seems feasible to be used, but I'm mentioning it just because of the discussionin in [5] that let me wonder whether I may be missing something relevant here. CONCLUSIONS All in all, I'd say Rob's approach should be the way to go, any thoughts about it will be greatly appreciated. Many thanks, Andrea della Porta Link: - [1]: https://github.com/raspberrypi/linux/blob/rpi-6.6.y/arch/arm/boot/dts/broadcom/rp1.dtsi - [2]: https://github.com/raspberrypi/linux/blob/rpi-6.6.y/drivers/mfd/rp1.c - [3]: https://lpc.events/event/17/contributions/1421/attachments/1337/2680/LPC2023%20Non-discoverable%20devices%20in%20PCI.pdf - [4]: https://lore.kernel.org/lkml/20230419231155.GA899497-robh@kernel.org/t/ - [5]: https://lore.kernel.org/lkml/Y862WTT03%2FJxXUG8@kroah.com/ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 87876C27C77 for ; Tue, 11 Jun 2024 15:39:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Subject:To:Date :From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=FvGRB0T9ZG8QfgWkgKJBIRo3forjRdtWV6/53O+BO6c=; b=RnGEGKITWZGbDC pQgj4ONbas+myeU+CitWcYucOrpbmW6RIpo4MuW6lJhDjfgc5qkO6cE2ABLPMJlkSgsrby+yWUOTx 4v8Uoc8q57BQ7ybSPDIRapbVUrFwyglVPsO5G1nqicCj1G625xpGJ8uLeHDs8MVMfUssPdDl7A6JA AWVBep7gVh0xF9cG7ujICHQFnMiAOnlx9Qea/b2hGTwJE6nsJtxY4CmpM8WkOqsmXMFxGPh4o9NhI QlGqHlNkCVA8IAE9mj4sGhFHRPdjprW3sCneRjSWEjq4kgIighkAjnjCLOCVYCtfmS3QyyasXgOLv 1kXC5jffpfBMeyMs+aCg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH3af-00000009MSI-23ay; Tue, 11 Jun 2024 15:39:17 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sH3aZ-00000009MR0-2o1a for linux-arm-kernel@lists.infradead.org; Tue, 11 Jun 2024 15:39:14 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-57a31d63b6bso8764702a12.0 for ; Tue, 11 Jun 2024 08:39:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1718120346; x=1718725146; darn=lists.infradead.org; h=content-transfer-encoding:content-disposition:mime-version :mail-followup-to:message-id:subject:to:date:from:from:to:cc:subject :date:message-id:reply-to; bh=hLG3B4Y+fGWVVVSqMDpP2O4ocS16RJ3mfLQLjDGSKMU=; b=BgFVgIT/togygwyz8HUnWLhinGUqwSmMkftiB4dZN860VogFBuvw8X0dV0wdeIQxQr /yrxxnL++7yfoZOtkOMRQofRe9q7y2T/BibkyeTZ2uE7JEvrPtwQV9yzNh3R0Xia76mr nAEzQycPC4xxljIo6MakLgr4cTwQUbwsa0zzLqAqJyw4xELHy5MEkxDzVuQqpO7+D0zB KZKYztT6a4C1LrjQiMTGJMlNLYvS8OJLYvlNm59MeF9FJJfH0fTJSUI6h3WBdUDoabuy r4bosRL1/NbZ2HxrZ1ksbst7YHepGb17L56ttbT1vDOQLm0fp6k5jrQTr3aqv7xpQz7w 6uDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718120346; x=1718725146; h=content-transfer-encoding:content-disposition:mime-version :mail-followup-to:message-id:subject:to:date:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=hLG3B4Y+fGWVVVSqMDpP2O4ocS16RJ3mfLQLjDGSKMU=; b=M1LkEJE6Z0V9YyjcC8bf783oKwwfJGwdKE3iRsaf/howupqzSUYAWVCfIm+GikonDi kGiiZgwFl9yq/k/Kae1VUlh1gp6KSWR14qp6QxCI03Od24T2B1GUCh8tl2dqQDFq6cnZ Ps7uuGOvFrD50aQK8NYyClCWu/Dy7yrHIEoAR7nKTC9WA+wkF+vRaBV1jSPGpV5gOJsw z61h4uOhIuf6thoaKF6KUQScY9HEH0Ap6Tje/m0mlN8yny0ajsA3H7tuST/ohlsrYeDy HHH4kFDeORa5k0s0FA0woK7LwGhaITK6KPyhXJKaVORQww7n/Or/IO7DnRUhbCsc0Rgl l7Tg== X-Forwarded-Encrypted: i=1; AJvYcCXntjSsu9S22nte51MVw3dTGe19SyXB4QQuQFLikzo2rTUseufIsY0XgmjtSVwuRJvk1gv+Es2fR1NqFbwMb+mWTENtp1b6HUJh8egaH6rcoOERh/M= X-Gm-Message-State: AOJu0YxHznCt5aSvW8ObUVQpnEkidllYCVUeh0WClY6Lb85xwZxQ13bH T7T0wnrxDpRq0E4rmnppvvvreWSyGyeDqdV1uBb4n8vTg9N598Qsne6Goz6yMh8= X-Google-Smtp-Source: AGHT+IGAiKP4S1ta0ypfd8GPYxs98AzoX0FvmrkDa7V2d9yDAJ1SdodaZM4gcGz3kq8Xk2Ny5tPKCw== X-Received: by 2002:a17:906:128d:b0:a6f:40d5:e287 with SMTP id a640c23a62f3a-a6f40d5e332mr58510666b.74.1718120346331; Tue, 11 Jun 2024 08:39:06 -0700 (PDT) Received: from localhost (host-79-27-228-9.retail.telecomitalia.it. [79.27.228.9]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6ef7913eb8sm537255666b.178.2024.06.11.08.39.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 08:39:06 -0700 (PDT) From: Andrea della Porta X-Google-Original-From: Andrea della Porta Date: Tue, 11 Jun 2024 17:39:23 +0200 To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Stefan Wahren , devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Bjorn Helgaas , linux-pci@vger.kernel.org, Dave Ertman , Lizhi Hou , clement.leger@bootlin.com Subject: Raspberry Pi5 - RP1 driver - RFC Message-ID: Mail-Followup-To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Florian Fainelli , Broadcom internal kernel review list , Stefan Wahren , devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Bjorn Helgaas , linux-pci@vger.kernel.org, Dave Ertman , Lizhi Hou , clement.leger@bootlin.com MIME-Version: 1.0 Content-Disposition: inline X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240611_083911_750158_C9C5597F X-CRM114-Status: GOOD ( 21.87 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCkknbSBvbiB0aGUgdmVyZ2Ugb2YgcmV3b3JraW5nIHRoZSBSUDEgZHJpdmVyIGZyb20gZG93 bnN0cmVhbSBpbiBvcmRlciBmb3IgaXQgdG8gYmUKaW4gZ29vZCBzaGFwZSBmb3IgdXBzdHJlYW0g aW5jbHVzaW9uLgpSUDEgaXMgYW4gTUZEIGNoaXBzZXQgdGhhdCBhY3RzIGFzIGEgc291dGgtYnJp ZGdlIFBDSWUgZW5kcG9pbnQgc3BvcnRpbmcgYSBwbGV0b3JhCm9mIHN1YmRldmljZXMgKGkuZS4g IEV0aGVybmV0LCBVU0IgaG9zdCBjb250cm9sbGVyLCBJMkMsIFBXTSwgZXRjLikgd2hvc2UgcmVn aXN0ZXJzCmFyZSBhbGwgcmVhY2hhYmxlIHN0YXJ0aW5nIGZyb20gYW4gb2Zmc2V0IGZyb20gdGhl IEJBUiBhZGRyZXNzLgpUaGUgbWFpbiBwb2ludCBoZXJlIGlzIHRoYXQgd2hpbGUgdGhlIFJQMSBh cyBhbiBlbmRwb2ludCBpdHNlbGYgaXMgZGlzY292ZXJhYmxlIHZpYQp1c3VhbCBQQ0kgZW51bWVy YWl0b24sIHRoZSBkZXZpY2VzIGl0IGNvbnRhaW5zIGFyZSBub3QgZGlzY292ZXJhYmxlIGFuZCBt dXN0IGJlCmRlY2xhcmVkIGUuZy4gdmlhIHRoZSBkZXZpY2V0cmVlLiBUaGlzIGlzIGFuIFJGQyBh Ym91dCB0aGUgY29ycmVjdCBhcHByb2FjaCB0byB1c2UKaW4gaW50ZWdyYXRpbmcgdGhlIGRyaXZl ciBhbmQgcmVnaXN0ZXJpbmcgdGhlIHN1YmRldmljZXMuCgoKLS0tIENVUlJFTlQgRE9XTlNUUkVB TSBBUFBST0FDSCAtLS0KClRoZSBEVFMgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhpcyAoc2VlIFsx XSBhbmQgWzJdKToKCnBjaWUgewoJY29tcGF0aWJsZSA9ICJicmNtLGJjbTI3MTItcGNpZSI7Cgkj YWRkcmVzcy1jZWxscyA9IDwweDAzPjsKCSNzaXplLWNlbGxzID0gPDB4MDI+OwoJcmFuZ2VzID0g PDB4MjAwMDAwMCAweDAwIDB4MDAgICAweDFmIDB4MDAgICAweDAwIDB4ZmZmZmZmZmM+OwoJLi4u CgoJcnAxIHsKCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOwoJCSNhZGRyZXNzLWNlbGxzID0g PDB4MDI+OwogICAgICAgICAgICAgICAJI3NpemUtY2VsbHMgPSA8MHgwMj47CgoJCXJhbmdlcyA9 IDwweGMwIDB4NDAwMDAwMDAgICAweDIwMDAwMDAgMHgwMCAweDAwICAgMHgwMCAweDQwMDAwMD47 CgkJLi4uCgoJCXNlcmlhbEAzNDAwMCB7CgkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExLWF4aSI7 CgkJCXJlZyA9IDwweGMwIDB4NDAwMzQwMDAgICAweDAwIDB4MTAwPjsKCQkJLi4uCgkJfTsKCX07 Cn07CgpUaGUgUENJIGJhciBhZGRyZXNzIGhlcmUgaXMgYXQgQ1BVIHBoeXNpY2FsIGFkZHJlc3Mg MHgxZjAwMDAwMDAwIGFuZCB0aGUgUlAxIGRyaXZlcgpwcm9iZSBmdW5jdGlvbiBjYWxscyBvZl9w bGF0Zm9ybV9wb3B1bGF0ZSgpIG9uIHRoZSAncnAxJyBub2RlIHRvIHJlZ2lzdGVyIHRoZSBwbGF0 Zm9ybQpkcml2ZXJzIGZvciBlYWNoIHN1YmRldmljZXMgKGUuZy4gaW4gdGhlIGFib3ZlIGV4YW1w bGU6ICdzZXJpYWxAMzQwMDAnKS4KClByb3M6Ci0gcXVpdGUgc3RyYWlnaHRmb3J3YXJkIHRvIGlt cGxlbWVudAotIFJQMSdzIGR0cyByZXNpZGVzIGluIHRoZSBkaXJlY3RvcnkgaXQgc2hvdWxkIChw b3NzaWJseSBidXQgbm90IG5lY2Vzc2FyaWx5KSBiZWxvbmcgdG8sCiAgZS5nLiBzb21ld2hlcmUg dW5kZXIgYXJjaC8qL2Jvb3QvZHRzLy4uLgoKQ29uczoKLSB0aGUgYm9hcmQgZHRzIG11c3QgbWFu dWFsbHkgb3ZlcnJpZGUgJ3BjaWUnIHJhbmdlcyAoaW4gdGhpcyBjYXNlIDB4MWYwMDAwMDAwMCkK ICBkZXBlbmRpbmcgb24gdGhlIEJBUiBhZGRyZXNzIHZhbHVlLCB3aGlsZSBpdCBzaG91bGQgYmUg cmV0cmlldmVkIGJ5IHJlYWRpbmcgdGhlIFBDSQogIGNvbmZpZyByZWdpc3RlciBpbnN0ZWFkCi0g dGhlIHByb2JlKCkgZnVuY3Rpb24gcmV0aWV2ZXMgYSByZWZlcmVuY2UgdG8gJ3JwMScgbm9kZSB2 aWEgb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgCiAgInJwMSIpLCBoYXJjb2RpbmcgdGhlIG5v ZGUgbmFtZS4gVGhpcyBpcyBub3QgZGVzaXJhYmxlIHNpbmNlIHRoZSBub2RlIG5hbWUgaXMgdGhl biBzZXQKICBpbiBzdG9uZSwgb3Igb3RoZXJ3aXNlIGlmIHRoZSBub2RlIG5hbWUgbmVlZHMgdG8g YmUgY2hhbmdlZCBpdCBtdXN0IGJlIGNoYW5nZWQgZWl0aGVyCiAgaW4gdGhlIGR0cyAqYW5kKiBp biBkcml2ZXIgY29kZS4KCgotLS0gUk9CIEhFUlJJTkcsIExJWkhJIEhPVSAoZXQgYWwuKSBQUk9Q T1NFRCBBUFBST0FDSCAtLS0KCkEgcHJvcG9zYWwgKHNlZSBbM10pIHByZXNlbnRlZCBhdCAgTFBD IGFkdmlzZSB0byBjcmVhdGUgYSBQQ0kgYnJpZGdlIERUIG5vZGUgKCdwY2llJykgbGV2ZXJhZ2lu Zwp0aGUgY3VycmVudCBPRiBkeW5hbWljIGluZnJhc3RydWN0dXJlLCBhZGRpbmcgYSBkdGIgb3Zl cmxheSAoJ3JwaTEnIG5vZGUgaW4gdGhlIGV4YW1wbGUKYWJvdmUpIG9uIHRvcCBvZiBpdCBkdXJp bmcgcHJvYmUgYW5kIHJlYXJyYW5naW5nIHRoZSAncmFuZ2VzJyBtYXBwaW5nIGR5bmFtaWNhbGx5 LgpUaGlzIHNvdW5kcyBsaWtlIHRoZSBjb3JyZWN0IGFwcHJvYWNoIGFuZCBpcyBzb21ld2hhdCB1 c2VkIGluIGF0IGxlYXN0IGEgY291cGxlIG9mIGRyaXZlcnMKKG5hbWVseSBmb3IgQWx2ZW8gVTUw IGNhcmQgYW5kIE1pY3JvQ2hpcCBMQU45NjYyIFNvQykgYnV0IEFGQUlLIG5vbmUgb2YgdGhlbSBt YWRlIHRoZWlyIHdheQp0byBtYWlubGluZSwgbGVhdmluZyBzb21lIGRvdWJ0cyBhYm91dCB0aGUg YXBwbGljYWJpbGl0eSBvZiB0aGlzIHBhcmFkaWdtLgoKUHJvczoKLSBubyBuZWVkIHRvIHByb3Zp ZGUgdGhlIEJBUiBhZGRyZXNzIG1hbnVhbGx5IHNpbmNlIGl0IHdpbGwgYmUgZGlzY292ZXJlZCBh bmQgYXV0b21hdGljYWxseQogIGFtZW5kZWQgaW50byB0aGUgJ3JhbmdlcycgcHJvcGVydHkKLSBu byBoYXJjb2RlZCByZWZlcmVuY2UgdG8gJ3JwMScgbm9kZSBzaW5jZSB0aGUgZW5kcG9pbnQgbm9k ZSB3aWxsIGJlIHJlcGFyZW50ZWQgdG8gdGhlICdwY2llJwogIG5vZGUgYXV0b21hdGljYWxseQot IHRoZSBjb3JlIE9GIGR5bmFtaWMgaW5mcmFzdHJ1Y3R1cmUgb24gd2hpY2ggdG8gYmFzZSB0aGVz ZSBjaGFuZ2VzIGFyZSBiYXNpY2FsbHkgYWxyZWFkeSBpbiAKICBtYWlubGluZSAoc2VlIFs0XSBm b3IgZGlzY3Vzc2lvbnMpCgpDb25zIChhbGJlaXQgSSdkIGNvbnNpZGVyIHRoZW0gbWlub3Igb25l cyk6Ci0gQ09ORklHX1BDSV9EWU5BTUlDX09GX05PREVTIG11c3QgYmUgZW5hYmxlZAotIHRoZSBk dGIgc2hvdWxkIHByb2JhYmx5IHJlc2lkZSBzb21ld2hlcmUgbmVhciB0aGUgZHJpdmVyIHNvdXJj ZSBjb2RlLCBlLmcuIGluIGRyaXZlcnMvbWZkLy4uLgoKCi0tLSBBVVhJTElBUlkgQlVTIEFQUFJP QUNIIC0tLQoKVGhlIHRocmVhZCBpbiBbNV0gc2VlbXMgdG8gYWR2aXNlIHRvIHVzZSB0aGUgYXV4 aWxpYXJ5IGJ1cyBmb3IgdGhpcyBraW5kIG9mIGRldmljZXMuIEluIHRoaXMKY2FzZSwgaGVyZSdz IHRoZSBkcmF3YmFja3M6CgotIGFzIHN0YXRlZCBpbiBrZXJuZWwgZG9jcyBmb3IgYXV4IGJ1cyAo Y2l0LikgIm5lZWQgYSBtZWNoYW5pc20gdG8gY29ubmVjdCBhbmQgcHJvdmlkZSBhY2Nlc3MKICB0 byBhIHNoYXJlZCBvYmplY3QgYWxsb2NhdGVkIGJ5IHRoZSBhdXhpbGlhcnlfZGV2aWNl4oCZcyBy ZWdpc3RlcmluZyBkcml2ZXIuLi4iLCBhbmQgYWdhaW4gCiAgKGNpdC4pICJBIGtleSByZXF1aXJl bWVudCBmb3IgdXRpbGl6aW5nIHRoZSBhdXhpbGlhcnkgYnVzIGlzIHRoYXQgdGhlcmUgaXMgbm8g ZGVwZW5kZW5jeSBvbgogIGEgcGh5c2ljYWwgYnVzLi4uVGhlc2UgaW5kaXZpZHVhbCBkZXZpY2Vz IHNwbGl0IGZyb20gdGhlIGNvcmUgY2Fubm90IGxpdmUgb24gdGhlIHBsYXRmb3JtCiAgYnVzIGFz IHRoZXkgYXJlIG5vdCBwaHlzaWNhbCBkZXZpY2VzIHRoYXQgYXJlIGNvbnRyb2xsZWQgYnkgRFQv QUNQSSIuIFRob3NlIHN0YXRlbWVudHMgYXJlCiAgb2YgY291cnNlIGF0IHRoZSBvcHBvc2l0ZSBv ZiBob3cgUlAxIGJlaGF2ZXMKLSBzdWJkZXZpY2VzIGRyaXZlcnMgbWF5IG5lZWQgcmV3b3JrIGlu IG9yZGVyIHRvIGNvcGUgd2l0aCB0aGUgYXV4aWxpYXJ5IGJ1cywgd2hpbGUgd2UgbmVlZCB0bwog IHVzZSB0aGUgYWxyZWFkeSBleGlzdGluZyBkcml2ZXJzIHdpdGhvdXQgbW9kaWZpY2F0aW9ucwoK c28sIGZvciBhbGwgb2YgdGhlIGFib3ZlIChhbmQgcHJvYmFibHkgb3RoZXIgY29ucyBJJ20gbm90 IGF3YXJlIG9mIHJpZ2h0IG5vdyksIHRoZSBhdXhpbGlhcnkgYnVzCmRvZXMgbm90IHNlZW1zIGZl YXNpYmxlIHRvIGJlIHVzZWQsIGJ1dCBJJ20gbWVudGlvbmluZyBpdCBqdXN0IGJlY2F1c2Ugb2Yg dGhlIGRpc2N1c3Npb25pbiBpbiBbNV0KdGhhdCBsZXQgbWUgd29uZGVyIHdoZXRoZXIgSSBtYXkg YmUgbWlzc2luZyBzb21ldGhpbmcgcmVsZXZhbnQgaGVyZS4KCgpDT05DTFVTSU9OUwoKQWxsIGlu IGFsbCwgSSdkIHNheSBSb2IncyBhcHByb2FjaCBzaG91bGQgYmUgdGhlIHdheSB0byBnbywgYW55 IHRob3VnaHRzIGFib3V0IGl0IHdpbGwgYmUKZ3JlYXRseSBhcHByZWNpYXRlZC4KCk1hbnkgdGhh bmtzLApBbmRyZWEgZGVsbGEgUG9ydGEKCkxpbms6Ci0gWzFdOiBodHRwczovL2dpdGh1Yi5jb20v cmFzcGJlcnJ5cGkvbGludXgvYmxvYi9ycGktNi42LnkvYXJjaC9hcm0vYm9vdC9kdHMvYnJvYWRj b20vcnAxLmR0c2kKLSBbMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXNwYmVycnlwaS9saW51eC9i bG9iL3JwaS02LjYueS9kcml2ZXJzL21mZC9ycDEuYwotIFszXTogaHR0cHM6Ly9scGMuZXZlbnRz L2V2ZW50LzE3L2NvbnRyaWJ1dGlvbnMvMTQyMS9hdHRhY2htZW50cy8xMzM3LzI2ODAvTFBDMjAy MyUyME5vbi1kaXNjb3ZlcmFibGUlMjBkZXZpY2VzJTIwaW4lMjBQQ0kucGRmCi0gWzRdOiBodHRw czovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjMwNDE5MjMxMTU1LkdBODk5NDk3LXJvYmhAa2Vy bmVsLm9yZy90LwotIFs1XTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC9ZODYyV1RUMDMl MkZKeFhVRzhAa3JvYWguY29tLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=