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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6177DC10F14 for ; Thu, 10 Oct 2019 17:32:35 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 36F6020659 for ; Thu, 10 Oct 2019 17:32:35 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="MfLSVVL/"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="UC01vWCR"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="UC01vWCR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 36F6020659 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:To:From:Reply-To:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=68WRQlHXFe9YUxohB+7UK/0jEVzuU5DoSwhcez24t64=; b=MfLSVVL/zFDfLV JLZ7HxE26ZIL0iZSNvlHVfTvEMUk7iE5NGJtCIB86hExqKhzHsQ22MU9/ctZNWld8kkkbtoqTYfBk qglL5rWvwgDJ/sNbvEsvBbtMMS+LhJkiL3SVaAtkDyWSmmmyRr+dz+v+SaPfAxIyA6WTvtehTSZNR JguoSZ7NoYF4Hmq6WcZwLmvYl2AqyvNlryYD4aB4VBCEAGotg7jUHPx0JD7bhbq9YAFmVz6qWWeW4 RKi05XULS/pLJ1XT3KeXpnrqcek+soAgfqkMq42wruXJz1d4Vd+SBZ6YCVr+h63cDC1sLNH0HZMdF RHDciR1+ePkcwMjktafw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIcIW-0006b1-Ts; Thu, 10 Oct 2019 17:32:20 +0000 Received: from mail-eopbgr70048.outbound.protection.outlook.com ([40.107.7.48] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIcIM-0006Tc-Kn; Thu, 10 Oct 2019 17:32:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=UC01vWCRlKvOfW/G9A56ZQUnhQvKUFMLDNElG7xz3adX4/j4iwtA4HIBrbdbs0yKGiKK0bbUIBzfjjz/1sOkbVHzsfNT5OWT2s3bRGMwSTNQ+tFol/RuERsMaU+kFaeTrxRFx0IN1W06lZdnHdQboaDM5BlhgGQlex/JmH1rq8I= Received: from VI1PR0801CA0082.eurprd08.prod.outlook.com (2603:10a6:800:7d::26) by AM0PR08MB5235.eurprd08.prod.outlook.com (2603:10a6:208:163::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.18; Thu, 10 Oct 2019 17:32:05 +0000 Received: from VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::206) by VI1PR0801CA0082.outlook.office365.com (2603:10a6:800:7d::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.18 via Frontend Transport; Thu, 10 Oct 2019 17:32:05 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; lists.infradead.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;lists.infradead.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT038.mail.protection.outlook.com (10.152.19.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend Transport; Thu, 10 Oct 2019 17:32:03 +0000 Received: ("Tessian outbound 6481c7fa5a3c:v33"); Thu, 10 Oct 2019 17:32:01 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 73a1704631083130 X-CR-MTA-TID: 64aa7808 Received: from e2cf33147698.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.14.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 95264C51-1FE5-4B87-A231-5B097AD745FF.1; Thu, 10 Oct 2019 17:31:55 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2054.outbound.protection.outlook.com [104.47.14.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e2cf33147698.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 10 Oct 2019 17:31:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WUcWmBa702eYbOjl3NUc4Vm4352HLIlRvIbXfnNvrN6MwopA/ma08JI9IrAaXo/3okP+BJBq5YPIseXm3jX3DfJjvBpzsUXjbfc+++VI19szpbaRRly5udnqamm4Aj1DMgpnoG0hxuUPaAVF0uTsJXSsVUPX0ECp3u4PiUQWAdspEpnBNL6aBjnnG7YgYGUTcRQXd1prW0kym3PJKiiocIYykQLlsEBW+yuIkCjOdUsgY1Dldw7KvdSrv9lVAry4p9jwFThl6wzROWdm30YVaThgmc6iM7ixAb7lVnFa6RWyEfifPkFOn1RIcdmVqU2/26VE8thcf/8yPPmyY/vnNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=f022mN8iDWcz0330hvBC9wkQMtXlqv7h4DPC6oQNJCJ6nVAIeNb2ckIfZ7H9+XtYSICo2zd5R32l5Dm83AC6ZOgoaI+SEFdC+gKWCzFa7EiZC9uPYKo/e+LOzIHTb78Zq8mMn8KORhL7wUnYNmzFGj6T8TnWIhg9/4NVB4RT01Hcy/nfbPX98SAMtq2HsoxOq61BlpYl7ymKe5SPsoXyK0XhLESeXKsmrQVQzyZA1//ui5PpBOLW32hUWUq8erUKsfULN/rua85uMULeF6gYe6unsi+jAEZL1CRQbuIwNu/9jxCUSll058VnETBECWQpz6FG/etjpWBOiwhylsoXvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=UC01vWCRlKvOfW/G9A56ZQUnhQvKUFMLDNElG7xz3adX4/j4iwtA4HIBrbdbs0yKGiKK0bbUIBzfjjz/1sOkbVHzsfNT5OWT2s3bRGMwSTNQ+tFol/RuERsMaU+kFaeTrxRFx0IN1W06lZdnHdQboaDM5BlhgGQlex/JmH1rq8I= Received: from AM0PR08MB5345.eurprd08.prod.outlook.com (52.132.215.213) by AM0PR08MB4388.eurprd08.prod.outlook.com (20.179.33.206) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Thu, 10 Oct 2019 17:31:53 +0000 Received: from AM0PR08MB5345.eurprd08.prod.outlook.com ([fe80::f009:c530:6569:cf6f]) by AM0PR08MB5345.eurprd08.prod.outlook.com ([fe80::f009:c530:6569:cf6f%4]) with mapi id 15.20.2347.016; Thu, 10 Oct 2019 17:31:53 +0000 From: Ayan Halder To: Neil Armstrong Subject: Re: [PATCH 4/7] drm/meson: plane: add support for AFBC mode for OSD1 plane Thread-Topic: [PATCH 4/7] drm/meson: plane: add support for AFBC mode for OSD1 plane Thread-Index: AQHVf0yriLjFzO5S+ESDJ/ifpM4kuqdT3eqAgAAEQoCAAEBvAA== Date: Thu, 10 Oct 2019 17:31:53 +0000 Message-ID: <20191010173152.GA575@arm.com> References: <20191010092526.10419-1-narmstrong@baylibre.com> <20191010092526.10419-5-narmstrong@baylibre.com> <20191010132601.GA10110@arm.com> <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> In-Reply-To: <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LNXP123CA0005.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::17) To AM0PR08MB5345.eurprd08.prod.outlook.com (2603:10a6:208:18c::21) Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Ayan.Halder@arm.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [217.140.106.53] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 0d6bda7f-8b1c-4ca0-9242-08d74da7c3bc X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: AM0PR08MB4388:|AM0PR08MB5235: X-MS-Exchange-PUrlCount: 1 X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:8273;OLM:8273; x-forefront-prvs: 018632C080 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(376002)(346002)(396003)(39860400002)(189003)(199004)(6916009)(476003)(6512007)(8936002)(25786009)(229853002)(81166006)(8676002)(81156014)(14444005)(305945005)(7736002)(256004)(486006)(14454004)(2616005)(6436002)(86362001)(966005)(66066001)(36756003)(6306002)(66476007)(66556008)(64756008)(66946007)(11346002)(446003)(66446008)(71190400001)(71200400001)(6486002)(186003)(478600001)(5660300002)(386003)(316002)(3846002)(53546011)(26005)(30864003)(33656002)(4326008)(6116002)(44832011)(6246003)(76176011)(99286004)(54906003)(52116002)(6506007)(2906002)(102836004)(1076003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB4388; H:AM0PR08MB5345.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: vZZswzz94Hi+1R2NmpvaipRd5WWRlP7EqDqGrzL+EDMsXTroa2dEpPK1XmX4hnHWYcRJgodQwnPtmM1O8Sl+N1azznVS2oCAZ5rslTIkbYqQLmXRt8f4oe5KG+bG7P0FC8oSIg2wW9HmI1DbTg72qxTav0RzuHrY1zE/W3H3X7SSZPhUZkK1TYFUP78rFWKXJRjq20CoxSy/HTCHiROi5cszuiaLIJ9v2gZfdtBxeAm8S/SW61aaafchBBVEIN/KOlCU7t1rY8RDlZvI590SRN5uucLEh59YhJeSuZkwSyRlnEFMgTVwq5X52e96lRMaW5ky/aJNQhR1jNH9hF+iPd26sGP50zG8L9gM52yXqiHQObSi4Lqb2BV4H0J2YZSLeKqKr55ZfFG0lDNINmh8KQiR5NNaSRfc7wAvV66I2zE9MshIRLeYlkBZeOajDrPMcWr5jdkBOiVkbDSXjc08fg== x-ms-exchange-transport-forked: True Content-ID: MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4388 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Ayan.Halder@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(396003)(346002)(136003)(376002)(199004)(189003)(7736002)(6116002)(450100002)(36756003)(76130400001)(53546011)(6506007)(6862004)(97756001)(386003)(76176011)(70586007)(305945005)(26005)(478600001)(102836004)(25786009)(316002)(70206006)(14444005)(5660300002)(46406003)(3846002)(23726003)(2906002)(86362001)(4326008)(50466002)(8676002)(81166006)(22756006)(1076003)(6246003)(8936002)(8746002)(66066001)(47776003)(356004)(6306002)(6512007)(30864003)(446003)(14454004)(63350400001)(33656002)(11346002)(486006)(99286004)(966005)(229853002)(186003)(336012)(54906003)(2616005)(476003)(26826003)(81156014)(6486002)(126002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB5235; H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 4b206749-98d8-4fe0-a6e1-08d74da7bd5e NoDisclaimer: True X-Forefront-PRVS: 018632C080 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vJxJLNRQL2sXPYXe2Kd1619cro0jn0UPLJ+EVG6lq2NBL3iMIgrtUKOgcieDbw3Uv2EC8aqBehXYg9SljAZkMK6PcfZuPoKll/b3FADuCF8Ga2qnsCdk50HPMg2iQ/cNvcqs9TNGSmI+m3ldMnVTJdNksJJEUHTWRJcwzReq7uTPrCM1cpErJ/QxVS8kLQvvVyPyQIgFG5pxJ6CQg4vRHaWy9rZinkg9WCB4aHaWzFfvWmJJLQ2/yAlYnvQGCQAU2sD6cTfCO/toQw5ZEWFZ+qOQT83DJWgZawGqRIMJEZo7ky8Cd0vFBN9nVvSjc6bTRgLOdWCAnM+JcGX1evgrAB7RpzU0sDFj6KoN8Ox5qC3gOMP6oeXONYCFMcOzvQxpyIFSSBAbf18T4ps5ISI/Kn4sb8l4J8e8ufy6QJiLxmjEe6EQorAh7GalrR0+gsNLOdeFdqMQEeMs2L7tRjUytg== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Oct 2019 17:32:03.3585 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0d6bda7f-8b1c-4ca0-9242-08d74da7c3bc X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5235 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191010_103210_906555_0C95C0F7 X-CRM114-Status: GOOD ( 18.77 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "khilman@baylibre.com" , nd , "linux-arm-kernel@lists.infradead.org" , "dri-devel@lists.freedesktop.org" , "linux-amlogic@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org On Thu, Oct 10, 2019 at 03:41:15PM +0200, Neil Armstrong wrote: > Hi Ayan, > > On 10/10/2019 15:26, Ayan Halder wrote: > > On Thu, Oct 10, 2019 at 11:25:23AM +0200, Neil Armstrong wrote: > >> This adds all the OSD configuration plumbing to support the AFBC decoders > >> path to display of the OSD1 plane. > >> > >> The Amlogic GXM and G12A AFBC decoders are integrated very differently. > >> > >> The Amlogic GXM has a direct output path to the OSD1 VIU pixel input, > >> because the GXM AFBC decoder seem to be a custom IP developed by Amlogic. > >> > >> On the other side, the Amlogic G12A AFBC decoder seems to be an external > >> IP that emit pixels on an AXI master hooked to a "Mali Unpack" block > >> feeding the OSD1 VIU pixel input. > >> This uses a weird "0x1000000" internal HW physical address on both > >> sides to transfer the pixels. > >> > >> For Amlogic GXM, the supported pixel formats are the same as the normal > >> linear OSD1 mode. > >> > >> On the other side, Amlogic added support for all AFBC v1.2 formats for > >> the G12A AFBC integration. > >> > >> For simplicity, we stick to the already supported formats for now. > >> > >> Signed-off-by: Neil Armstrong > >> --- > >> drivers/gpu/drm/meson/meson_crtc.c | 2 + > >> drivers/gpu/drm/meson/meson_drv.h | 4 + > >> drivers/gpu/drm/meson/meson_plane.c | 215 ++++++++++++++++++++++++---- > >> 3 files changed, 190 insertions(+), 31 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c > >> index 57ae1c13d1e6..d478fa232951 100644 > >> --- a/drivers/gpu/drm/meson/meson_crtc.c > >> +++ b/drivers/gpu/drm/meson/meson_crtc.c > >> @@ -281,6 +281,8 @@ void meson_crtc_irq(struct meson_drm *priv) > >> if (priv->viu.osd1_enabled && priv->viu.osd1_commit) { > >> writel_relaxed(priv->viu.osd1_ctrl_stat, > >> priv->io_base + _REG(VIU_OSD1_CTRL_STAT)); > >> + writel_relaxed(priv->viu.osd1_ctrl_stat2, > >> + priv->io_base + _REG(VIU_OSD1_CTRL_STAT2)); > >> writel_relaxed(priv->viu.osd1_blk0_cfg[0], > >> priv->io_base + _REG(VIU_OSD1_BLK0_CFG_W0)); > >> writel_relaxed(priv->viu.osd1_blk0_cfg[1], > >> diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h > >> index 60f13c6f34e5..de25349be8aa 100644 > >> --- a/drivers/gpu/drm/meson/meson_drv.h > >> +++ b/drivers/gpu/drm/meson/meson_drv.h > >> @@ -53,8 +53,12 @@ struct meson_drm { > >> bool osd1_enabled; > >> bool osd1_interlace; > >> bool osd1_commit; > >> + bool osd1_afbcd; > >> uint32_t osd1_ctrl_stat; > >> + uint32_t osd1_ctrl_stat2; > >> uint32_t osd1_blk0_cfg[5]; > >> + uint32_t osd1_blk1_cfg4; > >> + uint32_t osd1_blk2_cfg4; > >> uint32_t osd1_addr; > >> uint32_t osd1_stride; > >> uint32_t osd1_height; > >> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c > >> index 5e798c276037..412941aa8402 100644 > >> --- a/drivers/gpu/drm/meson/meson_plane.c > >> +++ b/drivers/gpu/drm/meson/meson_plane.c > >> @@ -23,6 +23,7 @@ > >> #include "meson_plane.h" > >> #include "meson_registers.h" > >> #include "meson_viu.h" > >> +#include "meson_osd_afbcd.h" > >> > >> /* OSD_SCI_WH_M1 */ > >> #define SCI_WH_M1_W(w) FIELD_PREP(GENMASK(28, 16), w) > >> @@ -92,12 +93,38 @@ static int meson_plane_atomic_check(struct drm_plane *plane, > >> false, true); > >> } > >> > >> +#define MESON_MOD_AFBC_VALID_BITS (AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | \ > >> + AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | \ > >> + AFBC_FORMAT_MOD_YTR | \ > >> + AFBC_FORMAT_MOD_SPARSE | \ > >> + AFBC_FORMAT_MOD_SPLIT) > >> + > >> /* Takes a fixed 16.16 number and converts it to integer. */ > >> static inline int64_t fixed16_to_int(int64_t value) > >> { > >> return value >> 16; > >> } > >> > >> +static u32 meson_g12a_afbcd_line_stride(struct meson_drm *priv) > >> +{ > >> + u32 line_stride = 0; > >> + > >> + switch (priv->afbcd.format) { > >> + case DRM_FORMAT_RGB565: > >> + line_stride = ((priv->viu.osd1_width << 4) + 127) >> 7; > >> + break; > >> + case DRM_FORMAT_RGB888: > >> + case DRM_FORMAT_XRGB8888: > >> + case DRM_FORMAT_ARGB8888: > >> + case DRM_FORMAT_XBGR8888: > >> + case DRM_FORMAT_ABGR8888: > > Please have a look at > > https://www.kernel.org/doc/html/latest/gpu/afbc.html for our > > recommendation. We suggest that *X* formats are avoided. > > > > Also, for interoperability and maximum compression efficiency (with > > AFBC_FORMAT_MOD_YTR), we suggest the following order :- > > > > Component 0: R > > Component 1: G > > Component 2: B > > Component 3: A (if available) > > > Sorry I don't understand, you ask me to limit AFBC to ABGR8888 ? Apologies for the confusion, as per the link, the formats which are suggested with AFBC_FORMAT_MOD_YTR are the BGR/ABGR formats (as listed in the 'AFBC formats' table) Thus, any other permutation of the components might make it incompatible with some other AFBC producers/consumers. > > But why if the HW (GPU and DPU) is capable of ? > > Isn't it an userspace choice ? I understand XRGB8888 is a waste > of memory space and compression efficiency, but this is not the > kernel driver's to decide this, right ? It is a reccomendation by the AFBC spec. As far as I understand, it depends upon the implementor of the AFBC spec(ie dpu, gpu, vpu, etc) to allow/disallow *X* formats for AFBC encoding/decoding. > > For interoperability I'll understand recommending a minimal set > of modifiers and formats. But here, each platform is also limited > by it's GPU capabilites aswell. Agreed > > Limiting to ABGR8888 would discard like every non-Android renderers, > using AFBC, I'm not sure it's the kernels driver's responsibility. I am not familiar with non-Android renderers. > > > > > Thus, DRM_FORMAT_ABGR, DRM_FORMAT_BGR should only be allowed. > >> + line_stride = ((priv->viu.osd1_width << 5) + 127) >> 7; > >> + break; > >> + } > >> + > >> + return ((line_stride + 1) >> 1) << 1; > >> +} > >> + > >> static void meson_plane_atomic_update(struct drm_plane *plane, > >> struct drm_plane_state *old_state) > >> { > > [...] > > >> > >> +static bool meson_plane_format_mod_supported(struct drm_plane *plane, > >> + u32 format, u64 modifier) > >> +{ > >> + struct meson_plane *meson_plane = to_meson_plane(plane); > >> + struct meson_drm *priv = meson_plane->priv; > >> + int i; > >> + > >> + if (modifier == DRM_FORMAT_MOD_INVALID) > >> + return false; > >> + > >> + if (modifier == DRM_FORMAT_MOD_LINEAR) > >> + return true; > >> + > >> + if (!meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXM) && > >> + !meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) > >> + return false; > >> + > >> + if (modifier & ~DRM_FORMAT_MOD_ARM_AFBC(MESON_MOD_AFBC_VALID_BITS)) > >> + return false; > >> + > >> + for (i = 0 ; i < plane->modifier_count ; ++i) > >> + if (plane->modifiers[i] == modifier) > >> + break; > >> + > >> + if (i == plane->modifier_count) { > >> + DRM_DEBUG_KMS("Unsupported modifier\n"); > >> + return false; > >> + } > > I can add a warn_once here, would it be enough ? > > >> + > >> + if (priv->afbcd.ops && priv->afbcd.ops->supported_fmt) > >> + return priv->afbcd.ops->supported_fmt(modifier, format); > >> + > >> + DRM_DEBUG_KMS("AFBC Unsupported\n"); > >> + return false; > >> +} > >> + > >> static const struct drm_plane_funcs meson_plane_funcs = { > >> .update_plane = drm_atomic_helper_update_plane, > >> .disable_plane = drm_atomic_helper_disable_plane, > >> @@ -353,6 +457,7 @@ static const struct drm_plane_funcs meson_plane_funcs = { > >> .reset = drm_atomic_helper_plane_reset, > >> .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, > >> .atomic_destroy_state = drm_atomic_helper_plane_destroy_state, > >> + .format_mod_supported = meson_plane_format_mod_supported, > >> }; > >> > >> static const uint32_t supported_drm_formats[] = { > >> @@ -364,10 +469,53 @@ static const uint32_t supported_drm_formats[] = { > >> DRM_FORMAT_RGB565, > >> }; > >> > >> +static const uint64_t format_modifiers_afbc_gxm[] = { > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_YTR), > >> + /* SPLIT mandates SPARSE, RGB modes mandates YTR */ > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> +static const uint64_t format_modifiers_afbc_g12a[] = { > >> + /* > >> + * - TOFIX Support AFBC modifiers for YUV formats (16x16 + TILED) > >> + * - AFBC_FORMAT_MOD_YTR is mandatory since we only support RGB > >> + * - SPLIT is mandatory for performances reasons when in 16x16 > >> + * block size > >> + * - 32x8 block size + SPLIT is mandatory with 4K frame size > >> + * for performances reasons > >> + */ > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE), > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> +static const uint64_t format_modifiers_default[] = { > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> int meson_plane_create(struct meson_drm *priv) > >> { > >> struct meson_plane *meson_plane; > >> struct drm_plane *plane; > >> + const uint64_t *format_modifiers = format_modifiers_default; > >> > >> meson_plane = devm_kzalloc(priv->drm->dev, sizeof(*meson_plane), > >> GFP_KERNEL); > >> @@ -377,11 +525,16 @@ int meson_plane_create(struct meson_drm *priv) > >> meson_plane->priv = priv; > >> plane = &meson_plane->base; > >> > >> + if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXM)) > >> + format_modifiers = format_modifiers_afbc_gxm; > >> + else if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) > >> + format_modifiers = format_modifiers_afbc_g12a; > >> + > >> drm_universal_plane_init(priv->drm, plane, 0xFF, > >> &meson_plane_funcs, > >> supported_drm_formats, > >> ARRAY_SIZE(supported_drm_formats), > >> - NULL, > >> + format_modifiers, > >> DRM_PLANE_TYPE_PRIMARY, "meson_primary_plane"); > >> > >> drm_plane_helper_add(plane, &meson_plane_helper_funcs); > >> -- > >> 2.22.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic 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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A82C4C4360C for ; Thu, 10 Oct 2019 17:32:22 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 7E89920659 for ; Thu, 10 Oct 2019 17:32:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="WpNckU1k"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="UC01vWCR"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.b="UC01vWCR" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E89920659 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:To:From:Reply-To:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zxBuJay0mcUliJTTidasK2Ee1DCu90uFy9/2RmZelRc=; b=WpNckU1krwZjQ9 9UL+8uhi8DxbbjWOQuB1nHrgrJhW0qIlzJP1KS49yZRRWwbG2jZtbQan7N52b5vaQhpQgTC0M3gZv U5ZDQe9m5igvK4r7YWgfQfHGVLRS//+BTDSbH5B0yZ1H8OHUD8uti3V6mBgPGYGlnQhfbNJJgkYbp 1mUrrYH2TRcAS2d7s6f/Ev2jmOePEl8rTiHLQirNikhKv5W12R6o8/CJ5IGtitazWdYPQfOQfqR1t xeYzcm/62gKUPApFOxGcD/gt+U1MiLNIVrSIsvb4swgILrd/05220Q62u1tH85nNmEA+ZfL4czMIL Npd73kBkHCrec3cX8rAg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIcIR-0006UH-0J; Thu, 10 Oct 2019 17:32:15 +0000 Received: from mail-eopbgr70048.outbound.protection.outlook.com ([40.107.7.48] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iIcIM-0006Tc-Kn; Thu, 10 Oct 2019 17:32:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=UC01vWCRlKvOfW/G9A56ZQUnhQvKUFMLDNElG7xz3adX4/j4iwtA4HIBrbdbs0yKGiKK0bbUIBzfjjz/1sOkbVHzsfNT5OWT2s3bRGMwSTNQ+tFol/RuERsMaU+kFaeTrxRFx0IN1W06lZdnHdQboaDM5BlhgGQlex/JmH1rq8I= Received: from VI1PR0801CA0082.eurprd08.prod.outlook.com (2603:10a6:800:7d::26) by AM0PR08MB5235.eurprd08.prod.outlook.com (2603:10a6:208:163::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.18; Thu, 10 Oct 2019 17:32:05 +0000 Received: from VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::206) by VI1PR0801CA0082.outlook.office365.com (2603:10a6:800:7d::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.18 via Frontend Transport; Thu, 10 Oct 2019 17:32:05 +0000 Authentication-Results: spf=temperror (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; lists.infradead.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;lists.infradead.org; dmarc=none action=none header.from=arm.com; Received-SPF: TempError (protection.outlook.com: error in processing during lookup of arm.com: DNS Timeout) Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT038.mail.protection.outlook.com (10.152.19.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend Transport; Thu, 10 Oct 2019 17:32:03 +0000 Received: ("Tessian outbound 6481c7fa5a3c:v33"); Thu, 10 Oct 2019 17:32:01 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 73a1704631083130 X-CR-MTA-TID: 64aa7808 Received: from e2cf33147698.1 (ip-172-16-0-2.eu-west-1.compute.internal [104.47.14.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id 95264C51-1FE5-4B87-A231-5B097AD745FF.1; Thu, 10 Oct 2019 17:31:55 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2054.outbound.protection.outlook.com [104.47.14.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e2cf33147698.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 10 Oct 2019 17:31:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WUcWmBa702eYbOjl3NUc4Vm4352HLIlRvIbXfnNvrN6MwopA/ma08JI9IrAaXo/3okP+BJBq5YPIseXm3jX3DfJjvBpzsUXjbfc+++VI19szpbaRRly5udnqamm4Aj1DMgpnoG0hxuUPaAVF0uTsJXSsVUPX0ECp3u4PiUQWAdspEpnBNL6aBjnnG7YgYGUTcRQXd1prW0kym3PJKiiocIYykQLlsEBW+yuIkCjOdUsgY1Dldw7KvdSrv9lVAry4p9jwFThl6wzROWdm30YVaThgmc6iM7ixAb7lVnFa6RWyEfifPkFOn1RIcdmVqU2/26VE8thcf/8yPPmyY/vnNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=f022mN8iDWcz0330hvBC9wkQMtXlqv7h4DPC6oQNJCJ6nVAIeNb2ckIfZ7H9+XtYSICo2zd5R32l5Dm83AC6ZOgoaI+SEFdC+gKWCzFa7EiZC9uPYKo/e+LOzIHTb78Zq8mMn8KORhL7wUnYNmzFGj6T8TnWIhg9/4NVB4RT01Hcy/nfbPX98SAMtq2HsoxOq61BlpYl7ymKe5SPsoXyK0XhLESeXKsmrQVQzyZA1//ui5PpBOLW32hUWUq8erUKsfULN/rua85uMULeF6gYe6unsi+jAEZL1CRQbuIwNu/9jxCUSll058VnETBECWQpz6FG/etjpWBOiwhylsoXvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PUMRCcM9QzNb+fOw3U0IY8LmiJ2LQfE1inz2gEUn6tY=; b=UC01vWCRlKvOfW/G9A56ZQUnhQvKUFMLDNElG7xz3adX4/j4iwtA4HIBrbdbs0yKGiKK0bbUIBzfjjz/1sOkbVHzsfNT5OWT2s3bRGMwSTNQ+tFol/RuERsMaU+kFaeTrxRFx0IN1W06lZdnHdQboaDM5BlhgGQlex/JmH1rq8I= Received: from AM0PR08MB5345.eurprd08.prod.outlook.com (52.132.215.213) by AM0PR08MB4388.eurprd08.prod.outlook.com (20.179.33.206) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.16; Thu, 10 Oct 2019 17:31:53 +0000 Received: from AM0PR08MB5345.eurprd08.prod.outlook.com ([fe80::f009:c530:6569:cf6f]) by AM0PR08MB5345.eurprd08.prod.outlook.com ([fe80::f009:c530:6569:cf6f%4]) with mapi id 15.20.2347.016; Thu, 10 Oct 2019 17:31:53 +0000 From: Ayan Halder To: Neil Armstrong Subject: Re: [PATCH 4/7] drm/meson: plane: add support for AFBC mode for OSD1 plane Thread-Topic: [PATCH 4/7] drm/meson: plane: add support for AFBC mode for OSD1 plane Thread-Index: AQHVf0yriLjFzO5S+ESDJ/ifpM4kuqdT3eqAgAAEQoCAAEBvAA== Date: Thu, 10 Oct 2019 17:31:53 +0000 Message-ID: <20191010173152.GA575@arm.com> References: <20191010092526.10419-1-narmstrong@baylibre.com> <20191010092526.10419-5-narmstrong@baylibre.com> <20191010132601.GA10110@arm.com> <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> In-Reply-To: <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LNXP123CA0005.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::17) To AM0PR08MB5345.eurprd08.prod.outlook.com (2603:10a6:208:18c::21) Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Ayan.Halder@arm.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [217.140.106.53] x-ms-publictraffictype: Email X-MS-Office365-Filtering-Correlation-Id: 0d6bda7f-8b1c-4ca0-9242-08d74da7c3bc X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: AM0PR08MB4388:|AM0PR08MB5235: X-MS-Exchange-PUrlCount: 1 X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:8273;OLM:8273; x-forefront-prvs: 018632C080 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(136003)(366004)(376002)(346002)(396003)(39860400002)(189003)(199004)(6916009)(476003)(6512007)(8936002)(25786009)(229853002)(81166006)(8676002)(81156014)(14444005)(305945005)(7736002)(256004)(486006)(14454004)(2616005)(6436002)(86362001)(966005)(66066001)(36756003)(6306002)(66476007)(66556008)(64756008)(66946007)(11346002)(446003)(66446008)(71190400001)(71200400001)(6486002)(186003)(478600001)(5660300002)(386003)(316002)(3846002)(53546011)(26005)(30864003)(33656002)(4326008)(6116002)(44832011)(6246003)(76176011)(99286004)(54906003)(52116002)(6506007)(2906002)(102836004)(1076003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB4388; H:AM0PR08MB5345.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: vZZswzz94Hi+1R2NmpvaipRd5WWRlP7EqDqGrzL+EDMsXTroa2dEpPK1XmX4hnHWYcRJgodQwnPtmM1O8Sl+N1azznVS2oCAZ5rslTIkbYqQLmXRt8f4oe5KG+bG7P0FC8oSIg2wW9HmI1DbTg72qxTav0RzuHrY1zE/W3H3X7SSZPhUZkK1TYFUP78rFWKXJRjq20CoxSy/HTCHiROi5cszuiaLIJ9v2gZfdtBxeAm8S/SW61aaafchBBVEIN/KOlCU7t1rY8RDlZvI590SRN5uucLEh59YhJeSuZkwSyRlnEFMgTVwq5X52e96lRMaW5ky/aJNQhR1jNH9hF+iPd26sGP50zG8L9gM52yXqiHQObSi4Lqb2BV4H0J2YZSLeKqKr55ZfFG0lDNINmh8KQiR5NNaSRfc7wAvV66I2zE9MshIRLeYlkBZeOajDrPMcWr5jdkBOiVkbDSXjc08fg== x-ms-exchange-transport-forked: True Content-ID: MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4388 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Ayan.Halder@arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(396003)(346002)(136003)(376002)(199004)(189003)(7736002)(6116002)(450100002)(36756003)(76130400001)(53546011)(6506007)(6862004)(97756001)(386003)(76176011)(70586007)(305945005)(26005)(478600001)(102836004)(25786009)(316002)(70206006)(14444005)(5660300002)(46406003)(3846002)(23726003)(2906002)(86362001)(4326008)(50466002)(8676002)(81166006)(22756006)(1076003)(6246003)(8936002)(8746002)(66066001)(47776003)(356004)(6306002)(6512007)(30864003)(446003)(14454004)(63350400001)(33656002)(11346002)(486006)(99286004)(966005)(229853002)(186003)(336012)(54906003)(2616005)(476003)(26826003)(81156014)(6486002)(126002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB5235; H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; X-MS-Office365-Filtering-Correlation-Id-Prvs: 4b206749-98d8-4fe0-a6e1-08d74da7bd5e NoDisclaimer: True X-Forefront-PRVS: 018632C080 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vJxJLNRQL2sXPYXe2Kd1619cro0jn0UPLJ+EVG6lq2NBL3iMIgrtUKOgcieDbw3Uv2EC8aqBehXYg9SljAZkMK6PcfZuPoKll/b3FADuCF8Ga2qnsCdk50HPMg2iQ/cNvcqs9TNGSmI+m3ldMnVTJdNksJJEUHTWRJcwzReq7uTPrCM1cpErJ/QxVS8kLQvvVyPyQIgFG5pxJ6CQg4vRHaWy9rZinkg9WCB4aHaWzFfvWmJJLQ2/yAlYnvQGCQAU2sD6cTfCO/toQw5ZEWFZ+qOQT83DJWgZawGqRIMJEZo7ky8Cd0vFBN9nVvSjc6bTRgLOdWCAnM+JcGX1evgrAB7RpzU0sDFj6KoN8Ox5qC3gOMP6oeXONYCFMcOzvQxpyIFSSBAbf18T4ps5ISI/Kn4sb8l4J8e8ufy6QJiLxmjEe6EQorAh7GalrR0+gsNLOdeFdqMQEeMs2L7tRjUytg== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Oct 2019 17:32:03.3585 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0d6bda7f-8b1c-4ca0-9242-08d74da7c3bc X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5235 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191010_103210_906555_0C95C0F7 X-CRM114-Status: GOOD ( 18.77 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "khilman@baylibre.com" , nd , "linux-arm-kernel@lists.infradead.org" , "dri-devel@lists.freedesktop.org" , "linux-amlogic@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, Oct 10, 2019 at 03:41:15PM +0200, Neil Armstrong wrote: > Hi Ayan, > > On 10/10/2019 15:26, Ayan Halder wrote: > > On Thu, Oct 10, 2019 at 11:25:23AM +0200, Neil Armstrong wrote: > >> This adds all the OSD configuration plumbing to support the AFBC decoders > >> path to display of the OSD1 plane. > >> > >> The Amlogic GXM and G12A AFBC decoders are integrated very differently. > >> > >> The Amlogic GXM has a direct output path to the OSD1 VIU pixel input, > >> because the GXM AFBC decoder seem to be a custom IP developed by Amlogic. > >> > >> On the other side, the Amlogic G12A AFBC decoder seems to be an external > >> IP that emit pixels on an AXI master hooked to a "Mali Unpack" block > >> feeding the OSD1 VIU pixel input. > >> This uses a weird "0x1000000" internal HW physical address on both > >> sides to transfer the pixels. > >> > >> For Amlogic GXM, the supported pixel formats are the same as the normal > >> linear OSD1 mode. > >> > >> On the other side, Amlogic added support for all AFBC v1.2 formats for > >> the G12A AFBC integration. > >> > >> For simplicity, we stick to the already supported formats for now. > >> > >> Signed-off-by: Neil Armstrong > >> --- > >> drivers/gpu/drm/meson/meson_crtc.c | 2 + > >> drivers/gpu/drm/meson/meson_drv.h | 4 + > >> drivers/gpu/drm/meson/meson_plane.c | 215 ++++++++++++++++++++++++---- > >> 3 files changed, 190 insertions(+), 31 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c > >> index 57ae1c13d1e6..d478fa232951 100644 > >> --- a/drivers/gpu/drm/meson/meson_crtc.c > >> +++ b/drivers/gpu/drm/meson/meson_crtc.c > >> @@ -281,6 +281,8 @@ void meson_crtc_irq(struct meson_drm *priv) > >> if (priv->viu.osd1_enabled && priv->viu.osd1_commit) { > >> writel_relaxed(priv->viu.osd1_ctrl_stat, > >> priv->io_base + _REG(VIU_OSD1_CTRL_STAT)); > >> + writel_relaxed(priv->viu.osd1_ctrl_stat2, > >> + priv->io_base + _REG(VIU_OSD1_CTRL_STAT2)); > >> writel_relaxed(priv->viu.osd1_blk0_cfg[0], > >> priv->io_base + _REG(VIU_OSD1_BLK0_CFG_W0)); > >> writel_relaxed(priv->viu.osd1_blk0_cfg[1], > >> diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h > >> index 60f13c6f34e5..de25349be8aa 100644 > >> --- a/drivers/gpu/drm/meson/meson_drv.h > >> +++ b/drivers/gpu/drm/meson/meson_drv.h > >> @@ -53,8 +53,12 @@ struct meson_drm { > >> bool osd1_enabled; > >> bool osd1_interlace; > >> bool osd1_commit; > >> + bool osd1_afbcd; > >> uint32_t osd1_ctrl_stat; > >> + uint32_t osd1_ctrl_stat2; > >> uint32_t osd1_blk0_cfg[5]; > >> + uint32_t osd1_blk1_cfg4; > >> + uint32_t osd1_blk2_cfg4; > >> uint32_t osd1_addr; > >> uint32_t osd1_stride; > >> uint32_t osd1_height; > >> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c > >> index 5e798c276037..412941aa8402 100644 > >> --- a/drivers/gpu/drm/meson/meson_plane.c > >> +++ b/drivers/gpu/drm/meson/meson_plane.c > >> @@ -23,6 +23,7 @@ > >> #include "meson_plane.h" > >> #include "meson_registers.h" > >> #include "meson_viu.h" > >> +#include "meson_osd_afbcd.h" > >> > >> /* OSD_SCI_WH_M1 */ > >> #define SCI_WH_M1_W(w) FIELD_PREP(GENMASK(28, 16), w) > >> @@ -92,12 +93,38 @@ static int meson_plane_atomic_check(struct drm_plane *plane, > >> false, true); > >> } > >> > >> +#define MESON_MOD_AFBC_VALID_BITS (AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | \ > >> + AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | \ > >> + AFBC_FORMAT_MOD_YTR | \ > >> + AFBC_FORMAT_MOD_SPARSE | \ > >> + AFBC_FORMAT_MOD_SPLIT) > >> + > >> /* Takes a fixed 16.16 number and converts it to integer. */ > >> static inline int64_t fixed16_to_int(int64_t value) > >> { > >> return value >> 16; > >> } > >> > >> +static u32 meson_g12a_afbcd_line_stride(struct meson_drm *priv) > >> +{ > >> + u32 line_stride = 0; > >> + > >> + switch (priv->afbcd.format) { > >> + case DRM_FORMAT_RGB565: > >> + line_stride = ((priv->viu.osd1_width << 4) + 127) >> 7; > >> + break; > >> + case DRM_FORMAT_RGB888: > >> + case DRM_FORMAT_XRGB8888: > >> + case DRM_FORMAT_ARGB8888: > >> + case DRM_FORMAT_XBGR8888: > >> + case DRM_FORMAT_ABGR8888: > > Please have a look at > > https://www.kernel.org/doc/html/latest/gpu/afbc.html for our > > recommendation. We suggest that *X* formats are avoided. > > > > Also, for interoperability and maximum compression efficiency (with > > AFBC_FORMAT_MOD_YTR), we suggest the following order :- > > > > Component 0: R > > Component 1: G > > Component 2: B > > Component 3: A (if available) > > > Sorry I don't understand, you ask me to limit AFBC to ABGR8888 ? Apologies for the confusion, as per the link, the formats which are suggested with AFBC_FORMAT_MOD_YTR are the BGR/ABGR formats (as listed in the 'AFBC formats' table) Thus, any other permutation of the components might make it incompatible with some other AFBC producers/consumers. > > But why if the HW (GPU and DPU) is capable of ? > > Isn't it an userspace choice ? I understand XRGB8888 is a waste > of memory space and compression efficiency, but this is not the > kernel driver's to decide this, right ? It is a reccomendation by the AFBC spec. As far as I understand, it depends upon the implementor of the AFBC spec(ie dpu, gpu, vpu, etc) to allow/disallow *X* formats for AFBC encoding/decoding. > > For interoperability I'll understand recommending a minimal set > of modifiers and formats. But here, each platform is also limited > by it's GPU capabilites aswell. Agreed > > Limiting to ABGR8888 would discard like every non-Android renderers, > using AFBC, I'm not sure it's the kernels driver's responsibility. I am not familiar with non-Android renderers. > > > > > Thus, DRM_FORMAT_ABGR, DRM_FORMAT_BGR should only be allowed. > >> + line_stride = ((priv->viu.osd1_width << 5) + 127) >> 7; > >> + break; > >> + } > >> + > >> + return ((line_stride + 1) >> 1) << 1; > >> +} > >> + > >> static void meson_plane_atomic_update(struct drm_plane *plane, > >> struct drm_plane_state *old_state) > >> { > > [...] > > >> > >> +static bool meson_plane_format_mod_supported(struct drm_plane *plane, > >> + u32 format, u64 modifier) > >> +{ > >> + struct meson_plane *meson_plane = to_meson_plane(plane); > >> + struct meson_drm *priv = meson_plane->priv; > >> + int i; > >> + > >> + if (modifier == DRM_FORMAT_MOD_INVALID) > >> + return false; > >> + > >> + if (modifier == DRM_FORMAT_MOD_LINEAR) > >> + return true; > >> + > >> + if (!meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXM) && > >> + !meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) > >> + return false; > >> + > >> + if (modifier & ~DRM_FORMAT_MOD_ARM_AFBC(MESON_MOD_AFBC_VALID_BITS)) > >> + return false; > >> + > >> + for (i = 0 ; i < plane->modifier_count ; ++i) > >> + if (plane->modifiers[i] == modifier) > >> + break; > >> + > >> + if (i == plane->modifier_count) { > >> + DRM_DEBUG_KMS("Unsupported modifier\n"); > >> + return false; > >> + } > > I can add a warn_once here, would it be enough ? > > >> + > >> + if (priv->afbcd.ops && priv->afbcd.ops->supported_fmt) > >> + return priv->afbcd.ops->supported_fmt(modifier, format); > >> + > >> + DRM_DEBUG_KMS("AFBC Unsupported\n"); > >> + return false; > >> +} > >> + > >> static const struct drm_plane_funcs meson_plane_funcs = { > >> .update_plane = drm_atomic_helper_update_plane, > >> .disable_plane = drm_atomic_helper_disable_plane, > >> @@ -353,6 +457,7 @@ static const struct drm_plane_funcs meson_plane_funcs = { > >> .reset = drm_atomic_helper_plane_reset, > >> .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, > >> .atomic_destroy_state = drm_atomic_helper_plane_destroy_state, > >> + .format_mod_supported = meson_plane_format_mod_supported, > >> }; > >> > >> static const uint32_t supported_drm_formats[] = { > >> @@ -364,10 +469,53 @@ static const uint32_t supported_drm_formats[] = { > >> DRM_FORMAT_RGB565, > >> }; > >> > >> +static const uint64_t format_modifiers_afbc_gxm[] = { > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_YTR), > >> + /* SPLIT mandates SPARSE, RGB modes mandates YTR */ > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> +static const uint64_t format_modifiers_afbc_g12a[] = { > >> + /* > >> + * - TOFIX Support AFBC modifiers for YUV formats (16x16 + TILED) > >> + * - AFBC_FORMAT_MOD_YTR is mandatory since we only support RGB > >> + * - SPLIT is mandatory for performances reasons when in 16x16 > >> + * block size > >> + * - 32x8 block size + SPLIT is mandatory with 4K frame size > >> + * for performances reasons > >> + */ > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE), > >> + DRM_FORMAT_MOD_ARM_AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | > >> + AFBC_FORMAT_MOD_YTR | > >> + AFBC_FORMAT_MOD_SPARSE | > >> + AFBC_FORMAT_MOD_SPLIT), > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> +static const uint64_t format_modifiers_default[] = { > >> + DRM_FORMAT_MOD_LINEAR, > >> + DRM_FORMAT_MOD_INVALID, > >> +}; > >> + > >> int meson_plane_create(struct meson_drm *priv) > >> { > >> struct meson_plane *meson_plane; > >> struct drm_plane *plane; > >> + const uint64_t *format_modifiers = format_modifiers_default; > >> > >> meson_plane = devm_kzalloc(priv->drm->dev, sizeof(*meson_plane), > >> GFP_KERNEL); > >> @@ -377,11 +525,16 @@ int meson_plane_create(struct meson_drm *priv) > >> meson_plane->priv = priv; > >> plane = &meson_plane->base; > >> > >> + if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_GXM)) > >> + format_modifiers = format_modifiers_afbc_gxm; > >> + else if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) > >> + format_modifiers = format_modifiers_afbc_g12a; > >> + > >> drm_universal_plane_init(priv->drm, plane, 0xFF, > >> &meson_plane_funcs, > >> supported_drm_formats, > >> ARRAY_SIZE(supported_drm_formats), > >> - NULL, > >> + format_modifiers, > >> DRM_PLANE_TYPE_PRIMARY, "meson_primary_plane"); > >> > >> drm_plane_helper_add(plane, &meson_plane_helper_funcs); > >> -- > >> 2.22.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ayan Halder Subject: Re: [PATCH 4/7] drm/meson: plane: add support for AFBC mode for OSD1 plane Date: Thu, 10 Oct 2019 17:31:53 +0000 Message-ID: <20191010173152.GA575@arm.com> References: <20191010092526.10419-1-narmstrong@baylibre.com> <20191010092526.10419-5-narmstrong@baylibre.com> <20191010132601.GA10110@arm.com> <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140075.outbound.protection.outlook.com [40.107.14.75]) by gabe.freedesktop.org (Postfix) with ESMTPS id 91FB66E08A for ; Thu, 10 Oct 2019 17:32:06 +0000 (UTC) In-Reply-To: <44f1771f-d640-f23d-995f-7bfcadd213bc@baylibre.com> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Neil Armstrong Cc: "khilman@baylibre.com" , nd , "linux-arm-kernel@lists.infradead.org" , "dri-devel@lists.freedesktop.org" , "linux-amlogic@lists.infradead.org" List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBPY3QgMTAsIDIwMTkgYXQgMDM6NDE6MTVQTSArMDIwMCwgTmVpbCBBcm1zdHJvbmcg d3JvdGU6Cj4gSGkgQXlhbiwKPiAKPiBPbiAxMC8xMC8yMDE5IDE1OjI2LCBBeWFuIEhhbGRlciB3 cm90ZToKPiA+IE9uIFRodSwgT2N0IDEwLCAyMDE5IGF0IDExOjI1OjIzQU0gKzAyMDAsIE5laWwg QXJtc3Ryb25nIHdyb3RlOgo+ID4+IFRoaXMgYWRkcyBhbGwgdGhlIE9TRCBjb25maWd1cmF0aW9u IHBsdW1iaW5nIHRvIHN1cHBvcnQgdGhlIEFGQkMgZGVjb2RlcnMKPiA+PiBwYXRoIHRvIGRpc3Bs YXkgb2YgdGhlIE9TRDEgcGxhbmUuCj4gPj4KPiA+PiBUaGUgQW1sb2dpYyBHWE0gYW5kIEcxMkEg QUZCQyBkZWNvZGVycyBhcmUgaW50ZWdyYXRlZCB2ZXJ5IGRpZmZlcmVudGx5Lgo+ID4+Cj4gPj4g VGhlIEFtbG9naWMgR1hNIGhhcyBhIGRpcmVjdCBvdXRwdXQgcGF0aCB0byB0aGUgT1NEMSBWSVUg cGl4ZWwgaW5wdXQsCj4gPj4gYmVjYXVzZSB0aGUgR1hNIEFGQkMgZGVjb2RlciBzZWVtIHRvIGJl IGEgY3VzdG9tIElQIGRldmVsb3BlZCBieSBBbWxvZ2ljLgo+ID4+Cj4gPj4gT24gdGhlIG90aGVy IHNpZGUsIHRoZSBBbWxvZ2ljIEcxMkEgQUZCQyBkZWNvZGVyIHNlZW1zIHRvIGJlIGFuIGV4dGVy bmFsCj4gPj4gSVAgdGhhdCBlbWl0IHBpeGVscyBvbiBhbiBBWEkgbWFzdGVyIGhvb2tlZCB0byBh ICJNYWxpIFVucGFjayIgYmxvY2sKPiA+PiBmZWVkaW5nIHRoZSBPU0QxIFZJVSBwaXhlbCBpbnB1 dC4KPiA+PiBUaGlzIHVzZXMgYSB3ZWlyZCAiMHgxMDAwMDAwIiBpbnRlcm5hbCBIVyBwaHlzaWNh bCBhZGRyZXNzIG9uIGJvdGgKPiA+PiBzaWRlcyB0byB0cmFuc2ZlciB0aGUgcGl4ZWxzLgo+ID4+ Cj4gPj4gRm9yIEFtbG9naWMgR1hNLCB0aGUgc3VwcG9ydGVkIHBpeGVsIGZvcm1hdHMgYXJlIHRo ZSBzYW1lIGFzIHRoZSBub3JtYWwKPiA+PiBsaW5lYXIgT1NEMSBtb2RlLgo+ID4+Cj4gPj4gT24g dGhlIG90aGVyIHNpZGUsIEFtbG9naWMgYWRkZWQgc3VwcG9ydCBmb3IgYWxsIEFGQkMgdjEuMiBm b3JtYXRzIGZvcgo+ID4+IHRoZSBHMTJBIEFGQkMgaW50ZWdyYXRpb24uCj4gPj4KPiA+PiBGb3Ig c2ltcGxpY2l0eSwgd2Ugc3RpY2sgdG8gdGhlIGFscmVhZHkgc3VwcG9ydGVkIGZvcm1hdHMgZm9y IG5vdy4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25n QGJheWxpYnJlLmNvbT4KPiA+PiAtLS0KPiA+PiAgZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29u X2NydGMuYyAgfCAgIDIgKwo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2Lmgg ICB8ICAgNCArCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9wbGFuZS5jIHwgMjE1 ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+PiAgMyBmaWxlcyBjaGFuZ2VkLCAxOTAg aW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21lc29uL21lc29uX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9t ZXNvbl9jcnRjLmMKPiA+PiBpbmRleCA1N2FlMWMxM2QxZTYuLmQ0NzhmYTIzMjk1MSAxMDA2NDQK PiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fY3J0Yy5jCj4gPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2NydGMuYwo+ID4+IEBAIC0yODEsNiArMjgxLDgg QEAgdm9pZCBtZXNvbl9jcnRjX2lycShzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQo+ID4+ICAJaWYg KHByaXYtPnZpdS5vc2QxX2VuYWJsZWQgJiYgcHJpdi0+dml1Lm9zZDFfY29tbWl0KSB7Cj4gPj4g IAkJd3JpdGVsX3JlbGF4ZWQocHJpdi0+dml1Lm9zZDFfY3RybF9zdGF0LAo+ID4+ICAJCQkJcHJp di0+aW9fYmFzZSArIF9SRUcoVklVX09TRDFfQ1RSTF9TVEFUKSk7Cj4gPj4gKwkJd3JpdGVsX3Jl bGF4ZWQocHJpdi0+dml1Lm9zZDFfY3RybF9zdGF0MiwKPiA+PiArCQkJCXByaXYtPmlvX2Jhc2Ug KyBfUkVHKFZJVV9PU0QxX0NUUkxfU1RBVDIpKTsKPiA+PiAgCQl3cml0ZWxfcmVsYXhlZChwcml2 LT52aXUub3NkMV9ibGswX2NmZ1swXSwKPiA+PiAgCQkJCXByaXYtPmlvX2Jhc2UgKyBfUkVHKFZJ VV9PU0QxX0JMSzBfQ0ZHX1cwKSk7Cj4gPj4gIAkJd3JpdGVsX3JlbGF4ZWQocHJpdi0+dml1Lm9z ZDFfYmxrMF9jZmdbMV0sCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9t ZXNvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9kcnYuaAo+ID4+IGluZGV4 IDYwZjEzYzZmMzRlNS4uZGUyNTM0OWJlOGFhIDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tZXNvbi9tZXNvbl9kcnYuaAo+ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9t ZXNvbl9kcnYuaAo+ID4+IEBAIC01Myw4ICs1MywxMiBAQCBzdHJ1Y3QgbWVzb25fZHJtIHsKPiA+ PiAgCQlib29sIG9zZDFfZW5hYmxlZDsKPiA+PiAgCQlib29sIG9zZDFfaW50ZXJsYWNlOwo+ID4+ ICAJCWJvb2wgb3NkMV9jb21taXQ7Cj4gPj4gKwkJYm9vbCBvc2QxX2FmYmNkOwo+ID4+ICAJCXVp bnQzMl90IG9zZDFfY3RybF9zdGF0Owo+ID4+ICsJCXVpbnQzMl90IG9zZDFfY3RybF9zdGF0MjsK PiA+PiAgCQl1aW50MzJfdCBvc2QxX2JsazBfY2ZnWzVdOwo+ID4+ICsJCXVpbnQzMl90IG9zZDFf YmxrMV9jZmc0Owo+ID4+ICsJCXVpbnQzMl90IG9zZDFfYmxrMl9jZmc0Owo+ID4+ICAJCXVpbnQz Ml90IG9zZDFfYWRkcjsKPiA+PiAgCQl1aW50MzJfdCBvc2QxX3N0cmlkZTsKPiA+PiAgCQl1aW50 MzJfdCBvc2QxX2hlaWdodDsKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29u L21lc29uX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fcGxhbmUuYwo+ID4+ IGluZGV4IDVlNzk4YzI3NjAzNy4uNDEyOTQxYWE4NDAyIDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9wbGFuZS5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21lc29uL21lc29uX3BsYW5lLmMKPiA+PiBAQCAtMjMsNiArMjMsNyBAQAo+ID4+ICAjaW5jbHVk ZSAibWVzb25fcGxhbmUuaCIKPiA+PiAgI2luY2x1ZGUgIm1lc29uX3JlZ2lzdGVycy5oIgo+ID4+ ICAjaW5jbHVkZSAibWVzb25fdml1LmgiCj4gPj4gKyNpbmNsdWRlICJtZXNvbl9vc2RfYWZiY2Qu aCIKPiA+PiAgCj4gPj4gIC8qIE9TRF9TQ0lfV0hfTTEgKi8KPiA+PiAgI2RlZmluZSBTQ0lfV0hf TTFfVyh3KQkJCUZJRUxEX1BSRVAoR0VOTUFTSygyOCwgMTYpLCB3KQo+ID4+IEBAIC05MiwxMiAr OTMsMzggQEAgc3RhdGljIGludCBtZXNvbl9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gPj4gIAkJCQkJCSAgIGZhbHNlLCB0cnVlKTsKPiA+PiAgfQo+ID4+ICAK PiA+PiArI2RlZmluZSBNRVNPTl9NT0RfQUZCQ19WQUxJRF9CSVRTIChBRkJDX0ZPUk1BVF9NT0Rf QkxPQ0tfU0laRV8xNngxNiB8CVwKPiA+PiArCQkJCSAgIEFGQkNfRk9STUFUX01PRF9CTE9DS19T SVpFXzMyeDggfAlcCj4gPj4gKwkJCQkgICBBRkJDX0ZPUk1BVF9NT0RfWVRSIHwJCVwKPiA+PiAr CQkJCSAgIEFGQkNfRk9STUFUX01PRF9TUEFSU0UgfAkJXAo+ID4+ICsJCQkJICAgQUZCQ19GT1JN QVRfTU9EX1NQTElUKQo+ID4+ICsKPiA+PiAgLyogVGFrZXMgYSBmaXhlZCAxNi4xNiBudW1iZXIg YW5kIGNvbnZlcnRzIGl0IHRvIGludGVnZXIuICovCj4gPj4gIHN0YXRpYyBpbmxpbmUgaW50NjRf dCBmaXhlZDE2X3RvX2ludChpbnQ2NF90IHZhbHVlKQo+ID4+ICB7Cj4gPj4gIAlyZXR1cm4gdmFs dWUgPj4gMTY7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gK3N0YXRpYyB1MzIgbWVzb25fZzEyYV9hZmJj ZF9saW5lX3N0cmlkZShzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQo+ID4+ICt7Cj4gPj4gKwl1MzIg bGluZV9zdHJpZGUgPSAwOwo+ID4+ICsKPiA+PiArCXN3aXRjaCAocHJpdi0+YWZiY2QuZm9ybWF0 KSB7Cj4gPj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ID4+ICsJCWxpbmVfc3RyaWRlID0g KChwcml2LT52aXUub3NkMV93aWR0aCA8PCA0KSArIDEyNykgPj4gNzsKPiA+PiArCQlicmVhazsK PiA+PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Cj4gPj4gKwljYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6Cj4gPj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gPj4gKwljYXNlIERSTV9G T1JNQVRfWEJHUjg4ODg6Cj4gPj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6Cj4gPiBQbGVh c2UgaGF2ZSBhIGxvb2sgYXQKPiA+IGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0 ZXN0L2dwdS9hZmJjLmh0bWwgZm9yIG91cgo+ID4gcmVjb21tZW5kYXRpb24uIFdlIHN1Z2dlc3Qg dGhhdCAqWCogZm9ybWF0cyBhcmUgYXZvaWRlZC4KPiA+IAo+ID4gQWxzbywgZm9yIGludGVyb3Bl cmFiaWxpdHkgYW5kIG1heGltdW0gY29tcHJlc3Npb24gZWZmaWNpZW5jeSAod2l0aAo+ID4gQUZC Q19GT1JNQVRfTU9EX1lUUiksIHdlIHN1Z2dlc3QgdGhlIGZvbGxvd2luZyBvcmRlciA6LQo+ID4g Cj4gPiAgICAgICAgIENvbXBvbmVudCAwOiBSCj4gPiAgICAgICAgIENvbXBvbmVudCAxOiBHCj4g PiAgICAgICAgIENvbXBvbmVudCAyOiBCCj4gPiAgICAgICAgIENvbXBvbmVudCAzOiBBIChpZiBh dmFpbGFibGUpCj4gCj4gCj4gU29ycnkgSSBkb24ndCB1bmRlcnN0YW5kLCB5b3UgYXNrIG1lIHRv IGxpbWl0IEFGQkMgdG8gQUJHUjg4ODggPwoKQXBvbG9naWVzIGZvciB0aGUgY29uZnVzaW9uLCBh cyBwZXIgdGhlIGxpbmssIHRoZSBmb3JtYXRzIHdoaWNoIGFyZQpzdWdnZXN0ZWQgd2l0aCBBRkJD X0ZPUk1BVF9NT0RfWVRSIGFyZSB0aGUgQkdSL0FCR1IgZm9ybWF0cyAoYXMKbGlzdGVkIGluIHRo ZSAnQUZCQyBmb3JtYXRzJyB0YWJsZSkKClRodXMsIGFueSBvdGhlciBwZXJtdXRhdGlvbiBvZiB0 aGUgY29tcG9uZW50cyBtaWdodCBtYWtlIGl0IGluY29tcGF0aWJsZQp3aXRoIHNvbWUgb3RoZXIg QUZCQyBwcm9kdWNlcnMvY29uc3VtZXJzLgoKPiAKPiBCdXQgd2h5IGlmIHRoZSBIVyAoR1BVIGFu ZCBEUFUpIGlzIGNhcGFibGUgb2YgPwo+IAo+IElzbid0IGl0IGFuIHVzZXJzcGFjZSBjaG9pY2Ug PyBJIHVuZGVyc3RhbmQgWFJHQjg4ODggaXMgYSB3YXN0ZQo+IG9mIG1lbW9yeSBzcGFjZSBhbmQg Y29tcHJlc3Npb24gZWZmaWNpZW5jeSwgYnV0IHRoaXMgaXMgbm90IHRoZQo+IGtlcm5lbCBkcml2 ZXIncyB0byBkZWNpZGUgdGhpcywgcmlnaHQgPwpJdCBpcyBhIHJlY2NvbWVuZGF0aW9uIGJ5IHRo ZSBBRkJDIHNwZWMuIEFzIGZhciBhcyBJIHVuZGVyc3RhbmQsIGl0CmRlcGVuZHMgdXBvbiB0aGUg aW1wbGVtZW50b3Igb2YgdGhlIEFGQkMgc3BlYyhpZSBkcHUsIGdwdSwgdnB1LCBldGMpCnRvIGFs bG93L2Rpc2FsbG93ICpYKiBmb3JtYXRzIGZvciBBRkJDIGVuY29kaW5nL2RlY29kaW5nLgoKPiAK PiBGb3IgaW50ZXJvcGVyYWJpbGl0eSBJJ2xsIHVuZGVyc3RhbmQgcmVjb21tZW5kaW5nIGEgbWlu aW1hbCBzZXQKPiBvZiBtb2RpZmllcnMgYW5kIGZvcm1hdHMuIEJ1dCBoZXJlLCBlYWNoIHBsYXRm b3JtIGlzIGFsc28gbGltaXRlZAo+IGJ5IGl0J3MgR1BVIGNhcGFiaWxpdGVzIGFzd2VsbC4KQWdy ZWVkCgo+Cj4gTGltaXRpbmcgdG8gQUJHUjg4ODggd291bGQgZGlzY2FyZCBsaWtlIGV2ZXJ5IG5v bi1BbmRyb2lkIHJlbmRlcmVycywKPiB1c2luZyBBRkJDLCBJJ20gbm90IHN1cmUgaXQncyB0aGUg a2VybmVscyBkcml2ZXIncyByZXNwb25zaWJpbGl0eS4KSSBhbSBub3QgZmFtaWxpYXIgd2l0aCBu b24tQW5kcm9pZCByZW5kZXJlcnMuCj4gCj4gPiAKPiA+IFRodXMsIERSTV9GT1JNQVRfQUJHUiwg RFJNX0ZPUk1BVF9CR1Igc2hvdWxkIG9ubHkgYmUgYWxsb3dlZC4KPiA+PiArCQlsaW5lX3N0cmlk ZSA9ICgocHJpdi0+dml1Lm9zZDFfd2lkdGggPDwgNSkgKyAxMjcpID4+IDc7Cj4gPj4gKwkJYnJl YWs7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJcmV0dXJuICgobGluZV9zdHJpZGUgKyAxKSA+PiAx KSA8PCAxOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICBzdGF0aWMgdm9pZCBtZXNvbl9wbGFuZV9hdG9t aWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ICAJCQkJICAgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4+ICB7Cj4gCj4gWy4uLl0KPiAKPiA+PiAg Cj4gPj4gK3N0YXRpYyBib29sIG1lc29uX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ICsJCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlm aWVyKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbWVzb25fcGxhbmUgKm1lc29uX3BsYW5lID0gdG9f bWVzb25fcGxhbmUocGxhbmUpOwo+ID4+ICsJc3RydWN0IG1lc29uX2RybSAqcHJpdiA9IG1lc29u X3BsYW5lLT5wcml2Owo+ID4+ICsJaW50IGk7Cj4gPj4gKwo+ID4+ICsJaWYgKG1vZGlmaWVyID09 IERSTV9GT1JNQVRfTU9EX0lOVkFMSUQpCj4gPj4gKwkJcmV0dXJuIGZhbHNlOwo+ID4+ICsKPiA+ PiArCWlmIChtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpCj4gPj4gKwkJcmV0dXJu IHRydWU7Cj4gPj4gKwo+ID4+ICsJaWYgKCFtZXNvbl92cHVfaXNfY29tcGF0aWJsZShwcml2LCBW UFVfQ09NUEFUSUJMRV9HWE0pICYmCj4gPj4gKwkgICAgIW1lc29uX3ZwdV9pc19jb21wYXRpYmxl KHByaXYsIFZQVV9DT01QQVRJQkxFX0cxMkEpKQo+ID4+ICsJCXJldHVybiBmYWxzZTsKPiA+PiAr Cj4gPj4gKwlpZiAobW9kaWZpZXIgJiB+RFJNX0ZPUk1BVF9NT0RfQVJNX0FGQkMoTUVTT05fTU9E X0FGQkNfVkFMSURfQklUUykpCj4gPj4gKwkJcmV0dXJuIGZhbHNlOwo+ID4+ICsKPiA+PiArCWZv ciAoaSA9IDAgOyBpIDwgcGxhbmUtPm1vZGlmaWVyX2NvdW50IDsgKytpKQo+ID4+ICsJCWlmIChw bGFuZS0+bW9kaWZpZXJzW2ldID09IG1vZGlmaWVyKQo+ID4+ICsJCQlicmVhazsKPiA+PiArCj4g Pj4gKwlpZiAoaSA9PSBwbGFuZS0+bW9kaWZpZXJfY291bnQpIHsKPiA+PiArCQlEUk1fREVCVUdf S01TKCJVbnN1cHBvcnRlZCBtb2RpZmllclxuIik7Cj4gPj4gKwkJcmV0dXJuIGZhbHNlOwo+ID4+ ICsJfQo+IAo+IEkgY2FuIGFkZCBhIHdhcm5fb25jZSBoZXJlLCB3b3VsZCBpdCBiZSBlbm91Z2gg Pwo+IAo+ID4+ICsKPiA+PiArCWlmIChwcml2LT5hZmJjZC5vcHMgJiYgcHJpdi0+YWZiY2Qub3Bz LT5zdXBwb3J0ZWRfZm10KQo+ID4+ICsJCXJldHVybiBwcml2LT5hZmJjZC5vcHMtPnN1cHBvcnRl ZF9mbXQobW9kaWZpZXIsIGZvcm1hdCk7Cj4gPj4gKwo+ID4+ICsJRFJNX0RFQlVHX0tNUygiQUZC QyBVbnN1cHBvcnRlZFxuIik7Cj4gPj4gKwlyZXR1cm4gZmFsc2U7Cj4gPj4gK30KPiA+PiArCj4g Pj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG1lc29uX3BsYW5lX2Z1bmNz ID0gewo+ID4+ICAJLnVwZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxh bmUsCj4gPj4gIAkuZGlzYWJsZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLAo+ID4+IEBAIC0zNTMsNiArNDU3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgbWVzb25fcGxhbmVfZnVuY3MgPSB7Cj4gPj4gIAkucmVzZXQJCQk9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ID4+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCj4gPj4gIAkuYXRvbWljX2Rl c3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAo+ID4+ ICsJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkICAgPSBtZXNvbl9wbGFuZV9mb3JtYXRfbW9kX3N1cHBv cnRlZCwKPiA+PiAgfTsKPiA+PiAgCj4gPj4gIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzdXBwb3J0 ZWRfZHJtX2Zvcm1hdHNbXSA9IHsKPiA+PiBAQCAtMzY0LDEwICs0NjksNTMgQEAgc3RhdGljIGNv bnN0IHVpbnQzMl90IHN1cHBvcnRlZF9kcm1fZm9ybWF0c1tdID0gewo+ID4+ICAJRFJNX0ZPUk1B VF9SR0I1NjUsCj4gPj4gIH07Cj4gPj4gIAo+ID4+ICtzdGF0aWMgY29uc3QgdWludDY0X3QgZm9y bWF0X21vZGlmaWVyc19hZmJjX2d4bVtdID0gewo+ID4+ICsJRFJNX0ZPUk1BVF9NT0RfQVJNX0FG QkMoQUZCQ19GT1JNQVRfTU9EX0JMT0NLX1NJWkVfMTZ4MTYgfAo+ID4+ICsJCQkJQUZCQ19GT1JN QVRfTU9EX1NQQVJTRSB8Cj4gPj4gKwkJCQlBRkJDX0ZPUk1BVF9NT0RfWVRSKSwKPiA+PiArCS8q IFNQTElUIG1hbmRhdGVzIFNQQVJTRSwgUkdCIG1vZGVzIG1hbmRhdGVzIFlUUiAqLwo+ID4+ICsJ RFJNX0ZPUk1BVF9NT0RfQVJNX0FGQkMoQUZCQ19GT1JNQVRfTU9EX0JMT0NLX1NJWkVfMTZ4MTYg fAo+ID4+ICsJCQkJQUZCQ19GT1JNQVRfTU9EX1lUUiB8Cj4gPj4gKwkJCQlBRkJDX0ZPUk1BVF9N T0RfU1BBUlNFIHwKPiA+PiArCQkJCUFGQkNfRk9STUFUX01PRF9TUExJVCksCj4gPj4gKwlEUk1f Rk9STUFUX01PRF9MSU5FQVIsCj4gPj4gKwlEUk1fRk9STUFUX01PRF9JTlZBTElELAo+ID4+ICt9 Owo+ID4+ICsKPiA+PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IGZvcm1hdF9tb2RpZmllcnNfYWZi Y19nMTJhW10gPSB7Cj4gPj4gKwkvKgo+ID4+ICsJICogLSBUT0ZJWCBTdXBwb3J0IEFGQkMgbW9k aWZpZXJzIGZvciBZVVYgZm9ybWF0cyAoMTZ4MTYgKyBUSUxFRCkKPiA+PiArCSAqIC0gQUZCQ19G T1JNQVRfTU9EX1lUUiBpcyBtYW5kYXRvcnkgc2luY2Ugd2Ugb25seSBzdXBwb3J0IFJHQgo+ID4+ ICsJICogLSBTUExJVCBpcyBtYW5kYXRvcnkgZm9yIHBlcmZvcm1hbmNlcyByZWFzb25zIHdoZW4g aW4gMTZ4MTYKPiA+PiArCSAqICAgYmxvY2sgc2l6ZQo+ID4+ICsJICogLSAzMng4IGJsb2NrIHNp emUgKyBTUExJVCBpcyBtYW5kYXRvcnkgd2l0aCA0SyBmcmFtZSBzaXplCj4gPj4gKwkgKiAgIGZv ciBwZXJmb3JtYW5jZXMgcmVhc29ucwo+ID4+ICsJICovCj4gPj4gKwlEUk1fRk9STUFUX01PRF9B Uk1fQUZCQyhBRkJDX0ZPUk1BVF9NT0RfQkxPQ0tfU0laRV8xNngxNiB8Cj4gPj4gKwkJCQlBRkJD X0ZPUk1BVF9NT0RfWVRSIHwKPiA+PiArCQkJCUFGQkNfRk9STUFUX01PRF9TUEFSU0UgfAo+ID4+ ICsJCQkJQUZCQ19GT1JNQVRfTU9EX1NQTElUKSwKPiA+PiArCURSTV9GT1JNQVRfTU9EX0FSTV9B RkJDKEFGQkNfRk9STUFUX01PRF9CTE9DS19TSVpFXzMyeDggfAo+ID4+ICsJCQkJQUZCQ19GT1JN QVRfTU9EX1lUUiB8Cj4gPj4gKwkJCQlBRkJDX0ZPUk1BVF9NT0RfU1BBUlNFKSwKPiA+PiArCURS TV9GT1JNQVRfTU9EX0FSTV9BRkJDKEFGQkNfRk9STUFUX01PRF9CTE9DS19TSVpFXzMyeDggfAo+ ID4+ICsJCQkJQUZCQ19GT1JNQVRfTU9EX1lUUiB8Cj4gPj4gKwkJCQlBRkJDX0ZPUk1BVF9NT0Rf U1BBUlNFIHwKPiA+PiArCQkJCUFGQkNfRk9STUFUX01PRF9TUExJVCksCj4gPj4gKwlEUk1fRk9S TUFUX01PRF9MSU5FQVIsCj4gPj4gKwlEUk1fRk9STUFUX01PRF9JTlZBTElELAo+ID4+ICt9Owo+ ID4+ICsKPiA+PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90IGZvcm1hdF9tb2RpZmllcnNfZGVmYXVs dFtdID0gewo+ID4+ICsJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ID4+ICsJRFJNX0ZPUk1BVF9N T0RfSU5WQUxJRCwKPiA+PiArfTsKPiA+PiArCj4gPj4gIGludCBtZXNvbl9wbGFuZV9jcmVhdGUo c3RydWN0IG1lc29uX2RybSAqcHJpdikKPiA+PiAgewo+ID4+ICAJc3RydWN0IG1lc29uX3BsYW5l ICptZXNvbl9wbGFuZTsKPiA+PiAgCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4+ICsJY29u c3QgdWludDY0X3QgKmZvcm1hdF9tb2RpZmllcnMgPSBmb3JtYXRfbW9kaWZpZXJzX2RlZmF1bHQ7 Cj4gPj4gIAo+ID4+ICAJbWVzb25fcGxhbmUgPSBkZXZtX2t6YWxsb2MocHJpdi0+ZHJtLT5kZXYs IHNpemVvZigqbWVzb25fcGxhbmUpLAo+ID4+ICAJCQkJICAgR0ZQX0tFUk5FTCk7Cj4gPj4gQEAg LTM3NywxMSArNTI1LDE2IEBAIGludCBtZXNvbl9wbGFuZV9jcmVhdGUoc3RydWN0IG1lc29uX2Ry bSAqcHJpdikKPiA+PiAgCW1lc29uX3BsYW5lLT5wcml2ID0gcHJpdjsKPiA+PiAgCXBsYW5lID0g Jm1lc29uX3BsYW5lLT5iYXNlOwo+ID4+ICAKPiA+PiArCWlmIChtZXNvbl92cHVfaXNfY29tcGF0 aWJsZShwcml2LCBWUFVfQ09NUEFUSUJMRV9HWE0pKQo+ID4+ICsJCWZvcm1hdF9tb2RpZmllcnMg PSBmb3JtYXRfbW9kaWZpZXJzX2FmYmNfZ3htOwo+ID4+ICsJZWxzZSBpZiAobWVzb25fdnB1X2lz X2NvbXBhdGlibGUocHJpdiwgVlBVX0NPTVBBVElCTEVfRzEyQSkpCj4gPj4gKwkJZm9ybWF0X21v ZGlmaWVycyA9IGZvcm1hdF9tb2RpZmllcnNfYWZiY19nMTJhOwo+ID4+ICsKPiA+PiAgCWRybV91 bml2ZXJzYWxfcGxhbmVfaW5pdChwcml2LT5kcm0sIHBsYW5lLCAweEZGLAo+ID4+ICAJCQkJICZt ZXNvbl9wbGFuZV9mdW5jcywKPiA+PiAgCQkJCSBzdXBwb3J0ZWRfZHJtX2Zvcm1hdHMsCj4gPj4g IAkJCQkgQVJSQVlfU0laRShzdXBwb3J0ZWRfZHJtX2Zvcm1hdHMpLAo+ID4+IC0JCQkJIE5VTEws Cj4gPj4gKwkJCQkgZm9ybWF0X21vZGlmaWVycywKPiA+PiAgCQkJCSBEUk1fUExBTkVfVFlQRV9Q UklNQVJZLCAibWVzb25fcHJpbWFyeV9wbGFuZSIpOwo+ID4+ICAKPiA+PiAgCWRybV9wbGFuZV9o ZWxwZXJfYWRkKHBsYW5lLCAmbWVzb25fcGxhbmVfaGVscGVyX2Z1bmNzKTsKPiA+PiAtLSAKPiA+ PiAyLjIyLjAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs