Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3169968pxk; Mon, 7 Sep 2020 05:23:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxvbXEb522YNQfSNPvb6XJJ3tHr/Dk18HirUlPJ1YPZO65wbU5pndxTeonE1TuPzXQp4R2B X-Received: by 2002:a17:906:2552:: with SMTP id j18mr20226546ejb.476.1599481422524; Mon, 07 Sep 2020 05:23:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599481422; cv=none; d=google.com; s=arc-20160816; b=oMP40LM2oCXV81wiyiWkGpvxJPrXlLpf3d/dmgWLBf7traIft7yOfDUhKCJWIoGKAS omxD0MOEBaEcxhBl3Tiql/QyLT5aOxF9d+tcDYCgRCit+uNLsEAxp4eQWYMfQPpQSyv8 977ob1j3LW+gwrRulGTa+Cdox+FlfxQOMzF0Y/H5hgk1rsD9hgbDbh6HHx74gb+GwtvZ 6gGoLEy7ma+Zj8V1Ugy1Aa3jg03sRTcsSWXfYG4XAESVFOEILvwxJsEsRqeN/q+/fS0v zdQTild7wUXxdi6EV0EDFnwf5ww3yfkUxSrCMg8SREEUkbv+x+Ds+U2y6z+QqrquggBC xURw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=p0/53R3G2Jf7YgThzZ9fogE1AZWMWn/k50Rz5ZEcbq4=; b=MGkFAsgIrQuHgUCqvh6rNa319SyRRA61QnH0XPTun7HuOb8cTfI2p3QXSswNy21JDB HmzNgBVG4lTUpUQgf6M604fAla66jFx2cTFD9/taZftCaWEFM2FlL4b9IA2S8ykyh1L6 4ziEkituoUqW6Pvrz0Aaty7NAUq6q19OoR9ZvpiYkuAD+hEw1ctQYPgSbcUCDnwOdR3a RsFO3yZ/zrz+O5FqdXeQA4cEE05JpvcWIysGRxT6bon6dKl8Nx0x85jYnrNsY8up2ebM rOjSVb0Uf0Me2RdoBdKsOUsk0DoAKh+MQU7SOh+kGe9QdHSxsKZnFvn54IpF5Xmw1QoY RwfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=VxlTSJUZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u13si6623802edd.16.2020.09.07.05.23.19; Mon, 07 Sep 2020 05:23:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=VxlTSJUZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729196AbgIGMT2 (ORCPT + 99 others); Mon, 7 Sep 2020 08:19:28 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:48951 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729244AbgIGMLg (ORCPT ); Mon, 7 Sep 2020 08:11:36 -0400 X-UUID: 75510654fe314a07a96da50d2fca5a4c-20200907 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=p0/53R3G2Jf7YgThzZ9fogE1AZWMWn/k50Rz5ZEcbq4=; b=VxlTSJUZBeYvRsF5rN/d26dMANnx+sfrwSp7CUSk/rSf6GgNNnyettYXecP7e8T0peI5Khtgw53nHnAF9LTlVjTtsD92CT+/cugKEo1ubI2S7A4pyYtgho3M4DUFpYayklUDjMwBVS/ECWOssnrr58jGmtCWKH8hSgAQod2FLFQ=; X-UUID: 75510654fe314a07a96da50d2fca5a4c-20200907 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1624015310; Mon, 07 Sep 2020 20:10:54 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 7 Sep 2020 20:10:51 +0800 Received: from localhost.localdomain (10.17.3.153) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 7 Sep 2020 20:10:50 +0800 From: Jianjun Wang To: Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi , Ryder Lee CC: Philipp Zabel , Matthias Brugger , Mauro Carvalho Chehab , , , , , , , Sj Huang , Jianjun Wang Subject: [v1,2/3] PCI: mediatek: Add new generation controller support Date: Mon, 7 Sep 2020 20:08:51 +0800 Message-ID: <20200907120852.12090-3-jianjun.wang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200907120852.12090-1-jianjun.wang@mediatek.com> References: <20200907120852.12090-1-jianjun.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org TWVkaWFUZWsncyBQQ0llIGhvc3QgY29udHJvbGxlciBoYXMgdGhyZWUgZ2VuZXJhdGlvbiBIV3Ms IHRoZSBuZXcNCmdlbmVyYXRpb24gSFcgaXMgYW4gaW5kaXZpZHVhbCBicmlkZ2UsIGl0IHN1cG9v cnRzIEdlbjMgc3BlZWQgYW5kDQp1cCB0byAyNTYgTVNJIGludGVycnVwdCBudW1iZXJzIGZvciBt dWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KDQpBZGQgc3VwcG9ydCBmb3IgbmV3IEdlbjMgY29udHJv bGxlciB3aGljaCBjYW4gYmUgZm91bmQgb24gTVQ4MTkyLg0KDQpBY2tlZC1ieTogUnlkZXIgTGVl IDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KU2lnbmVkLW9mZi1ieTogSmlhbmp1biBXYW5nIDxq aWFuanVuLndhbmdAbWVkaWF0ZWsuY29tPg0KLS0tDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9L Y29uZmlnICAgICAgICAgICAgICB8ICAgMTQgKw0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFr ZWZpbGUgICAgICAgICAgICAgfCAgICAxICsNCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUt bWVkaWF0ZWstZ2VuMy5jIHwgMTA2MyArKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFu Z2VkLCAxMDc4IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQpp bmRleCBmMThjMzcyNWVmODAuLjgzZGFhNzcyNTk1YiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmln DQpAQCAtMjM5LDYgKzIzOSwyMCBAQCBjb25maWcgUENJRV9NRURJQVRFSw0KIAkgIFNheSBZIGhl cmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQogCSAg TWVkaWFUZWsgU29Dcy4NCiANCitjb25maWcgUENJRV9NRURJQVRFS19HRU4zDQorCXRyaXN0YXRl ICJNZWRpYVRlayBHRU4zIFBDSWUgY29udHJvbGxlciINCisJZGVwZW5kcyBvbiBBUkNIX01FRElB VEVLIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9uIE9GDQorCWRlcGVuZHMgb24gUENJX01T SV9JUlFfRE9NQUlODQorCWhlbHANCisJICBBZGRzIHN1cHBvcnQgZm9yIFBDSWUgR2VuMyBNQUMg Y29udHJvbGxlciBmb3IgTWVkaWFUZWsgU29Dcy4NCisJICBUaGlzIFBDSWUgY29udHJvbGxlciBw cm92aWRlcyB0aGUgY2FwYWJsZSBvZiBHZW4zLCBHZW4yIGFuZA0KKwkgIEdlbjEgc3BlZWQsIGFu ZCBzdXBwb3J0IHVwIHRvIDI1NiBNU0kgaW50ZXJydXB0IG51bWJlcnMgZm9yDQorCSAgbXVsdGkt ZnVuY3Rpb24gZGV2aWNlcy4NCisNCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJs ZSBHZW4zIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQorCSAgTWVkaWFUZWsgU29Dcy4NCisN CiBjb25maWcgUENJRV9UQU5HT19TTVA4NzU5DQogCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJZSBj b250cm9sbGVyIChEQU5HRVJPVVMpIg0KIAlkZXBlbmRzIG9uIEFSQ0hfVEFOR08gJiYgUENJX01T SSAmJiBPRg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgYi9k cml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQppbmRleCBiY2RiZjQ5YWIxZTQuLjljMWI5 Njc3NzU5NyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCisr KyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCkBAIC0yNyw2ICsyNyw3IEBAIG9i ai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQKSArPSBwY2llLXJvY2tjaGlwLm8NCiBvYmotJChDT05G SUdfUENJRV9ST0NLQ0hJUF9FUCkgKz0gcGNpZS1yb2NrY2hpcC1lcC5vDQogb2JqLSQoQ09ORklH X1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNpZS1yb2NrY2hpcC1ob3N0Lm8NCiBvYmotJChDT05G SUdfUENJRV9NRURJQVRFSykgKz0gcGNpZS1tZWRpYXRlay5vDQorb2JqLSQoQ09ORklHX1BDSUVf TUVESUFURUtfR0VOMykgKz0gcGNpZS1tZWRpYXRlay1nZW4zLm8NCiBvYmotJChDT05GSUdfUENJ RV9UQU5HT19TTVA4NzU5KSArPSBwY2llLXRhbmdvLm8NCiBvYmotJChDT05GSUdfVk1EKSArPSB2 bWQubw0KIG9iai0kKENPTkZJR19QQ0lFX0JSQ01TVEIpICs9IHBjaWUtYnJjbXN0Yi5vDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYyBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmI3NmJhZWFjM2I5OA0KLS0tIC9kZXYvbnVsbA0K KysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KQEAgLTAs MCArMSwxMDYzIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0K KyAqIE1lZGlhVGVrIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlci4NCisgKg0KKyAqIENvcHly aWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuDQorICogQXV0aG9yOiBKaWFuanVuIFdhbmcgPGpp YW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4N CisjaW5jbHVkZSA8bGludXgvaXJxLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5l ZF9pcnEuaD4NCisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv bXNpLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgv b2ZfY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCisjaW5jbHVkZSA8bGludXgv cGh5L3BoeS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVk ZSA8bGludXgvcG1fZG9tYWluLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisj aW5jbHVkZSA8bGludXgvcmVzZXQuaD4NCisNCisjaW5jbHVkZSAiLi4vcGNpLmgiDQorDQorI2Rl ZmluZSBQQ0lFX1NFVFRJTkdfUkVHCQkweDgwDQorI2RlZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4 OWMNCisjZGVmaW5lIFBDSV9DTEFTUyhjbGFzcykJCShjbGFzcyA8PCA4KQ0KKyNkZWZpbmUgUENJ RV9SQ19NT0RFCQkJQklUKDApDQorDQorI2RlZmluZSBQQ0lFX0NGR05VTV9SRUcJCQkweDE0MA0K KyNkZWZpbmUgUENJRV9DRkdfREVWRk4oZGV2Zm4pCQkoKGRldmZuKSAmIEdFTk1BU0soNywgMCkp DQorI2RlZmluZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVzKSA8PCA4KSAmIEdFTk1BU0soMTUs IDgpKQ0KKyNkZWZpbmUgUENJRV9DRkdfQllURV9FTihieXRlcykJCSgoKGJ5dGVzKSA8PCAxNikg JiBHRU5NQVNLKDE5LCAxNikpDQorI2RlZmluZSBQQ0lFX0NGR19GT1JDRV9CWVRFX0VOCQlCSVQo MjApDQorI2RlZmluZSBQQ0lFX0NGR19PRkZTRVRfQUREUgkJMHgxMDAwDQorI2RlZmluZSBQQ0lF X0NGR19IRUFERVIoZGV2Zm4sIGJ1cykgXA0KKwkoUENJRV9DRkdfREVWRk4oZGV2Zm4pIHwgUENJ RV9DRkdfQlVTKGJ1cykpDQorDQorI2RlZmluZSBQQ0lFX0NGR19IRUFERVJfRk9SQ0VfQkUoZGV2 Zm4sIGJ1cywgYnl0ZXMpIFwNCisJKFBDSUVfQ0ZHX0hFQURFUihkZXZmbiwgYnVzKSB8IFBDSUVf Q0ZHX0JZVEVfRU4oYnl0ZXMpIFwNCisJIHwgUENJRV9DRkdfRk9SQ0VfQllURV9FTikNCisNCisj ZGVmaW5lIFBDSUVfUlNUX0NUUkxfUkVHCQkweDE0OA0KKyNkZWZpbmUgUENJRV9NQUNfUlNUQgkJ CUJJVCgwKQ0KKyNkZWZpbmUgUENJRV9QSFlfUlNUQgkJCUJJVCgxKQ0KKyNkZWZpbmUgUENJRV9C UkdfUlNUQgkJCUJJVCgyKQ0KKyNkZWZpbmUgUENJRV9QRV9SU1RCCQkJQklUKDMpDQorDQorI2Rl ZmluZSBQQ0lFX01JU0NfU1RBVFVTX1JFRwkJMHgxNEMNCisjZGVmaW5lIFBDSUVfTFRSX01TR19S RUNFSVZFRAkJQklUKDApDQorI2RlZmluZSBQQ0lFX1BDSUVfTVNHX1JFQ0VJVkVECQlCSVQoMSkN CisNCisjZGVmaW5lIFBDSUVfTFRTU01fU1RBVFVTX1JFRwkJMHgxNTANCisjZGVmaW5lIFBDSUVf TFRTU01fU1RBVEVfTUFTSwkJR0VOTUFTSygyOCwgMjQpDQorI2RlZmluZSBQQ0lFX0xUU1NNX1NU QVRFKHZhbCkJCSgodmFsICYgUENJRV9MVFNTTV9TVEFURV9NQVNLKSA+PiAyNCkNCisjZGVmaW5l IFBDSUVfTFRTU01fU1RBVEVfTDAJCTB4MTANCisjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDFf SURMRQkweDEzDQorI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX0wyX0lETEUJMHgxNA0KKw0KKyNk ZWZpbmUgUENJRV9MSU5LX1NUQVRVU19SRUcJCTB4MTU0DQorI2RlZmluZSBQQ0lFX1BPUlRfTElO S1VQCQlCSVQoOCkNCisNCisjZGVmaW5lIFBDSUVfTVNJX1NFVF9OVU0JCTgNCisjZGVmaW5lIFBD SUVfTVNJX0lSUVNfUEVSX1NFVAkJMzINCisjZGVmaW5lIFBDSUVfTVNJX0lSUVNfTlVNIFwNCisJ KFBDSUVfTVNJX0lSUVNfUEVSX1NFVCAqIChQQ0lFX01TSV9TRVRfTlVNKSkNCisNCisjZGVmaW5l IFBDSUVfSU5UX0VOQUJMRV9SRUcJCTB4MTgwDQorI2RlZmluZSBQQ0lFX01TSV9NQVNLCQkJR0VO TUFTSyhQQ0lFX01TSV9TRVRfTlVNICsgOCAtIDEsIDgpDQorI2RlZmluZSBQQ0lFX01TSV9TSElG VAkJCTgNCisjZGVmaW5lIFBDSUVfSU5UWF9TSElGVAkJCTI0DQorI2RlZmluZSBQQ0lFX0lOVFhf TUFTSwkJCUdFTk1BU0soMjcsIDI0KQ0KKyNkZWZpbmUgUENJRV9NU0dfTUFTSwkJCUJJVCgyOCkN CisjZGVmaW5lIFBDSUVfQUVSX01BU0sJCQlCSVQoMjkpDQorI2RlZmluZSBQQ0lFX1BNX01BU0sJ CQlCSVQoMzApDQorDQorI2RlZmluZSBQQ0lFX0lOVF9TVEFUVVNfUkVHCQkweDE4NA0KKyNkZWZp bmUgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcJCTB4MTkwDQorDQorI2RlZmluZSBQQ0lFX0xPV19Q T1dFUl9DVFJMX1JFRwkJMHgxOTQNCisjZGVmaW5lIFBDSUVfRElTX0xPV1BXUl9NQVNLCQlHRU5N QVNLKDMsIDApDQorI2RlZmluZSBQQ0lFX0RJU19MMFNfTUFTSwkJQklUKDApDQorI2RlZmluZSBQ Q0lFX0RJU19MMV9NQVNLCQlCSVQoMSkNCisjZGVmaW5lIFBDSUVfRElTX0wxMV9NQVNLCQlCSVQo MikNCisjZGVmaW5lIFBDSUVfRElTX0wxMl9NQVNLCQlCSVQoMykNCisjZGVmaW5lIFBDSUVfRk9S Q0VfRElTX0xPV1BXUgkJR0VOTUFTSygxMSwgOCkNCisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0ww UwkJQklUKDgpDQorI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMQkJQklUKDkpDQorI2RlZmluZSBQ Q0lFX0ZPUkNFX0RJU19MMTEJCUJJVCgxMCkNCisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxMgkJ QklUKDExKQ0KKw0KKyNkZWZpbmUgUENJRV9JQ01EX1BNX1JFRwkJMHgxOTgNCisjZGVmaW5lIFBD SUVfVFVSTl9PRkZfTElOSwkJQklUKDQpDQorDQorI2RlZmluZSBQQ0lFX01TSV9BRERSX0JBU0Vf UkVHCQkweGMwMA0KKyNkZWZpbmUgUENJRV9NU0lfU0VUX09GRlNFVAkJMHgxMA0KKyNkZWZpbmUg UENJRV9NU0lfU1RBVFVTX09GRlNFVAkJMHgwNA0KKyNkZWZpbmUgUENJRV9NU0lfRU5BQkxFX09G RlNFVAkJMHgwOA0KKw0KKyNkZWZpbmUgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRwkweDgwMA0K KyNkZWZpbmUgUENJRV9BVFJfU1JDX0FERFJfTVNCX09GRlNFVAkweDQNCisjZGVmaW5lIFBDSUVf QVRSX1RSU0xfQUREUl9MU0JfT0ZGU0VUCTB4OA0KKyNkZWZpbmUgUENJRV9BVFJfVFJTTF9BRERS X01TQl9PRkZTRVQJMHhjDQorI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVAkweDEw DQorI2RlZmluZSBQQ0lFX0FUUl9UTEJfU0VUX09GRlNFVAkJMHgyMA0KKw0KKyNkZWZpbmUgUENJ RV9NQVhfVFJBTlNfVEFCTEVTCQk4DQorI2RlZmluZSBBVFJfRU4JCQkJQklUKDApDQorI2RlZmlu ZSBBVFJfU0laRShzaXplKQkJCSgoKChzaXplKSAtIDEpIDw8IDEpICYgR0VOTUFTSyg2LCAxKSkN CisjZGVmaW5lIEFUUl9JRChpZCkJCQkoaWQgJiBHRU5NQVNLKDMsIDApKQ0KKyNkZWZpbmUgQVRS X1BBUkFNKHBhcmFtKQkJKCgocGFyYW0pIDw8IDE2KSAmIEdFTk1BU0soMjcsIDE2KSkNCisNCisv KioNCisgKiBzdHJ1Y3QgbXRrX3BjaWVfbXNpIC0gTVNJIGluZm9ybWF0aW9uIGZvciBlYWNoIHNl dA0KKyAqIEBiYXNlOiBJTyBtYXBwZWQgcmVnaXN0ZXIgYmFzZQ0KKyAqIEBod2lycTogSGFyZHdh cmUgaW50ZXJydXB0IG51bWJlcg0KKyAqIEBpcnE6IE1TSSBzZXQgSW50ZXJydXB0IG51bWJlcg0K KyAqIEBpbmRleDogTVNJIHNldCBudW1iZXINCisgKiBAbXNnX2FkZHI6IE1TSSBtZXNzYWdlIGFk ZHJlc3MNCisgKiBAZG9tYWluOiBJUlEgZG9tYWluDQorICovDQorc3RydWN0IG10a19wY2llX21z aSB7DQorCXZvaWQgX19pb21lbSAqYmFzZTsNCisJaW50IGh3aXJxOw0KKwlpbnQgaXJxOw0KKwlp bnQgaW5kZXg7DQorCXBoeXNfYWRkcl90IG1zZ19hZGRyOw0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAq ZG9tYWluOw0KK307DQorDQorLyoqDQorICogc3RydWN0IG10a19wY2llX3BvcnQgLSBQQ0llIHBv cnQgaW5mb3JtYXRpb24NCisgKiBAZGV2OiBQQ0llIGRldmljZQ0KKyAqIEBiYXNlOiBJTyBtYXBw ZWQgcmVnaXN0ZXIgYmFzZQ0KKyAqIEByZWdfYmFzZTogUGh5c2ljYWwgcmVnaXN0ZXIgYmFzZQ0K KyAqIEBtYWNfcmVzZXQ6IG1hYyByZXNldCBjb250cm9sDQorICogQHBoeV9yZXNldDogcGh5IHJl c2V0IGNvbnRyb2wNCisgKiBAcGh5OiBQSFkgY29udHJvbGxlciBibG9jaw0KKyAqIEBjbGtzOiBQ Q0llIGNsb2Nrcw0KKyAqIEBudW1fY2xrczogUENJZSBjbG9ja3MgY291bnQgZm9yIHRoaXMgcG9y dA0KKyAqIEBpc19zdXNwZW5kZWQ6IGRldmljZSBzdXNwZW5kIHN0YXRlDQorICogQGlycTogUENJ ZSBjb250cm9sbGVyIGludGVycnVwdCBudW1iZXINCisgKiBAaW50eF9kb21haW46IGxlZ2FjeSBJ TlR4IElSUSBkb21haW4NCisgKiBAbXNpX2RvbWFpbjogTVNJIElSUSBkb21haW4NCisgKiBAbXNp X3RvcF9kb21haW46IE1TSSBJUlEgdG9wIGRvbWFpbg0KKyAqIEBtc2lfaW5mbzogTVNJIHNldHMg aW5mb3JtYXRpb24NCisgKiBAbG9jazogbG9jayBwcm90ZWN0aW5nIElSUSBiaXQgbWFwDQorICog QG1zaV9pcnFfaW5fdXNlOiBiaXQgbWFwIGZvciBhc3NpZ25lZCBNU0kgSVJRDQorICovDQorc3Ry dWN0IG10a19wY2llX3BvcnQgew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQorCXZvaWQgX19pb21l bSAqYmFzZTsNCisJcGh5c19hZGRyX3QgcmVnX2Jhc2U7DQorCXN0cnVjdCByZXNldF9jb250cm9s ICptYWNfcmVzZXQ7DQorCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlfcmVzZXQ7DQorCXN0cnVj dCBwaHkgKnBoeTsNCisJc3RydWN0IGNsayAqKmNsa3M7DQorCWludCBudW1fY2xrczsNCisJYm9v bCBpc19zdXNwZW5kZWQ7DQorDQorCWludCBpcnE7DQorCXN0cnVjdCBpcnFfZG9tYWluICppbnR4 X2RvbWFpbjsNCisJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQorCXN0cnVjdCBpcnFf ZG9tYWluICptc2lfdG9wX2RvbWFpbjsNCisJc3RydWN0IG10a19wY2llX21zaSAqKm1zaV9pbmZv Ow0KKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCisJREVDTEFSRV9CSVRNQVAobXNpX2lycV9pbl91c2Us IFBDSUVfTVNJX0lSUVNfTlVNKTsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmln X3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLA0KKwkJCQkgICAg aW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGJ1cy0+c3lzZGF0YTsNCisJaW50IGJ5dGVzOw0KKw0KKwlieXRlcyA9ICgoMSA8 PCBzaXplKSAtIDEpIDw8ICh3aGVyZSAmIDB4Myk7DQorCXdyaXRlbChQQ0lFX0NGR19IRUFERVJf Rk9SQ0VfQkUoZGV2Zm4sIGJ1cy0+bnVtYmVyLCBieXRlcyksDQorCSAgICAgICBwb3J0LT5iYXNl ICsgUENJRV9DRkdOVU1fUkVHKTsNCisNCisJKnZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lF X0NGR19PRkZTRVRfQUREUiArICh3aGVyZSAmIH4weDMpKTsNCisNCisJaWYgKHNpemUgPD0gMikN CisJCSp2YWwgPSAoKnZhbCA+PiAoOCAqICh3aGVyZSAmIDB4MykpKSAmICgoMSA8PCAoc2l6ZSAq IDgpKSAtIDEpOw0KKw0KKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KK30NCisNCitzdGF0 aWMgaW50IG10a19wY2llX2NvbmZpZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25l ZCBpbnQgZGV2Zm4sDQorCQkJCSAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCit7 DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KKwlpbnQgYnl0 ZXM7DQorDQorCWJ5dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJlICYgMHgzKTsNCisJ d3JpdGVsKFBDSUVfQ0ZHX0hFQURFUl9GT1JDRV9CRShkZXZmbiwgYnVzLT5udW1iZXIsIGJ5dGVz KSwNCisJICAgICAgIHBvcnQtPmJhc2UgKyBQQ0lFX0NGR05VTV9SRUcpOw0KKw0KKwlpZiAoc2l6 ZSA8PSAyKQ0KKwkJdmFsID0gKHZhbCAmICgoMSA8PCAoc2l6ZSAqIDgpKSAtIDEpKSA8PCAoKHdo ZXJlICYgMHgzKSAqIDgpOw0KKw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9DRkdf T0ZGU0VUX0FERFIgKyAod2hlcmUgJiB+MHgzKSk7DQorDQorCXJldHVybiBQQ0lCSU9TX1NVQ0NF U1NGVUw7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtdGtfcGNpZV9vcHMgPSB7DQor CS5yZWFkICA9IG10a19wY2llX2NvbmZpZ19yZWFkLA0KKwkud3JpdGUgPSBtdGtfcGNpZV9jb25m aWdfd3JpdGUsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9zZXRfdHJhbnNfd2luZG93 KHZvaWQgX19pb21lbSAqcmVnLA0KKwkJCQkgICAgICByZXNvdXJjZV9zaXplX3QgY3B1X2FkZHIs DQorCQkJCSAgICAgIHJlc291cmNlX3NpemVfdCBwY2lfYWRkciwgc2l6ZV90IHNpemUpDQorew0K Kwl3cml0ZWwobG93ZXJfMzJfYml0cyhjcHVfYWRkcikgfCBBVFJfU0laRShmbHMoc2l6ZSkgLSAx KSB8IEFUUl9FTiwgcmVnKTsNCisJd3JpdGVsKHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLCByZWcg KyBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUKTsNCisJd3JpdGVsKGxvd2VyXzMyX2JpdHMo cGNpX2FkZHIpLCByZWcgKyBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09GRlNFVCk7DQorCXdyaXRl bCh1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwgcmVnICsgUENJRV9BVFJfVFJTTF9BRERSX01TQl9P RkZTRVQpOw0KKwl3cml0ZWwoQVRSX0lEKDApIHwgQVRSX1BBUkFNKDApLCByZWcgKyBQQ0lFX0FU Ul9UUlNMX1BBUkFNX09GRlNFVCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0X3Ry YW5zX3RhYmxlKHZvaWQgX19pb21lbSAqcmVnLA0KKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IGNw dV9hZGRyLA0KKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRyLCBzaXplX3Qgc2l6ZSwN CisJCQkJICAgIGludCBudW0pDQorew0KKwl2b2lkIF9faW9tZW0gKnRhYmxlX2Jhc2U7DQorDQor CWlmIChudW0gPiBQQ0lFX01BWF9UUkFOU19UQUJMRVMpDQorCQlyZXR1cm4gLUVOT0RFVjsNCisN CisJdGFibGVfYmFzZSA9IHJlZyArIG51bSAqIFBDSUVfQVRSX1RMQl9TRVRfT0ZGU0VUOw0KKwlt dGtfcGNpZV9zZXRfdHJhbnNfd2luZG93KHRhYmxlX2Jhc2UsIGNwdV9hZGRyLCBwY2lfYWRkciwg c2l6ZSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX3N0YXJ0 dXBfcG9ydChzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCXN0cnVjdCByZXNvdXJj ZV9lbnRyeSAqZW50cnk7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9z dF9icmlkZ2VfZnJvbV9wcml2KHBvcnQpOw0KKwl1MzIgdmFsOw0KKwlpbnQgZXJyID0gMCwgdGFi bGVfaW5kZXggPSAwOw0KKw0KKwkvKiBTZXQgYXMgUkMgbW9kZSAqLw0KKwl2YWwgPSByZWFkbChw b3J0LT5iYXNlICsgUENJRV9TRVRUSU5HX1JFRyk7DQorCXZhbCB8PSBQQ0lFX1JDX01PREU7DQor CXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsNCisNCisJLyogU2V0 IGNsYXNzIGNvZGUgKi8NCisJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUENJX0lEU18x KTsNCisJdmFsICY9IH5HRU5NQVNLKDMxLCA4KTsNCisJdmFsIHw9IFBDSV9DTEFTUyhQQ0lfQ0xB U1NfQlJJREdFX1BDSSA8PCA4KTsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUENJ X0lEU18xKTsNCisNCisJLyogQXNzZXJ0IGFsbCByZXNldCBzaWduYWxzICovDQorCXZhbCA9IHJl YWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQorCXZhbCB8PSBQQ0lFX01BQ19S U1RCIHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJHX1JTVEIgfCBQQ0lFX1BFX1JTVEI7DQorCXdy aXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7DQorDQorCS8qIERlLWFz c2VydCByZXNldCBzaWduYWxzKi8NCisJdmFsICY9IH4oUENJRV9NQUNfUlNUQiB8IFBDSUVfUEhZ X1JTVEIgfCBQQ0lFX0JSR19SU1RCKTsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVf UlNUX0NUUkxfUkVHKTsNCisNCisJdXNsZWVwX3JhbmdlKDEwMCAqIDEwMDAsIDEyMCAqIDEwMDAp Ow0KKw0KKwkvKiBEZS1hc3NlcnQgcGUgcmVzZXQqLw0KKwl2YWwgJj0gflBDSUVfUEVfUlNUQjsN CisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCisNCisJLyog Q2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQorCWVyciA9IHJlYWRsX3BvbGxfdGlt ZW91dChwb3J0LT5iYXNlICsgUENJRV9MSU5LX1NUQVRVU19SRUcsIHZhbCwNCisJCQkhISh2YWwg JiBQQ0lFX1BPUlRfTElOS1VQKSwgMjAsDQorCQkJNTAgKiBVU0VDX1BFUl9NU0VDKTsNCisJaWYg KGVycikNCisJCXJldHVybiBlcnI7DQorDQorCS8qIFNldCBQQ0llIHRyYW5zbGF0aW9uIHdpbmRv d3MgKi8NCisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmhvc3QtPndpbmRv d3MpIHsNCisJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUoZW50cnktPnJlcyk7 DQorCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7DQorCQlyZXNvdXJjZV9zaXplX3QgY3B1 X2FkZHI7DQorCQlyZXNvdXJjZV9zaXplX3QgcGNpX2FkZHI7DQorDQorCQlpZiAoISh0eXBlICYg KElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9JTykpKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJ cmVzID0gZW50cnktPnJlczsNCisJCWNwdV9hZGRyID0gcmVzLT5zdGFydDsNCisJCXBjaV9hZGRy ID0gcmVzLT5zdGFydCAtIGVudHJ5LT5vZmZzZXQ7DQorCQltdGtfcGNpZV9zZXRfdHJhbnNfdGFi bGUocG9ydC0+YmFzZSArIFBDSUVfVFJBTlNfVEFCTEVfQkFTRV9SRUcsDQorCQkJCQkgY3B1X2Fk ZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcyksDQorCQkJCQkgdGFibGVfaW5kZXgpOw0K Kw0KKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXQgJXMgdHJhbnMgd2luZG93WyVkXTogY3B1X2Fk ZHIgPSAlI2xseCwgcGNpX2FkZHIgPSAlI2xseCwgc2l6ZSA9ICUjbGx4XG4iLA0KKwkJCSghISh0 eXBlICYgSU9SRVNPVVJDRV9NRU0pID8gIk1FTSIgOiAiSU8iKSwgdGFibGVfaW5kZXgsDQorCQkJ Y3B1X2FkZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcykpOw0KKw0KKwkJdGFibGVfaW5k ZXgrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3Qg bXRrX3BjaWVfbXNpICptdGtfZ2V0X21zaV9pbmZvKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0 LA0KKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaHdpcnEpDQorew0KKwlyZXR1cm4gcG9ydC0+bXNp X2luZm9baHdpcnEgLyBQQ0lFX01TSV9JUlFTX1BFUl9TRVRdOw0KK30NCisNCitzdGF0aWMgaW50 IG10a19wY2llX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsDQorCQkJCSBjb25z dCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkNCit7DQorCXN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCBy ZXQ7DQorDQorCXJldCA9IGlycV9zZXRfYWZmaW5pdHlfaGludChwb3J0LT5pcnEsIG1hc2spOw0K KwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXJxX2RhdGFfdXBkYXRlX2VmZmVjdGl2 ZV9hZmZpbml0eShkYXRhLCBtYXNrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIG10a19jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNp X21zZyAqbXNnKQ0KK3sNCisJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQorCXN0cnVj dCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7 DQorDQorCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQor DQorCW1zZy0+YWRkcmVzc19oaSA9IDA7DQorCW1zZy0+YWRkcmVzc19sbyA9IGxvd2VyXzMyX2Jp dHMobXNpX2luZm8tPm1zZ19hZGRyKTsNCisNCisJbXNnLT5kYXRhID0gZGF0YS0+aHdpcnE7DQor CWRldl9kYmcocG9ydC0+ZGV2LCAibXNpIyUjbHggYWRkcmVzc19oaSAlI3ggYWRkcmVzc19sbyAl I3ggZGF0YSAlZFxuIiwNCisJCWRhdGEtPmh3aXJxLCBtc2ctPmFkZHJlc3NfaGksIG1zZy0+YWRk cmVzc19sbywgbXNnLT5kYXRhKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX21zaV9pcnFfYWNr KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9p bmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hp cF9kYXRhKGRhdGEpOw0KKwlpbnQgaHdpcnE7DQorDQorCW1zaV9pbmZvID0gbXRrX2dldF9tc2lf aW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQorDQorCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQQ0lF X01TSV9JUlFTX1BFUl9TRVQ7DQorDQorCXdyaXRlbCgxIDw8IGh3aXJxLCBtc2lfaW5mby0+YmFz ZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtfbXNp X2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9t c2kgKm1zaV9pbmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dl dF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgdmFsOw0KKw0KKwltc2lfaW5mbyA9IG10a19n ZXRfbXNpX2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KKwl2YWwgPSByZWFkbChtc2lfaW5mby0+ YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl2YWwgJj0gfigxIDw8IGRhdGEtPmh3 aXJxKTsNCisJd3JpdGVsKHZhbCwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9FTkFCTEVfT0ZG U0VUKTsNCisNCisJcGNpX21zaV9tYXNrX2lycShkYXRhKTsNCit9DQorDQorc3RhdGljIHZvaWQg bXRrX21zaV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBt dGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGly cV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgdmFsOw0KKw0KKwltc2lfaW5m byA9IG10a19nZXRfbXNpX2luZm8ocG9ydCwgZGF0YS0+aHdpcnEpOw0KKwl2YWwgPSByZWFkbCht c2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl2YWwgfD0gKDEgPDwg ZGF0YS0+aHdpcnEpOw0KKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VO QUJMRV9PRkZTRVQpOw0KKw0KKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7DQorfQ0KKw0KK3N0 YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV9pcnFfY2hpcCA9IHsNCisJLmlycV9hY2sJCT0g bXRrX21zaV9pcnFfYWNrLA0KKwkuaXJxX2NvbXBvc2VfbXNpX21zZwk9IG10a19jb21wb3NlX21z aV9tc2csDQorCS5pcnFfbWFzawkJPSBtdGtfbXNpX2lycV9tYXNrLA0KKwkuaXJxX3VubWFzawkJ PSBtdGtfbXNpX2lycV91bm1hc2ssDQorCS5pcnFfc2V0X2FmZmluaXR5CT0gbXRrX3BjaWVfc2V0 X2FmZmluaXR5LA0KKwkubmFtZQkJCT0gIlBDSWUiLA0KK307DQorDQorc3RhdGljIGlycV9od19u dW1iZXJfdCBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmlu Zm8sDQorCQkJCQkgICAgICBtc2lfYWxsb2NfaW5mb190ICphcmcpDQorew0KKwlzdHJ1Y3QgbXNp X2Rlc2MgKmVudHJ5ID0gYXJnLT5kZXNjOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9 IGluZm8tPmNoaXBfZGF0YTsNCisJaW50IGh3aXJxOw0KKw0KKwltdXRleF9sb2NrKCZwb3J0LT5s b2NrKTsNCisNCisJaHdpcnEgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihwb3J0LT5tc2lfaXJx X2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0sDQorCQkJb3JkZXJfYmFzZV8yKGVudHJ5LT5udmVj X3VzZWQpKTsNCisJaWYgKGh3aXJxIDwgMCkgew0KKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2Nr KTsNCisJCXJldHVybiAtRU5PU1BDOw0KKwl9DQorDQorCW11dGV4X3VubG9jaygmcG9ydC0+bG9j ayk7DQorDQorCXJldHVybiBod2lycTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNp X2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCisJCQkgICAgICBzdHJ1Y3QgbXNpX2Rv bWFpbl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgdmlycSkNCit7DQorCXN0cnVjdCBpcnFfZGF0 YSAqZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQorCXN0cnVj dCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7 DQorDQorCW11dGV4X2xvY2soJnBvcnQtPmxvY2spOw0KKw0KKwliaXRtYXBfY2xlYXIocG9ydC0+ bXNpX2lycV9pbl91c2UsIGRhdGEtPmh3aXJxLCAxKTsNCisNCisJbXV0ZXhfdW5sb2NrKCZwb3J0 LT5sb2NrKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX29wcyBtdGtfbXNpX2Rv bWFpbl9vcHMgPSB7DQorCS5nZXRfaHdpcnEJPSBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxLA0KKwku bXNpX2ZyZWUJPSBtdGtfcGNpZV9tc2lfZnJlZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbXNp X2RvbWFpbl9pbmZvIG10a19tc2lfZG9tYWluX2luZm8gPSB7DQorCS5mbGFncwkJPSAoTVNJX0ZM QUdfVVNFX0RFRl9ET01fT1BTIHwgTVNJX0ZMQUdfUENJX01TSVggfA0KKwkJCSAgIE1TSV9GTEFH X1VTRV9ERUZfQ0hJUF9PUFMgfCBNU0lfRkxBR19NVUxUSV9QQ0lfTVNJKSwNCisJLmNoaXAJCT0g Jm10a19tc2lfaXJxX2NoaXAsDQorCS5vcHMJCT0gJm10a19tc2lfZG9tYWluX29wcywNCisJLmhh bmRsZXIJPSBoYW5kbGVfZWRnZV9pcnEsDQorCS5oYW5kbGVyX25hbWUJPSAiTVNJIiwNCit9Ow0K Kw0KK3N0YXRpYyB2b2lkIG10a19tc2lfdG9wX2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkYXRh KQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2No aXBfZGF0YShkYXRhKTsNCisJaW50IG1zaV9pcnEgPSBkYXRhLT5od2lycSArIFBDSUVfTVNJX1NI SUZUOw0KKw0KKwl3cml0ZWwoMSA8PCBtc2lfaXJxLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RB VFVTX1JFRyk7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV90b3BfaXJx X2NoaXAgPSB7DQorCS5pcnFfYWNrCT0gbXRrX21zaV90b3BfaXJxX2FjaywNCisJLm5hbWUJCT0g IlBDSWUiLA0KK307DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNpX2hhbmRsZXIoc3RydWN0 IGlycV9kZXNjICpkZXNjKQ0KK3sNCisJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm8gPSBp cnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0KKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNo aXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsNCisJdW5zaWduZWQgbG9uZyBtc2lfZW5hYmxl LCBtc2lfc3RhdHVzOw0KKwl1MzIgdmlycSwgYml0LCBod2lycTsNCisNCisJcmF3X3NwaW5fbG9j aygmZGVzYy0+bG9jayk7DQorDQorCW1zaV9lbmFibGUgPSByZWFkbChtc2lfaW5mby0+YmFzZSAr IFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KKwl3aGlsZSAoKG1zaV9zdGF0dXMgPSByZWFkbCht c2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX1NUQVRVU19PRkZTRVQpKSkgew0KKwkJbXNpX3N0YXR1 cyAmPSBtc2lfZW5hYmxlOw0KKwkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZtc2lfc3RhdHVzLCBQ Q0lFX01TSV9JUlFTX1BFUl9TRVQpIHsNCisJCQlod2lycSA9IGJpdCArIG1zaV9pbmZvLT5pbmRl eCAqIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsNCisJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyht c2lfaW5mby0+ZG9tYWluLCBod2lycSk7DQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0K KwkJfQ0KKwl9DQorDQorCWlycWNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsNCisNCisJ cmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsNCit9DQorDQorc3RhdGljIGludCBtdGtfbXNp X3RvcF9kb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQorCQkJCSAgICB1bnNp Z25lZCBpbnQgdmlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0KK3sNCisJc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQgPSBkb21haW4tPmhvc3RfZGF0YTsNCisJc3RydWN0IG10a19wY2llX21z aSAqbXNpX2luZm8gPSBwb3J0LT5tc2lfaW5mb1tod2lycV07DQorDQorCWlycV9kb21haW5fc2V0 X2luZm8oZG9tYWluLCB2aXJxLCBod2lycSwNCisJCQkgICAgJm10a19tc2lfdG9wX2lycV9jaGlw LCBkb21haW4tPmhvc3RfZGF0YSwNCisJCQkgICAgbXRrX3BjaWVfbXNpX2hhbmRsZXIsIG1zaV9p bmZvLCBOVUxMKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aXJxX2RvbWFpbl9vcHMgbXRrX21zaV90b3BfZG9tYWluX29wcyA9IHsNCisJLm1hcCA9IG10a19t c2lfdG9wX2RvbWFpbl9tYXAsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtdGtfaW50eF9hY2soc3Ry dWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBp cnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCisJaW50IGh3aXJxOw0KKw0KKwlod2ly cSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KKwl3cml0ZWwoMSA8PCBod2lycSwg cG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBt dGtfaW50eF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCit7DQorCXN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCB2 YWw7DQorDQorCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsN CisJdmFsICY9IH4oMSA8PCAoZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQpKTsNCisJd3Jp dGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KK30NCisNCitzdGF0 aWMgdm9pZCBtdGtfaW50eF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRh KTsNCisJaW50IHZhbCwgaHdpcnE7DQorDQorCS8qKg0KKwkgKiBBcyBhbiBlbXVsYXRlZCBsZXZl bCBpcnEsIHRoaXMgaW50ZXJydXB0IHN0YXR1cyB3aWxsIGJlIHJlbWFpbmVkDQorCSAqIHVudGls IHJlY2VpdmUgdGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZSBvZiBkZS1hc3NlcnQsIGhlbmNlIHRo YXQNCisJICogdGhlIHN0YXR1cyBjYW4gb25seSBiZSBjbGVhcmVkIGF0IHRoaXMgcG9pbnQuDQor CSAqLw0KKwlod2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KKwl3cml0ZWwo MSA8PCBod2lycSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOw0KKw0KKwl2YWwg PSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQorCXZhbCB8PSAxIDw8 IChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElGVCk7DQorCXdyaXRlbCh2YWwsIHBvcnQtPmJh c2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpcnFfY2hp cCBtdGtfaW50eF9pcnFfY2hpcCA9IHsNCisJLmlycV9hY2sJCT0gbXRrX2ludHhfYWNrLA0KKwku aXJxX21hc2sJCT0gbXRrX2ludHhfbWFzaywNCisJLmlycV91bm1hc2sJCT0gbXRrX2ludHhfdW5t YXNrLA0KKwkuaXJxX3NldF9hZmZpbml0eQk9IG10a19wY2llX3NldF9hZmZpbml0eSwNCisJLm5h bWUJCQk9ICJQQ0llIiwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW50eF9tYXAoc3Ry dWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwNCisJCQkgICAgIGlycV9o d19udW1iZXJfdCBod2lycSkNCit7DQorCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGly cSwgJm10a19pbnR4X2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxLA0KKwkJCQkgICAgICAiSU5U eCIpOw0KKwlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi0+aG9zdF9kYXRhKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgaW50 eF9kb21haW5fb3BzID0gew0KKwkubWFwID0gbXRrX3BjaWVfaW50eF9tYXAsDQorfTsNCisNCitz dGF0aWMgaW50IG10a19wY2llX2luaXRfaXJxX2RvbWFpbnMoc3RydWN0IG10a19wY2llX3BvcnQg KnBvcnQsDQorCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0 IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmludGNfbm9k ZTsNCisJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IG9mX25vZGVfdG9fZndub2RlKG5v ZGUpOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCisJc3RydWN0IG1zaV9kb21h aW5faW5mbyAqaW5mbzsNCisJaW50IGksIHZhbCwgcmV0Ow0KKw0KKwkvKiBTZXR1cCBJTlR4ICov DQorCWludGNfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5vZGUsICJsZWdhY3ktaW50ZXJy dXB0LWNvbnRyb2xsZXIiKTsNCisJaWYgKCFpbnRjX25vZGUpIHsNCisJCWRldl9ub3RpY2UoZGV2 LCAiTWlzc2luZyBQQ0llIEludGMgbm9kZVxuIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0K Kw0KKwlwb3J0LT5pbnR4X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihpbnRjX25vZGUs IFBDSV9OVU1fSU5UWCwNCisJCQkJCQkgICZpbnR4X2RvbWFpbl9vcHMsIHBvcnQpOw0KKwlpZiAo IXBvcnQtPmludHhfZG9tYWluKSB7DQorCQlkZXZfbm90aWNlKGRldiwgImZhaWxlZCB0byBnZXQg SU5UeCBJUlEgZG9tYWluXG4iKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCS8qIFNl dHVwIE1TSSAqLw0KKwltdXRleF9pbml0KCZwb3J0LT5sb2NrKTsNCisNCisJaW5mbyA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWluZm8pDQor CQlyZXR1cm4gLUVOT01FTTsNCisNCisJbWVtY3B5KGluZm8sICZtdGtfbXNpX2RvbWFpbl9pbmZv LCBzaXplb2YoKmluZm8pKTsNCisJaW5mby0+Y2hpcF9kYXRhID0gcG9ydDsNCisNCisJcG9ydC0+ bXNpX2RvbWFpbiA9IHBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4oZndub2RlLCBpbmZvLCBOVUxM KTsNCisJaWYgKCFwb3J0LT5tc2lfZG9tYWluKSB7DQorCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQg dG8gY3JlYXRlIG1zaSBkb21haW5cbiIpOw0KKwkJcmV0ID0gLUVOT0RFVjsNCisJCWdvdG8gZXJy X21zaV9kb21haW47DQorCX0NCisNCisJLyogRW5hYmxlIE1TSSBhbmQgc2V0dXAgcGNpZSBkb21h aW5zICovDQorCXBvcnQtPm1zaV90b3BfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfaGllcmFyY2h5 KE5VTEwsIDAsIDAsIG5vZGUsDQorCQkJCQkJCSZtdGtfbXNpX3RvcF9kb21haW5fb3BzLA0KKwkJ CQkJCQlwb3J0KTsNCisJaWYgKCFwb3J0LT5tc2lfdG9wX2RvbWFpbikgew0KKwkJZGV2X2luZm8o ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtc2kgdG9wIGRvbWFpblxuIik7DQorCQlyZXQgPSAtRU5P REVWOw0KKwkJZ290byBlcnJfbXNpX3RvcF9kb21haW47DQorCX0NCisNCisJcG9ydC0+bXNpX2lu Zm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBQQ0lFX01TSV9TRVRfTlVNLCBHRlBfS0VSTkVMKTsNCisJ aWYgKCFwb3J0LT5tc2lfaW5mbykgew0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWdvdG8gZXJyX21z aV9pbmZvOw0KKwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBQQ0lFX01TSV9TRVRfTlVNOyBpKysp IHsNCisJCWludCBvZmZzZXQgPSBpICogUENJRV9NU0lfU0VUX09GRlNFVDsNCisNCisJCW1zaV9p bmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptc2lfaW5mbyksIEdGUF9LRVJORUwpOw0K KwkJaWYgKCFtc2lfaW5mbykgew0KKwkJCXJldCA9IC1FTk9NRU07DQorCQkJZ290byBlcnJfbXNp X3NldDsNCisJCX0NCisNCisJCW1zaV9pbmZvLT5iYXNlID0gcG9ydC0+YmFzZSArIFBDSUVfTVNJ X0FERFJfQkFTRV9SRUcgKyBvZmZzZXQ7DQorCQltc2lfaW5mby0+bXNnX2FkZHIgPSBwb3J0LT5y ZWdfYmFzZSArIFBDSUVfTVNJX0FERFJfQkFTRV9SRUcgKw0KKwkJCQkgICAgIG9mZnNldDsNCisN CisJCXdyaXRlbChsb3dlcl8zMl9iaXRzKG1zaV9pbmZvLT5tc2dfYWRkciksIG1zaV9pbmZvLT5i YXNlKTsNCisNCisJCW1zaV9pbmZvLT5od2lycSA9IGk7DQorCQltc2lfaW5mby0+aW5kZXggPSBp Ow0KKwkJbXNpX2luZm8tPmRvbWFpbiA9IHBvcnQtPm1zaV9kb21haW47DQorDQorCQlwb3J0LT5t c2lfaW5mb1tpXSA9IG1zaV9pbmZvOw0KKw0KKwkJLyogQWxsb2MgaXJxIGZvciBlYWNoIG1zaSBz ZXQgKi8NCisJCW1zaV9pbmZvLT5pcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcocG9ydC0+bXNpX3Rv cF9kb21haW4sIGkpOw0KKwkJaWYgKG1zaV9pbmZvLT5pcnEgPCAwKSB7DQorCQkJZGV2X2luZm8o ZGV2LCAiYWxsb2NhdGUgbXNpIHRvcCBpcnEgZmFpbGVkXG4iKTsNCisJCQlyZXQgPSAtRU5PU1BD Ow0KKwkJCWdvdG8gZXJyX21zaV9zZXQ7DQorCQl9DQorDQorCQl2YWwgPSByZWFkbChwb3J0LT5i YXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQorCQl2YWwgfD0gKDEgPDwgKGkgKyBQQ0lFX01T SV9TSElGVCkpOw0KKwkJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9S RUcpOw0KKw0KKwkJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfTVNJX1NFVF9FTkFCTEVf UkVHKTsNCisJCXZhbCB8PSAoMSA8PCBpKTsNCisJCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQ Q0lFX01TSV9TRVRfRU5BQkxFX1JFRyk7DQorCX0NCisNCisJcmV0dXJuIDA7DQorDQorZXJyX21z aV9zZXQ6DQorCXdoaWxlICgtLWkgPj0gMCkgew0KKwkJbXNpX2luZm8gPSBwb3J0LT5tc2lfaW5m b1tpXTsNCisJCWlycV9kaXNwb3NlX21hcHBpbmcobXNpX2luZm8tPmlycSk7DQorCX0NCitlcnJf bXNpX2luZm86DQorCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPm1zaV90b3BfZG9tYWluKTsNCitl cnJfbXNpX3RvcF9kb21haW46DQorCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPm1zaV9kb21haW4p Ow0KK2Vycl9tc2lfZG9tYWluOg0KKwlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFp bik7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV90 ZWFyZG93bihzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCWlycV9zZXRfY2hhaW5l ZF9oYW5kbGVyX2FuZF9kYXRhKHBvcnQtPmlycSwgTlVMTCwgTlVMTCk7DQorDQorCWlmIChwb3J0 LT5pbnR4X2RvbWFpbikNCisJCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPmludHhfZG9tYWluKTsN CisNCisJaWYgKHBvcnQtPm1zaV9kb21haW4pDQorCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5t c2lfZG9tYWluKTsNCisNCisJaWYgKHBvcnQtPm1zaV90b3BfZG9tYWluKQ0KKwkJaXJxX2RvbWFp bl9yZW1vdmUocG9ydC0+bXNpX3RvcF9kb21haW4pOw0KKw0KKwlpcnFfZGlzcG9zZV9tYXBwaW5n KHBvcnQtPmlycSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV9oYW5kbGVyKHN0 cnVjdCBpcnFfZGVzYyAqZGVzYykNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g aXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCisJc3RydWN0IGlycV9jaGlwICppcnFj aGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7DQorCXVuc2lnbmVkIGxvbmcgc3RhdHVzOw0K Kwl1MzIgdmlycTsNCisJdTMyIGlycV9iaXQgPSBQQ0lFX0lOVFhfU0hJRlQ7DQorDQorCWNoYWlu ZWRfaXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOw0KKw0KKwlzdGF0dXMgPSByZWFkbChwb3J0LT5i YXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7DQorCWlmIChzdGF0dXMgJiBQQ0lFX0lOVFhfTUFT Sykgew0KKwkJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGlycV9iaXQsICZzdGF0dXMsIFBDSV9OVU1f SU5UWCArDQorCQkJCSAgICAgIFBDSUVfSU5UWF9TSElGVCkgew0KKwkJCXZpcnEgPSBpcnFfZmlu ZF9tYXBwaW5nKHBvcnQtPmludHhfZG9tYWluLA0KKwkJCQkJCWlycV9iaXQgLSBQQ0lFX0lOVFhf U0hJRlQpOw0KKwkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsNCisJCX0NCisJfQ0KKw0KKwlp ZiAoc3RhdHVzICYgUENJRV9NU0lfTUFTSykgew0KKwkJaXJxX2JpdCA9IFBDSUVfTVNJX1NISUZU Ow0KKwkJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGlycV9iaXQsICZzdGF0dXMsIFBDSUVfTVNJX1NF VF9OVU0gKw0KKwkJCQkgICAgICBQQ0lFX01TSV9TSElGVCkgew0KKwkJCXZpcnEgPSBpcnFfZmlu ZF9tYXBwaW5nKHBvcnQtPm1zaV90b3BfZG9tYWluLA0KKwkJCQkJCWlycV9iaXQgLSBQQ0lFX01T SV9TSElGVCk7DQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0KKwkJfQ0KKwl9DQorDQor CWNoYWluZWRfaXJxX2V4aXQoaXJxY2hpcCwgZGVzYyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRr X3BjaWVfc2V0dXBfaXJxKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0LA0KKwkJCSAgICAgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQt PmRldjsNCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2Rldmlj ZShkZXYpOw0KKwlpbnQgZXJyOw0KKw0KKwllcnIgPSBtdGtfcGNpZV9pbml0X2lycV9kb21haW5z KHBvcnQsIG5vZGUpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRldiwgImZhaWxlZCB0 byBpbml0IFBDSWUgSVJRIGRvbWFpblxuIik7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXBv cnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQorCWlmIChwb3J0LT5pcnEgPCAw KQ0KKwkJcmV0dXJuIHBvcnQtPmlycTsNCisNCisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5k X2RhdGEocG9ydC0+aXJxLCBtdGtfcGNpZV9pcnFfaGFuZGxlciwgcG9ydCk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX2Nsa19pbml0KHN0cnVjdCBtdGtfcGNp ZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0KKwlpbnQgaTsNCisNCisJcG9y dC0+bnVtX2Nsa3MgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQorCWlmIChwb3J0LT5u dW1fY2xrcyA9PSAwKSB7DQorCQlkZXZfbm90aWNlKGRldiwgInBjaWUgY2xvY2sgaXMgbm90IGZv dW5kXG4iKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXBvcnQtPmNsa3MgPSBkZXZt X2t6YWxsb2MoZGV2LCBwb3J0LT5udW1fY2xrcywgR0ZQX0tFUk5FTCk7DQorCWlmICghcG9ydC0+ Y2xrcykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVt X2Nsa3M7IGkrKykgew0KKwkJc3RydWN0IGNsayAgICAgICpjbGs7DQorCQlpbnQgICAgICAgICAg ICAgcmV0Ow0KKw0KKwkJY2xrID0gb2ZfY2xrX2dldChucCwgaSk7DQorCQlpZiAoSVNfRVJSKGNs aykpIHsNCisJCQl3aGlsZSAoLS1pID49IDApDQorCQkJCWNsa19wdXQocG9ydC0+Y2xrc1tpXSk7 DQorCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsNCisJCX0NCisNCisJCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShjbGspOw0KKwkJaWYgKHJldCA8IDApIHsNCisJCQl3aGlsZSAoLS1pID49IDApIHsN CisJCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0pOw0KKwkJCQljbGtfcHV0 KHBvcnQtPmNsa3NbaV0pOw0KKwkJCX0NCisJCQljbGtfcHV0KGNsayk7DQorDQorCQkJcmV0dXJu IHJldDsNCisJCX0NCisNCisJCXBvcnQtPmNsa3NbaV0gPSBjbGs7DQorCX0NCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfZGlzYWJsZV9jbGsoc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQpDQorew0KKwlpbnQgaTsNCisNCisJaWYgKHBvcnQtPm51bV9jbGtzID09 IDApDQorCQlyZXR1cm4gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9jbGtzOyBp KyspIHsNCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwb3J0LT5jbGtzW2ldKTsNCisJCWNsa19w dXQocG9ydC0+Y2xrc1tpXSk7DQorCX0NCisNCisJcG9ydC0+bnVtX2Nsa3MgPSAwOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfcGNpZV9wb3dlcl91cChzdHJ1Y3QgbXRr X3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsN CisJaW50IGVycjsNCisNCisJcG9ydC0+cGh5X3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dl dF9vcHRpb25hbChkZXYsICJwaHktcnN0Iik7DQorCWlmIChQVFJfRVJSKHBvcnQtPnBoeV9yZXNl dCkgPT0gLUVQUk9CRV9ERUZFUikNCisJCXJldHVybiBQVFJfRVJSKHBvcnQtPnBoeV9yZXNldCk7 DQorDQorCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocG9ydC0+cGh5X3Jlc2V0KTsNCisNCisJLyog cGh5IHBvd2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAqLw0KKwlwb3J0LT5waHkgPSBkZXZt X3BoeV9vcHRpb25hbF9nZXQoZGV2LCAicGNpZS1waHkiKTsNCisJaWYgKElTX0VSUihwb3J0LT5w aHkpKQ0KKwkJcG9ydC0+cGh5ID0gTlVMTDsNCisNCisJZXJyID0gcGh5X2luaXQocG9ydC0+cGh5 KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGljZShkZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBwY2llIHBoeVxuIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwllcnIgPSBwaHlf cG93ZXJfb24ocG9ydC0+cGh5KTsNCisJaWYgKGVycikgew0KKwkJZGV2X25vdGljZShkZXYsICJm YWlsZWQgdG8gcG93ZXIgb24gcGNpZSBwaHlcbiIpOw0KKwkJZ290byBlcnJfcGh5X29uOw0KKwl9 DQorDQorCXBvcnQtPm1hY19yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWwo ZGV2LCAibWFjLXJzdCIpOw0KKwlpZiAoUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpID09IC1FUFJP QkVfREVGRVIpDQorCQlyZXR1cm4gUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpOw0KKw0KKwlyZXNl dF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7DQorDQorCS8qIG1hYyBwb3dlciBv biBhbmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVyIGNsb2NrcyAqLw0KKwlwbV9ydW50aW1lX2Vu YWJsZShkZXYpOw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7DQorDQorCWVyciA9IG10a19w Y2llX2Nsa19pbml0KHBvcnQpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRldiwgImNs b2NrIGluaXQgZmFpbGVkXG4iKTsNCisJCWdvdG8gZXJyX2Nsa19pbml0Ow0KKwl9DQorDQorCXJl dHVybiAwOw0KKw0KK2Vycl9jbGtfaW5pdDoNCisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOw0K KwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsNCisJcmVzZXRfY29udHJvbF9hc3NlcnQocG9ydC0+ bWFjX3Jlc2V0KTsNCisJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KK2Vycl9waHlfb246DQor CXBoeV9leGl0KHBvcnQtPnBoeSk7DQorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPnBoeV9y ZXNldCk7DQorDQorCXJldHVybiAtRUJVU1k7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10a19wY2ll X3Bvd2VyX2Rvd24oc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlwaHlfcG93ZXJf b2ZmKHBvcnQtPnBoeSk7DQorCXBoeV9leGl0KHBvcnQtPnBoeSk7DQorDQorCW10a19wY2llX2Rp c2FibGVfY2xrKHBvcnQpOw0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQtPmRldik7DQor CXBtX3J1bnRpbWVfZGlzYWJsZShwb3J0LT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50IG10a19w Y2llX3NldHVwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0IGRldmlj ZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRldik7DQorCXN0cnVjdCByZXNvdXJjZSAqcmVnczsNCisJaW50IGVy cjsNCisNCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNP VVJDRV9NRU0sICJwY2llLW1hYyIpOw0KKwlwb3J0LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgcmVncyk7DQorCWlmIChJU19FUlIocG9ydC0+YmFzZSkpIHsNCisJCWRldl9ub3Rp Y2UoZGV2LCAiZmFpbGVkIHRvIG1hcCByZWdpc3RlciBiYXNlXG4iKTsNCisJCXJldHVybiBQVFJf RVJSKHBvcnQtPmJhc2UpOw0KKwl9DQorDQorCXBvcnQtPnJlZ19iYXNlID0gcmVncy0+c3RhcnQ7 DQorDQorCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgYmVmb3JlIHBvd2Vy IHVwICovDQorCWVyciA9IG10a19wY2llX3Bvd2VyX3VwKHBvcnQpOw0KKwlpZiAoZXJyKQ0KKwkJ cmV0dXJuIGVycjsNCisNCisJZXJyID0gbXRrX3BjaWVfc2V0dXBfaXJxKHBvcnQsIGRldi0+b2Zf bm9kZSk7DQorCWlmIChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwkvKiBUcnkgbGluayB1cCAq Lw0KKwllcnIgPSBtdGtfcGNpZV9zdGFydHVwX3BvcnQocG9ydCk7DQorCWlmIChlcnIpIHsNCisJ CWRldl9ub3RpY2UoZGV2LCAiUENJZSBsaW5rIGRvd25cbiIpOw0KKwkJbXRrX3BjaWVfcG93ZXJf ZG93bihwb3J0KTsNCisJCXJldHVybiBlcnI7DQorCX0NCisNCisJZGV2X2luZm8oZGV2LCAiUENJ ZSBsaW5rIHVwIHN1Y2Nlc3MhXG4iKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbXRrX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpw b3J0Ow0KKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0Ow0KKwlpbnQgZXJyOw0KKw0KKwlo b3N0ID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9icmlkZ2UoZGV2LCBzaXplb2YoKnBvcnQpKTsNCisJ aWYgKCFob3N0KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXBvcnQgPSBwY2lfaG9zdF9icmlk Z2VfcHJpdihob3N0KTsNCisNCisJcG9ydC0+ZGV2ID0gZGV2Ow0KKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBwb3J0KTsNCisNCisJZXJyID0gbXRrX3BjaWVfc2V0dXAocG9ydCk7DQorCWlm IChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlob3N0LT5kZXYucGFyZW50ID0gcG9ydC0+ZGV2 Ow0KKwlob3N0LT5vcHMgPSAmbXRrX3BjaWVfb3BzOw0KKwlob3N0LT5zeXNkYXRhID0gcG9ydDsN CisNCisJZXJyID0gcGNpX2hvc3RfcHJvYmUoaG9zdCk7DQorCWlmIChlcnIpIHsNCisJCW10a19w Y2llX3Bvd2VyX2Rvd24ocG9ydCk7DQorCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsNCisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqaG9zdCA9IHBjaV9o b3N0X2JyaWRnZV9mcm9tX3ByaXYocG9ydCk7DQorDQorCXBjaV9zdG9wX3Jvb3RfYnVzKGhvc3Qt PmJ1cyk7DQorCXBjaV9yZW1vdmVfcm9vdF9idXMoaG9zdC0+YnVzKTsNCisNCisJbXRrX3BjaWVf aXJxX3RlYXJkb3duKHBvcnQpOw0KKwltdGtfcGNpZV9wb3dlcl9kb3duKHBvcnQpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV90dXJu X29mZl9saW5rKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJaW50IHZhbDsNCisN CisJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfSUNNRF9QTV9SRUcpOw0KKwl2YWwgfD0g UENJRV9UVVJOX09GRl9MSU5LOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JQ01E X1BNX1JFRyk7DQorDQorCS8qIENoZWNrIHRoZSBsaW5rIGlzIEwyICovDQorCXJldHVybiByZWFk bF9wb2xsX3RpbWVvdXQocG9ydC0+YmFzZSArIFBDSUVfTFRTU01fU1RBVFVTX1JFRywgdmFsLA0K KwkJCQkgIChQQ0lFX0xUU1NNX1NUQVRFKHZhbCkgPT0NCisJCQkJICAgUENJRV9MVFNTTV9TVEFU RV9MMl9JRExFKSwgMjAsDQorCQkJCSAgIDUwICogVVNFQ19QRVJfTVNFQyk7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbXRrX3BjaWVfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2 aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOw0KKwlpbnQgaSwgZXJyLCB2YWw7DQorDQorCWlmIChwb3J0LT5pc19zdXNwZW5k ZWQpDQorCQlyZXR1cm4gMDsNCisNCisJLyogVHJpZ2dlciBsaW5rIHRvIEwyIHN0YXRlICovDQor CWVyciA9IG10a19wY2llX3R1cm5fb2ZmX2xpbmsocG9ydCk7DQorCWlmIChlcnIpIHsNCisJCWRl dl9ub3RpY2UocG9ydC0+ZGV2LCAiY2FuIG5vdCBlbnRlciBMMiBzdGF0ZVxuIik7DQorCQlnb3Rv IHBvd2VyX29mZjsNCisJfQ0KKw0KKwkvKiBQdWxsIGRvd24gdGhlIFBFUlNUIyBwaW4gKi8NCisJ dmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCisJdmFsIHw9IFBD SUVfUEVfUlNUQjsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVH KTsNCisNCisJZGV2X2luZm8ocG9ydC0+ZGV2LCAiZW50ZXIgTDIgc3RhdGUgc3VjY2VzcyIpOw0K Kw0KK3Bvd2VyX29mZjoNCisJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KKw0KKwlmb3IgKGkg PSAwOyBpIDwgcG9ydC0+bnVtX2Nsa3M7IGkrKykNCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShw b3J0LT5jbGtzW2ldKTsNCisNCisJcG1fcnVudGltZV9wdXRfc3luYyhwb3J0LT5kZXYpOw0KKw0K Kwlwb3J0LT5pc19zdXNwZW5kZWQgPSB0cnVlOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmlj ZSAqZGV2KQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsNCisJaW50IGksIGVycjsNCisNCisJaWYgKCFwb3J0LT5pc19zdXNwZW5kZWQpDQor CQlyZXR1cm4gMDsNCisNCisJcGh5X3Bvd2VyX29uKHBvcnQtPnBoeSk7DQorDQorCXBtX3J1bnRp bWVfZ2V0X3N5bmMocG9ydC0+ZGV2KTsNCisNCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9j bGtzOyBpKyspIHsNCisJCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShwb3J0LT5jbGtzW2ldKTsN CisJCWlmIChlcnIgPCAwKSB7DQorCQkJd2hpbGUgKC0taSA+PSAwKQ0KKwkJCQljbGtfZGlzYWJs ZV91bnByZXBhcmUocG9ydC0+Y2xrc1tpXSk7DQorCQkJcmV0dXJuIGVycjsNCisJCX0NCisJfQ0K Kw0KKwllcnIgPSBtdGtfcGNpZV9zdGFydHVwX3BvcnQocG9ydCk7DQorCWlmIChlcnIpIHsNCisJ CWRldl9ub3RpY2UocG9ydC0+ZGV2LCAicmVzdW1lIGZhaWxlZFxuIik7DQorCQlyZXR1cm4gZXJy Ow0KKwl9DQorDQorCXBvcnQtPmlzX3N1c3BlbmRlZCA9IGZhbHNlOw0KKw0KKwlkZXZfaW5mbyhw b3J0LT5kZXYsICJyZXN1bWUgZG9uZVxuIik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXRrX3BjaWVfcG1fb3BzID0gew0KKwlTRVRfTk9J UlFfU1lTVEVNX1NMRUVQX1BNX09QUyhtdGtfcGNpZV9zdXNwZW5kX25vaXJxLA0KKwkJCQkgICAg ICBtdGtfcGNpZV9yZXN1bWVfbm9pcnEpDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBtdGtfcGNpZV9vZl9tYXRjaFtdID0gew0KKwl7IC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLGdlbjMtcGNpZSIgfSwNCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxOTIt cGNpZSIgfSwNCisJe30sDQorfTsNCisNCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBt dGtfcGNpZV9kcml2ZXIgPSB7DQorCS5wcm9iZSA9IG10a19wY2llX3Byb2JlLA0KKwkucmVtb3Zl ID0gbXRrX3BjaWVfcmVtb3ZlLA0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAibXRrLXBjaWUi LA0KKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX3BjaWVfb2ZfbWF0Y2gsDQorCQkuc3VwcHJlc3Nf YmluZF9hdHRycyA9IHRydWUsDQorCQkucG0gPSAmbXRrX3BjaWVfcG1fb3BzLA0KKwl9LA0KK307 DQorDQorbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfcGNpZV9kcml2ZXIpOw0KK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi4yNS4xDQo=