From mboxrd@z Thu Jan 1 00:00:00 1970 From: Krzysztof Kozlowski Subject: Re: [PATCH v3 3/4] ARM: EXYNOS: cpuidle: add secure firmware support to AFTR mode code Date: Thu, 10 Jul 2014 10:27:10 +0200 Message-ID: <53BE4E5E.1080803@samsung.com> References: <1404926274-18411-1-git-send-email-b.zolnierkie@samsung.com> <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=------------020807090809030505090105 Return-path: In-reply-to: <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Bartlomiej Zolnierkiewicz , Kukjin Kim Cc: linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org, Sachin Kamat , Viresh Kumar , Tomasz Figa , Daniel Lezcano , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, Kyungmin Park , linaro-kernel@lists.linaro.org, linux-arm-kernel@lists.infradead.org List-Id: linux-pm@vger.kernel.org This is a multi-part message in MIME format. --------------020807090809030505090105 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 09.07.2014 19:17, Bartlomiej Zolnierkiewicz wrote: > * Move cp15 registers saving to exynos_save_cp15() helper and add > additional helper usage to do_idle firmware method. > > * Use sysram_ns_base_addr + 0x24/0x20 addresses instead of the default > ones used by exynos_cpu_set_boot_vector() on boards with secure > firmware enabled. > > * Use do_idle firmware method instead of cpu_do_idle() on boards with > secure firmware enabled. > > Signed-off-by: Bartlomiej Zolnierkiewicz > Acked-by: Kyungmin Park > --- > v3: > - make exynos_enter_aftr() return a value > - add cp15 registers handling to do_idle firmware method > - set sysram_ns_base_addr + 0x24/0x20 in do_idle firmware method > - move calling of do_idle firmware method from cpuidle-exynos.c > to pm.c > > arch/arm/mach-exynos/common.h | 2 +- > arch/arm/mach-exynos/firmware.c | 26 ++++++++++++++++++-------- > arch/arm/mach-exynos/pm.c | 11 +++++++++-- > drivers/cpuidle/cpuidle-exynos.c | 6 +++--- > 4 files changed, 31 insertions(+), 14 deletions(-) > > diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h > index a6a200f..0829808 100644 > --- a/arch/arm/mach-exynos/common.h > +++ b/arch/arm/mach-exynos/common.h > @@ -170,7 +170,7 @@ extern int exynos_cpu_power_state(int cpu); > extern void exynos_cluster_power_down(int cluster); > extern void exynos_cluster_power_up(int cluster); > extern int exynos_cluster_power_state(int cluster); > -extern void exynos_enter_aftr(void); > +extern int exynos_enter_aftr(void); > > extern void s5p_init_cpu(void __iomem *cpuid_addr); > extern unsigned int samsung_rev(void); > diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c > index 53fbf5c..163f5b9 100644 > --- a/arch/arm/mach-exynos/firmware.c > +++ b/arch/arm/mach-exynos/firmware.c > @@ -24,13 +24,30 @@ > #include "smc.h" > > #define EXYNOS_SLEEP_MAGIC 0x00000bad > +#define EXYNOS_AFTR_MAGIC 0xfcba0d10 > #define EXYNOS_BOOT_ADDR 0x8 > #define EXYNOS_BOOT_FLAG 0xc > > +/* For Cortex-A9 Diagnostic and Power control register */ > +static unsigned int cp15_power; > +static unsigned int cp15_diag; > + > +static void exynos_save_cp15(void) > +{ > + /* Save Power control and Diagnostic registers */ > + asm ("mrc p15, 0, %0, c15, c0, 0\n" > + "mrc p15, 0, %1, c15, c0, 1\n" > + : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); Hi, On Exynos3250 I encounter "Oops - undefined instruction" on this asm while entering AFTR: [ 2.277946] CPUidle CPU1: going off [ 2.278110] CPUidle CPU0: going AFTR [ 2.279478] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP ARM Are you sure it should be called on each SoC? Full dmesg attached. Best regards, Krzysztof > +} > + > static int exynos_do_idle(unsigned long mode) > { > switch (mode) { > case FW_DO_IDLE_AFTR: > + exynos_save_cp15(); > + __raw_writel(virt_to_phys(exynos_cpu_resume), > + sysram_ns_base_addr + 0x24); > + __raw_writel(EXYNOS_AFTR_MAGIC, sysram_ns_base_addr + 0x20); > exynos_smc(SMC_CMD_CPU0AFTR, 0, 0, 0); > break; > case FW_DO_IDLE_SLEEP: > @@ -76,10 +93,6 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) > return 0; > } > > -/* For Cortex-A9 Diagnostic and Power control register */ > -static unsigned int cp15_power; > -static unsigned int cp15_diag; > - > static int exynos_cpu_suspend(unsigned long arg) > { > flush_cache_all(); > @@ -94,10 +107,7 @@ static int exynos_cpu_suspend(unsigned long arg) > > static int exynos_suspend(void) > { > - /* Save Power control and Diagnostic registers */ > - asm ("mrc p15, 0, %0, c15, c0, 0\n" > - "mrc p15, 0, %1, c15, c0, 1\n" > - : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); > + exynos_save_cp15(); > > writel(EXYNOS_SLEEP_MAGIC, sysram_ns_base_addr + EXYNOS_BOOT_FLAG); > writel(virt_to_phys(cpu_resume), > diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c > index c722454..af0d4bf 100644 > --- a/arch/arm/mach-exynos/pm.c > +++ b/arch/arm/mach-exynos/pm.c > @@ -201,12 +201,19 @@ static void exynos_cpu_set_boot_vector(long flags) > __raw_writel(flags, exynos_boot_vector_flag()); > } > > -void exynos_enter_aftr(void) > +int exynos_enter_aftr(void) > { > + int ret; > + > exynos_set_wakeupmask(0x0000ff3e); > - exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > /* Set value of power down register for aftr mode */ > exynos_sys_powerdown_conf(SYS_AFTR); > + > + ret = call_firmware_op(do_idle, FW_DO_IDLE_AFTR); > + if (ret == -ENOSYS) > + exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > + > + return ret; > } > > /* For Cortex-A9 Diagnostic and Power control register */ > diff --git a/drivers/cpuidle/cpuidle-exynos.c b/drivers/cpuidle/cpuidle-exynos.c > index 7c01512..c5b36d3 100644 > --- a/drivers/cpuidle/cpuidle-exynos.c > +++ b/drivers/cpuidle/cpuidle-exynos.c > @@ -18,12 +18,12 @@ > #include > #include > > -static void (*exynos_enter_aftr)(void); > +static int (*exynos_enter_aftr)(void); > > static int idle_finisher(unsigned long flags) > { > - exynos_enter_aftr(); > - cpu_do_idle(); > + if (exynos_enter_aftr() == -ENOSYS) > + cpu_do_idle(); > > return 1; > } > --------------020807090809030505090105 Content-Type: text/plain; charset=UTF-8; name="exynos3250-oops.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="exynos3250-oops.txt" RWxhcHNlZCB0aW1lOiAyLjYyNyBzZWMgKDB4N2Q0NGE0LCAzMTI1MDAwSHopClVuY29tcHJl c3NpbmcgTGludXguLi4gZG9uZSwgYm9vdGluZyB0aGUga2VybmVsLgpbICAgIDAuMDAwMDAw XSBCb290aW5nIExpbnV4IG9uIHBoeXNpY2FsIENQVSAweDAKWyAgICAwLjAwMDAwMF0gSW5p dGlhbGl6aW5nIGNncm91cCBzdWJzeXMgY3B1c2V0ClsgICAgMC4wMDAwMDBdIEluaXRpYWxp emluZyBjZ3JvdXAgc3Vic3lzIGNwdQpbICAgIDAuMDAwMDAwXSBJbml0aWFsaXppbmcgY2dy b3VwIHN1YnN5cyBjcHVhY2N0ClsgICAgMC4wMDAwMDBdIExpbnV4IHZlcnNpb24gMy4xNi4w LXJjNC0wMDA5OC1nZWFhMGU0ZGFhYWJiLWRpcnR5IChrLmtvemxvd3NraUBBTURDMTk0Mykg KGdjYyB2ZXJzaW9uIDQuNy4zIChVYnVudHUvTGluYXJvIDQuNy4zLTEydWJ1bnR1MSkgKSAj MTYwIFNNUCBQUkVFTVBUIFRodSBKdWwgMTAgMDk6NTY6MTQgQ0VTVCAyMDE0ClsgICAgMC4w MDAwMDBdIENQVTogQVJNdjcgUHJvY2Vzc29yIFs0MTBmYzA3M10gcmV2aXNpb24gMyAoQVJN djcpLCBjcj0xMGM1M2M3ZApbICAgIDAuMDAwMDAwXSBDUFU6IFBJUFQgLyBWSVBUIG5vbmFs aWFzaW5nIGRhdGEgY2FjaGUsIFZJUFQgYWxpYXNpbmcgaW5zdHJ1Y3Rpb24gY2FjaGUKWyAg ICAwLjAwMDAwMF0gTWVtb3J5IHBvbGljeTogRGF0YSBjYWNoZSB3cml0ZWFsbG9jClsgICAg MC4wMDAwMDBdIFJ1bm5pbmcgdW5kZXIgc2VjdXJlIGZpcm13YXJlLgpbICAgIDAuMDAwMDAw XSBQRVJDUFU6IEVtYmVkZGVkIDkgcGFnZXMvY3B1IEBkZmFiMTAwMCBzMTQ2NTYgcjgxOTIg ZDE0MDE2IHUzNjg2NApbICAgIDAuMDAwMDAwXSBCdWlsdCAxIHpvbmVsaXN0cyBpbiBab25l IG9yZGVyLCBtb2JpbGl0eSBncm91cGluZyBvbi4gIFRvdGFsIHBhZ2VzOiAxMjk3OTQKWyAg ICAwLjAwMDAwMF0gS2VybmVsIGNvbW1hbmQgbGluZTogY29uc29sZT10dHlTQUMxLDExNTIw MCBsb2dsZXZlbD03IG5vX2NvbnNvbGVfc3VzcGVuZCBpbml0PS9iaW4vc2ggcm9vdD0vZGV2 L21tY2JsazBwMTUgcm8gcm9vdGZzdHlwZT1leHQ0IHJvb3R3YWl0IGJvb3Rtb2RlPW5vcm1h bCAgcHdyb24ucmVhc29uPWFwOnN3cnN0LHBtaWM6cHdyb24gc2VjX2RlYnVnLmVuYWJsZT0x IHNlY19kZWJ1Zy5lbmFibGVfdXNlcj0wIHNvZnRsb2NrdXBfcGFuaWM9MCBzZWNfbG9nPTB4 MjAwMDAwQDB4NDYwMDAwMDAgbGNkdHlwZT0wIG9vcHM9cGFuaWMgcG1pY19pbmZvPTE4NzUg c3lzc2NvcGU9MHhlZTAwMDAwMCBjb3Jkb249YTRiZTRkZWI1OWQwZTEwZGRjY2Q0NWMyYWZl YmRkMWIgc2VyaWFsbm89NDEwMDk0Zjc1MzRhYjA2MyB0aXplbmJvb3QuZW1tY19jaGVja3N1 bT0zIHRpemVuYm9vdC5vZGluPTEgYm9vdGxvYWRlci52ZXI9bG9jYWxidWlsZCBib290bG9h ZGVyLmZiPTB4NDgwMDAwMDAgYm9vdGxvYWRlci5sb2c9MHgxMWZkQDB4NDYwMDE2MzYKWyAg ICAwLjAwMDAwMF0gUElEIGhhc2ggdGFibGUgZW50cmllczogMjA0OCAob3JkZXI6IDEsIDgx OTIgYnl0ZXMpClsgICAgMC4wMDAwMDBdIERlbnRyeSBjYWNoZSBoYXNoIHRhYmxlIGVudHJp ZXM6IDY1NTM2IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQpbICAgIDAuMDAwMDAwXSBJbm9k ZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDMyNzY4IChvcmRlcjogNSwgMTMxMDcyIGJ5 dGVzKQpbICAgIDAuMDAwMDAwXSBhbGxvY2F0ZWQgMTA0NjUyOCBieXRlcyBvZiBwYWdlX2Nn cm91cApbICAgIDAuMDAwMDAwXSBwbGVhc2UgdHJ5ICdjZ3JvdXBfZGlzYWJsZT1tZW1vcnkn IG9wdGlvbiBpZiB5b3UgZG9uJ3Qgd2FudCBtZW1vcnkgY2dyb3VwcwpbICAgIDAuMDAwMDAw XSBNZW1vcnk6IDUwMDkxMksvNTIzMjY0SyBhdmFpbGFibGUgKDUzNDBLIGtlcm5lbCBjb2Rl LCAzOTBLIHJ3ZGF0YSwgMTk0MEsgcm9kYXRhLCAyODJLIGluaXQsIDg1MTFLIGJzcywgMjIz NTJLIHJlc2VydmVkKQpbICAgIDAuMDAwMDAwXSBWaXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5 b3V0OgpbICAgIDAuMDAwMDAwXSAgICAgdmVjdG9yICA6IDB4ZmZmZjAwMDAgLSAweGZmZmYx MDAwICAgKCAgIDQga0IpClsgICAgMC4wMDAwMDBdICAgICBmaXhtYXAgIDogMHhmZmMwMDAw MCAtIDB4ZmZlMDAwMDAgICAoMjA0OCBrQikKWyAgICAwLjAwMDAwMF0gICAgIHZtYWxsb2Mg OiAweGUwMDAwMDAwIC0gMHhmZjAwMDAwMCAgICggNDk2IE1CKQpbICAgIDAuMDAwMDAwXSAg ICAgbG93bWVtICA6IDB4YzAwMDAwMDAgLSAweGRmZjAwMDAwICAgKCA1MTEgTUIpClsgICAg MC4wMDAwMDBdICAgICBtb2R1bGVzIDogMHhiZjAwMDAwMCAtIDB4YzAwMDAwMDAgICAoICAx NiBNQikKWyAgICAwLjAwMDAwMF0gICAgICAgLnRleHQgOiAweGMwMDA4MDAwIC0gMHhjMDcy NDU0YyAgICg3MjgyIGtCKQpbICAgIDAuMDAwMDAwXSAgICAgICAuaW5pdCA6IDB4YzA3MjUw MDAgLSAweGMwNzZiOTQwICAgKCAyODMga0IpClsgICAgMC4wMDAwMDBdICAgICAgIC5kYXRh IDogMHhjMDc2YzAwMCAtIDB4YzA3Y2RhZGMgICAoIDM5MSBrQikKWyAgICAwLjAwMDAwMF0g ICAgICAgIC5ic3MgOiAweGMwN2NkYWRjIC0gMHhjMTAxZGFhNCAgICg4NTEyIGtCKQpbICAg IDAuMDAwMDAwXSBTTFVCOiBIV2FsaWduPTY0LCBPcmRlcj0wLTMsIE1pbk9iamVjdHM9MCwg Q1BVcz0yLCBOb2Rlcz0xClsgICAgMC4wMDAwMDBdIFByZWVtcHRpYmxlIGhpZXJhcmNoaWNh bCBSQ1UgaW1wbGVtZW50YXRpb24uClsgICAgMC4wMDAwMDBdICBSQ1UgbG9ja2RlcCBjaGVj a2luZyBpcyBlbmFibGVkLgpbICAgIDAuMDAwMDAwXSAgT2ZmbG9hZCBSQ1UgY2FsbGJhY2tz IGZyb20gYWxsIENQVXMKWyAgICAwLjAwMDAwMF0gIE9mZmxvYWQgUkNVIGNhbGxiYWNrcyBm cm9tIENQVXM6IDAtMS4KWyAgICAwLjAwMDAwMF0gTlJfSVJRUzoxNiBucl9pcnFzOjE2IDE2 ClsgICAgMC4wMDAwMTVdIHNjaGVkX2Nsb2NrOiA2NCBiaXRzIGF0IDI0TUh6LCByZXNvbHV0 aW9uIDQxbnMsIHdyYXBzIGV2ZXJ5IDI4NjMzMTE1MTk3NDRucwpbICAgIDAuMDAxMjI0XSBD b25zb2xlOiBjb2xvdXIgZHVtbXkgZGV2aWNlIDgweDMwClsgICAgMC4wMDEyODBdIExvY2sg ZGVwZW5kZW5jeSB2YWxpZGF0b3I6IENvcHlyaWdodCAoYykgMjAwNiBSZWQgSGF0LCBJbmMu LCBJbmdvIE1vbG5hcgpbICAgIDAuMDAxMjkyXSAuLi4gTUFYX0xPQ0tERVBfU1VCQ0xBU1NF UzogIDgKWyAgICAwLjAwMTMwNF0gLi4uIE1BWF9MT0NLX0RFUFRIOiAgICAgICAgICA0OApb ICAgIDAuMDAxMzE1XSAuLi4gTUFYX0xPQ0tERVBfS0VZUzogICAgICAgIDgxOTEKWyAgICAw LjAwMTMyNl0gLi4uIENMQVNTSEFTSF9TSVpFOiAgICAgICAgICA0MDk2ClsgICAgMC4wMDEz MzddIC4uLiBNQVhfTE9DS0RFUF9FTlRSSUVTOiAgICAgMzI3NjgKWyAgICAwLjAwMTM0OV0g Li4uIE1BWF9MT0NLREVQX0NIQUlOUzogICAgICA2NTUzNgpbICAgIDAuMDAxMzYwXSAuLi4g Q0hBSU5IQVNIX1NJWkU6ICAgICAgICAgIDMyNzY4ClsgICAgMC4wMDEzNzFdICBtZW1vcnkg dXNlZCBieSBsb2NrIGRlcGVuZGVuY3kgaW5mbzogNTE2NyBrQgpbICAgIDAuMDAxMzgzXSAg cGVyIHRhc2stc3RydWN0IG1lbW9yeSBmb290cHJpbnQ6IDExNTIgYnl0ZXMKWyAgICAwLjAw MTQzNV0gQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcC4uLiAxMzg0LjQ0IEJvZ29NSVBTIChscGo9 MzQ2MTEyMCkKWyAgICAwLjA5NTAzMl0gcGlkX21heDogZGVmYXVsdDogMzI3NjggbWluaW11 bTogMzAxClsgICAgMC4wOTU0NjBdIFNlY3VyaXR5IEZyYW1ld29yayBpbml0aWFsaXplZApb ICAgIDAuMDk1NjQwXSBNb3VudC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEwMjQgKG9y ZGVyOiAwLCA0MDk2IGJ5dGVzKQpbICAgIDAuMDk1NjYyXSBNb3VudHBvaW50LWNhY2hlIGhh c2ggdGFibGUgZW50cmllczogMTAyNCAob3JkZXI6IDAsIDQwOTYgYnl0ZXMpClsgICAgMC4w OTkyNDZdIEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIG1lbW9yeQpbICAgIDAuMDk5NTYw XSBJbml0aWFsaXppbmcgY2dyb3VwIHN1YnN5cyBmcmVlemVyClsgICAgMC4wOTk2NzhdIElu aXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGRlYnVnClsgICAgMC4wOTk5NDZdIENQVTogVGVz dGluZyB3cml0ZSBidWZmZXIgY29oZXJlbmN5OiBvawpbICAgIDAuMTAxNTU4XSBDUFUwOiB1 cGRhdGUgY3B1X2NhcGFjaXR5IDEwMjQKWyAgICAwLjEwMTU3OV0gQ1BVMDogdGhyZWFkIC0x LCBjcHUgMCwgc29ja2V0IDAsIG1waWRyIDgwMDAwMDAwClsgICAgMC4xMDE3OTRdIFNldHRp bmcgdXAgc3RhdGljIGlkZW50aXR5IG1hcCBmb3IgMHg0MDUxMjcyOCAtIDB4NDA1MTI3ODAK WyAgICAwLjE0Nzk4N10gQ1BVMTogU29mdHdhcmUgcmVzZXQKWyAgICAwLjE0ODIyN10gQ1BV MTogQm9vdGVkIHNlY29uZGFyeSBwcm9jZXNzb3IKWyAgICAwLjE3NDk4OV0gQ1BVMTogdXBk YXRlIGNwdV9jYXBhY2l0eSAxMDI0ClsgICAgMC4xNzQ5OThdIENQVTE6IHRocmVhZCAtMSwg Y3B1IDEsIHNvY2tldCAwLCBtcGlkciA4MDAwMDAwMQpbICAgIDAuMTc1ODM1XSBCcm91Z2h0 IHVwIDIgQ1BVcwpbICAgIDAuMTc1ODY1XSBTTVA6IFRvdGFsIG9mIDIgcHJvY2Vzc29ycyBh Y3RpdmF0ZWQuClsgICAgMC4xNzU4NzldIENQVTogQWxsIENQVShzKSBzdGFydGVkIGluIFNW QyBtb2RlLgpbICAgIDAuMTgwMzg2XSBkZXZ0bXBmczogaW5pdGlhbGl6ZWQKWyAgICAwLjIw NzI3NV0gVkZQIHN1cHBvcnQgdjAuMzogaW1wbGVtZW50b3IgNDEgYXJjaGl0ZWN0dXJlIDIg cGFydCAzMCB2YXJpYW50IDcgcmV2IDMKWyAgICAwLjIxMDY4Nl0gcGluY3RybCBjb3JlOiBp bml0aWFsaXplZCBwaW5jdHJsIHN1YnN5c3RlbQpbICAgIDAuMjE0NDA1XSByZWd1bGF0b3It ZHVtbXk6IG5vIHBhcmFtZXRlcnMKWyAgICAwLjI3NTU1MV0gTkVUOiBSZWdpc3RlcmVkIHBy b3RvY29sIGZhbWlseSAxNgpbICAgIDAuMjc2MzMxXSBETUE6IHByZWFsbG9jYXRlZCAyNTYg S2lCIHBvb2wgZm9yIGF0b21pYyBjb2hlcmVudCBhbGxvY2F0aW9ucwpbICAgIDAuMjc5NDY5 XSBjcHVpZGxlOiB1c2luZyBnb3Zlcm5vciBsYWRkZXIKWyAgICAwLjI3OTUwMF0gY3B1aWRs ZTogdXNpbmcgZ292ZXJub3IgbWVudQpbICAgIDAuMzAyNDg3XSBzYW1zdW5nLXBpbmN0cmwg MTEwMDAwMDAucGluY3RybDogbm9kZSBpbml0aWFsLXN0YXRlIGRvZXMgbm90IGhhdmUgZWl0 aGVyIGNvbmZpZyBvciBmdW5jdGlvbiBjb25maWd1cmF0aW9ucwpbICAgIDAuMzA5NDIwXSBz YW1zdW5nLXBpbmN0cmwgMTE0MDAwMDAucGluY3RybDogbm9kZSBpbml0aWFsLXN0YXRlIGRv ZXMgbm90IGhhdmUgZWl0aGVyIGNvbmZpZyBvciBmdW5jdGlvbiBjb25maWd1cmF0aW9ucwpb ICAgIDAuMzI0OTA5XSBody1icmVha3BvaW50OiBGYWlsZWQgdG8gZW5hYmxlIG1vbml0b3Ig bW9kZSBvbiBDUFUgMC4KWyAgICAwLjMyNDk2Ml0gRVhZTk9TMzI1MCBQTVUgSW5pdGlhbGl6 ZQpbICAgIDAuMzcxNjM1XSBWX0VNTUNfMi44Vi1maXhlZDogMjgwMCBtVgpbICAgIDAuMzk3 ODgzXSBtYXgxNDU3NyA3LTAwMjU6IERldmljZSB0eXBlOiAyIChJRDogMHhlLCB2ZW5kb3I6 IDB4NSkKWyAgICAwLjQxOTg1NF0gU0FGRU9VVDogNDkwMCBtVgpbICAgIDAuNDM0MDg3XSBD SEFSR0VSOiA0NSA8LS0+IDQ3NSBtQSBhdCA0NzUgbUEKWyAgICAwLjQ0NzI5OF0gVU5VU0VE X0xETzE6IDI3MDAgbVYKWyAgICAwLjQ1NDc5MF0gVU5VU0VEX0xETzI6IDgwMCA8LS0+IDM5 NTAgbVYgYXQgMTgwMCBtVgpbICAgIDAuNDU5ODE0XSBpMmMtZ3BpbyAxMzhkMDAwMC5pMmM6 IHVzaW5nIHBpbnMgMTQ3IChTREEpIGFuZCAxNDggKFNDTCkKWyAgICAwLjQ2MDY4OF0gczNj LWkyYyAxMzg2MDAwMC5pMmM6IHNsYXZlIGFkZHJlc3MgMHgxMApbICAgIDAuNDYwNzE3XSBz M2MtaTJjIDEzODYwMDAwLmkyYzogYnVzIGZyZXF1ZW5jeSBzZXQgdG8gOTcgS0h6ClsgICAg MC40NjkxMDddIFZBUF9BTElWRV8xLjBWOiAxMDAwIG1WClsgICAgMC40NzE5MjldIFZBUF9N MV8xLjJWOiAxMjAwIG1WClsgICAgMC40NzQ0ODBdIFZDQ19BUF8xLjhWOiAxODAwIG1WClsg ICAgMC40NzcyMDJdIFZBUF9BVkREX1BMTDE6IDE4MDAgbVYKWyAgICAwLjQ3OTcxOV0gVkFQ X1BMTF9JU09fMS4wVjogMTAwMCBtVgpbICAgIDAuNDgyMzYwXSBWQVBfVk1JUElfMS4wVjog MTAwMCBtVgpbICAgIDAuNDg0OTQ0XSBWQVBfQVZERF8xLjhWOiAxODAwIG1WClsgICAgMC40 ODc4MjNdIFZBUF9VU0JfMy4wVjogMzAwMCBtVgpbICAgIDAuNDkwNDQwXSBWX0xQRERSXzEu MlY6IDEyMDAgbVYKWyAgICAwLjQ5MjQzOV0gVU5VU0VEX0xETzEwOiA5MDAgPC0tPiAxMTAw IG1WIGF0IDEwMDAgbVYKWyAgICAwLjQ5NTU0MF0gVl9FTU1DXzEuOFY6IDE4MDAgbVYKWyAg ICAwLjQ5OTk1OV0gVl9FTU1DXzIuOFY6IDI4MDAgbVYKWyAgICAwLjUwMzE2N10gQ0FNX0FW RERfMi44VjogMjgwMCBtVgpbICAgIDAuNTA1MjQxXSBNT1RfMi43VjogMTgwMCA8LS0+IDI3 MDAgbVYgYXQgMjcwMCBtVgpbICAgIDAuNTA4MjcyXSBUU1BfQVZERF8zLjNWOiAzMzAwIG1W ClsgICAgMC41MTA4MzVdIExDRF9WRERfMy4zVjogMzMwMCBtVgpbICAgIDAuNTE0MzQ1XSBV TlVTRURfTERPMTc6IDI4MDAgbVYKWyAgICAwLjUxNzM5Nl0gQ0FNX0FGXzIuOFY6IDI4MDAg bVYKWyAgICAwLjUyMDQ5N10gVFNQX1ZERF8xLjhWOiAxODAwIG1WClsgICAgMC41MjMwNjRd IExDRF9WRERfMS44VjogMTgwMCBtVgpbICAgIDAuNTI2MDgwXSBDQU1fSU9fMS44VjogMTgw MCBtVgpbICAgIDAuNTI5MTEzXSBDQU1fRFZERF8xLjJWOiAxMjAwIG1WClsgICAgMC41MzE3 ODFdIEhSTV9WQ0NfMS44VjogMTgwMCBtVgpbICAgIDAuNTM2MjQzXSBIUk1fVkNDXzMuM1Y6 IDMzMDAgbVYKWyAgICAwLjUzODI1MF0gVU5VU0VEX0xETzI1OiAxODAwIDwtLT4gMzM3NSBt ViBhdCAzMDAwIG1WClsgICAgMC41NDA5MDldIFZBUF9NSUZfMS4wVjogODAwIDwtLT4gOTAw IG1WIGF0IDEwMDAgbVYKWyAgICAwLjU0MzQ1OF0gVkFQX0FSTV8xLjBWOiA4NTAgPC0tPiAx MTUwIG1WIGF0IDEwMDAgbVYKWyAgICAwLjU0NjAwOF0gVkFQX0lOVDNEXzEuMFY6IDg1MCA8 LS0+IDEwMDAgbVYgYXQgMTAwMCBtVgpbICAgIDAuNTQ4ODMxXSBWQ0NfU1VCXzEuOTVWOiAx OTUwIG1WClsgICAgMC41NTE0NzNdIFZDQ19TVUJfMS4zNVY6IDEzNTAgbVYKWyAgICAwLjU1 MzM4OV0gczNjLWkyYyAxMzg2MDAwMC5pMmM6IGkyYy0wOiBTM0MgSTJDIGFkYXB0ZXIKWyAg ICAwLjU1Mzg3N10gczNjLWkyYyAxMzg3MDAwMC5pMmM6IHNsYXZlIGFkZHJlc3MgMHgxMApb ICAgIDAuNTUzOTA0XSBzM2MtaTJjIDEzODcwMDAwLmkyYzogYnVzIGZyZXF1ZW5jeSBzZXQg dG8gMzkwIEtIegpbICAgIDAuNTU2MDQ3XSBzM2MtaTJjIDEzODcwMDAwLmkyYzogaTJjLTE6 IFMzQyBJMkMgYWRhcHRlcgpbICAgIDAuNTU2MzkwXSBzM2MtaTJjIDEzODgwMDAwLmkyYzog c2xhdmUgYWRkcmVzcyAweDEwClsgICAgMC41NTY0MTddIHMzYy1pMmMgMTM4ODAwMDAuaTJj OiBidXMgZnJlcXVlbmN5IHNldCB0byAzOTAgS0h6ClsgICAgMC41NTg1MTFdIHMzYy1pMmMg MTM4ODAwMDAuaTJjOiBpMmMtMjogUzNDIEkyQyBhZGFwdGVyClsgICAgMC41NTg4NDFdIExp bnV4IHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlOiB2Mi4wMApbICAgIDAuNTY5Njk1XSBBZHZh bmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgRHJpdmVyIEluaXRpYWxpemVkLgpbICAg IDAuNTczNjg2XSBCbHVldG9vdGg6IENvcmUgdmVyIDIuMTkKWyAgICAwLjU3Mzg2OF0gTkVU OiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAzMQpbICAgIDAuNTczODg0XSBCbHVldG9v dGg6IEhDSSBkZXZpY2UgYW5kIGNvbm5lY3Rpb24gbWFuYWdlciBpbml0aWFsaXplZApbICAg IDAuNTczOTk1XSBCbHVldG9vdGg6IEhDSSBzb2NrZXQgbGF5ZXIgaW5pdGlhbGl6ZWQKWyAg ICAwLjU3NDAzMl0gQmx1ZXRvb3RoOiBMMkNBUCBzb2NrZXQgbGF5ZXIgaW5pdGlhbGl6ZWQK WyAgICAwLjU3NDIzNF0gQmx1ZXRvb3RoOiBTQ08gc29ja2V0IGxheWVyIGluaXRpYWxpemVk ClsgICAgMC41NzQyOThdIE5ldExhYmVsOiBJbml0aWFsaXppbmcKWyAgICAwLjU3NDMxMl0g TmV0TGFiZWw6ICBkb21haW4gaGFzaCBzaXplID0gMTI4ClsgICAgMC41NzQzMjRdIE5ldExh YmVsOiAgcHJvdG9jb2xzID0gVU5MQUJFTEVEIENJUFNPdjQKWyAgICAwLjU3NDU1N10gTmV0 TGFiZWw6ICB1bmxhYmVsZWQgdHJhZmZpYyBhbGxvd2VkIGJ5IGRlZmF1bHQKWyAgICAwLjU3 NzczNF0gU3dpdGNoZWQgdG8gY2xvY2tzb3VyY2UgbWN0LWZyYwpbICAgIDAuNzM0MTI0XSBO RVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDIKWyAgICAwLjczNzY2MV0gVENQIGVz dGFibGlzaGVkIGhhc2ggdGFibGUgZW50cmllczogNDA5NiAob3JkZXI6IDIsIDE2Mzg0IGJ5 dGVzKQpbICAgIDAuNzM3ODgwXSBUQ1AgYmluZCBoYXNoIHRhYmxlIGVudHJpZXM6IDQwOTYg KG9yZGVyOiA1LCAxNDc0NTYgYnl0ZXMpClsgICAgMC43Mzk2MzVdIFRDUDogSGFzaCB0YWJs ZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgNDA5NiBiaW5kIDQwOTYpClsgICAgMC43Mzk4 MjVdIFRDUDogcmVubyByZWdpc3RlcmVkClsgICAgMC43Mzk4NjBdIFVEUCBoYXNoIHRhYmxl IGVudHJpZXM6IDI1NiAob3JkZXI6IDIsIDIwNDgwIGJ5dGVzKQpbICAgIDAuNzQwMTE0XSBV RFAtTGl0ZSBoYXNoIHRhYmxlIGVudHJpZXM6IDI1NiAob3JkZXI6IDIsIDIwNDgwIGJ5dGVz KQpbICAgIDAuNzQxNDQ4XSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDEKWyAg ICAwLjc0MzMxMV0gaHcgcGVyZmV2ZW50czogZW5hYmxlZCB3aXRoIEFSTXY3IENvcnRleC1B NyBQTVUgZHJpdmVyLCA1IGNvdW50ZXJzIGF2YWlsYWJsZQpbICAgIDAuNzQ4MTE3XSBmdXRl eCBoYXNoIHRhYmxlIGVudHJpZXM6IDUxMiAob3JkZXI6IDMsIDMyNzY4IGJ5dGVzKQpbICAg IDAuNzQ4NDcxXSBhdWRpdDogaW5pdGlhbGl6aW5nIG5ldGxpbmsgc3Vic3lzIChkaXNhYmxl ZCkKWyAgICAwLjc0ODc5NF0gYXVkaXQ6IHR5cGU9MjAwMCBhdWRpdCgwLjc0NToxKTogaW5p dGlhbGl6ZWQKWyAgICAwLjc4NjcyNV0gc3F1YXNoZnM6IHZlcnNpb24gNC4wICgyMDA5LzAx LzMxKSBQaGlsbGlwIExvdWdoZXIKWyAgICAwLjc4NzY5M10gZnVzZSBpbml0IChBUEkgdmVy c2lvbiA3LjIzKQpbICAgIDAuNzg5MTU4XSBtc2dtbmkgaGFzIGJlZW4gc2V0IHRvIDk3OApb ICAgIDAuNzk4MzYwXSBpbyBzY2hlZHVsZXIgbm9vcCByZWdpc3RlcmVkClsgICAgMC43OTkw NDhdIGlvIHNjaGVkdWxlciBjZnEgcmVnaXN0ZXJlZCAoZGVmYXVsdCkKWyAgICAwLjgxODEx NV0gZG1hLXBsMzMwIDEyNjgwMDAwLnBkbWE6IExvYWRlZCBkcml2ZXIgZm9yIFBMMzMwIERN QUMtMTMxNTYzMgpbICAgIDAuODE4MTQyXSBkbWEtcGwzMzAgMTI2ODAwMDAucGRtYTogICAg ICAgICBEQlVGRi0zMng0Ynl0ZXMgTnVtX0NoYW5zLTggTnVtX1BlcmktMzIgTnVtX0V2ZW50 cy0zMgpbICAgIDAuODM0MjEyXSBkbWEtcGwzMzAgMTI2OTAwMDAucGRtYTogTG9hZGVkIGRy aXZlciBmb3IgUEwzMzAgRE1BQy0xMzE1NjMyClsgICAgMC44MzQyMzldIGRtYS1wbDMzMCAx MjY5MDAwMC5wZG1hOiAgICAgICAgIERCVUZGLTMyeDRieXRlcyBOdW1fQ2hhbnMtOCBOdW1f UGVyaS0zMiBOdW1fRXZlbnRzLTMyClsgICAgMC44MzYwMDNdIFNlcmlhbDogODI1MC8xNjU1 MCBkcml2ZXIsIDQgcG9ydHMsIElSUSBzaGFyaW5nIGRpc2FibGVkClsgICAgMC44NTY5OTZd IDEzODAwMDAwLnNlcmlhbDogdHR5U0FDMCBhdCBNTUlPIDB4MTM4MDAwMDAgKGlycSA9IDE0 MSwgYmFzZV9iYXVkID0gMCkgaXMgYSBTM0M2NDAwLzEwClsgICAgMC44NTkyOTddIDEzODEw MDAwLnNlcmlhbDogdHR5U0FDMSBhdCBNTUlPIDB4MTM4MTAwMDAgKGlycSA9IDE0MiwgYmFz ZV9iYXVkID0gMCkgaXMgYSBTM0M2NDAwLzEwClsgICAgMS43MzE5MjFdIGNvbnNvbGUgW3R0 eVNBQzFdIGVuYWJsZWQKWyAgICAxLjczNzczMV0gW2RybV0gSW5pdGlhbGl6ZWQgZHJtIDEu MS4wIDIwMDYwODEwClsgICAgMS43NDM4MDBdIGV4eW5vcy1kcm0taXBwIGV4eW5vcy1kcm0t aXBwOiBkcm0gaXBwIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LgpbICAgIDEuNzU4NDM3XSBs b29wOiBtb2R1bGUgbG9hZGVkClsgICAgMS43NTkwOTddIHMzYzY0eHgtc3BpIDEzOTIwMDAw LnNwaTogbnVtYmVyIG9mIGNoaXAgc2VsZWN0IGxpbmVzIG5vdCBzcGVjaWZpZWQsIGFzc3Vt aW5nIDEgY2hpcCBzZWxlY3QgbGluZQpbICAgIDEuNzcwMDM0XSBzM2M2NHh4LXNwaSAxMzkz MDAwMC5zcGk6IG51bWJlciBvZiBjaGlwIHNlbGVjdCBsaW5lcyBub3Qgc3BlY2lmaWVkLCBh c3N1bWluZyAxIGNoaXAgc2VsZWN0IGxpbmUKWyAgICAxLjc4MDI2N10gczNjLXJ0YyAxMDA3 MDAwMC5ydGM6IHJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmcKWyAgICAxLjc4MjU1NF0gczNj LXJ0YyAxMDA3MDAwMC5ydGM6IHJ0YyBjb3JlOiByZWdpc3RlcmVkIHMzYyBhcyBydGMwClsg ICAgMS43ODc0NTVdIHMzYy1ydGMgMTAwNzAwMDAucnRjOiB3YXJuaW5nOiBpbnZhbGlkIFJU QyB2YWx1ZSBzbyBpbml0aWFsaXppbmcgaXQKWyAgICAxLjgwNDIzM10gczVtLXJ0YyBzMm1w czE0LXJ0YzogcnRjIGNvcmU6IHJlZ2lzdGVyZWQgczVtLXJ0YyBhcyBydGMxClsgICAgMS44 MDk0OTJdIG1heDE3MDQwIDEtMDAzNjogbWF4MTcwNDBfd3JpdGVfcmVnOiBlcnIgLTExMQpb ICAgIDEuODExNjM3XSBtYXgxNzA0MCAxLTAwMzY6IE1BWDE3MDQwIEZ1ZWwtR2F1Z2UgVmVy IDAwClsgICAgMS44NjY1NDBdIEJsdWV0b290aDogSENJIFVBUlQgZHJpdmVyIHZlciAyLjIK WyAgICAxLjg2NjY0OV0gQmx1ZXRvb3RoOiBIQ0kgSDQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQK WyAgICAxLjg3MDY0M10gY3B1ZnJlcV9jcHUwOiBmYWlsZWQgdG8gZ2V0IGNwdTAgcmVndWxh dG9yOiAtMTkKWyAgICAxLjg3ODQ2Nl0gY3B1ZnJlcTogb25kZW1hbmQgZ292ZXJub3IgZmFp bGVkLCB0b28gbG9uZyB0cmFuc2l0aW9uIGxhdGVuY3kgb2YgSFcsIGZhbGxiYWNrIHRvIHBl cmZvcm1hbmNlIGdvdmVybm9yClsgICAgMS44ODkwMzRdIGV4eW5vc19jcHVpZGxlIGV4eW5v c19jcHVpZGxlOiBQcm9iaW5nIENQVSBpZGxlIGRyaXZlcgpbICAgIDEuODkzNTkxXSBTeW5v cHN5cyBEZXNpZ253YXJlIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgRHJpdmVyClsgICAg MS44OTk4MTBdIGR3bW1jX2V4eW5vcyAxMjUxMDAwMC5tc2hjOiBVc2luZyBpbnRlcm5hbCBE TUEgY29udHJvbGxlci4KWyAgICAxLjkwNDc2OF0gZHdtbWNfZXh5bm9zIDEyNTEwMDAwLm1z aGM6IFZlcnNpb24gSUQgaXMgMjYwYQpbICAgIDEuOTEwODIxXSBkd21tY19leHlub3MgMTI1 MTAwMDAubXNoYzogRFcgTU1DIGNvbnRyb2xsZXIgYXQgaXJxIDE3NCwgNjQgYml0IGhvc3Qg ZGF0YSB3aWR0aCwgMTI4IGRlZXAgZmlmbwpbICAgIDEuOTQ4MTM0XSBkd21tY19leHlub3Mg MTI1MTAwMDAubXNoYzogMSBzbG90cyBpbml0aWFsaXplZApbICAgIDEuOTQ5ODQzXSBsb2dn ZXI6IGNyZWF0ZWQgMjU2SyBsb2cgJ2xvZ19tYWluJwpbICAgIDEuOTU0NTgzXSBsb2dnZXI6 IGNyZWF0ZWQgMjU2SyBsb2cgJ2xvZ19ldmVudHMnClsgICAgMS45NTgyODZdIGxvZ2dlcjog Y3JlYXRlZCAyNTZLIGxvZyAnbG9nX3JhZGlvJwpbICAgIDEuOTYyNTE5XSBsb2dnZXI6IGNy ZWF0ZWQgMjU2SyBsb2cgJ2xvZ19zeXN0ZW0nClsgICAgMi4wMjA3MDldIG1tYzA6IEJLT1BT X0VOIGJpdCBpcyBub3Qgc2V0ClsgICAgMi4wMjMyMDJdIG1tY19ob3N0IG1tYzA6IEJ1cyBz cGVlZCAoc2xvdCAwKSA9IDUwMDAwMDAwSHogKHNsb3QgcmVxIDUyMDAwMDAwSHosIGFjdHVh bCA1MDAwMDAwMEhaIGRpdiA9IDApClsgICAgMi4wMjkzMzZdIG1tY19ob3N0IG1tYzA6IEJ1 cyBzcGVlZCAoc2xvdCAwKSA9IDEwMDAwMDAwMEh6IChzbG90IHJlcSA1MjAwMDAwMEh6LCBh Y3R1YWwgNTAwMDAwMDBIWiBkaXYgPSAxKQpbICAgIDIuMDM4OTc2XSBtbWMwOiBuZXcgRERS IE1NQyBjYXJkIGF0IGFkZHJlc3MgMDAwMQpbICAgIDIuMDQ3OTY5XSBtbWNibGswOiBtbWMw OjAwMDEgRjVYNU1BIDMuNjQgR2lCClsgICAgMi4wNTI4NzldIG1tY2JsazBib290MDogbW1j MDowMDAxIEY1WDVNQSBwYXJ0aXRpb24gMSA0LjAwIE1pQgpbICAgIDIuMDU0MDg0XSBtbWNi bGswYm9vdDE6IG1tYzA6MDAwMSBGNVg1TUEgcGFydGl0aW9uIDIgNC4wMCBNaUIKWyAgICAy LjA2MDEyM10gbW1jYmxrMHJwbWI6IG1tYzA6MDAwMSBGNVg1TUEgcGFydGl0aW9uIDMgNTEy IEtpQgpbICAgIDIuMDc1MjQ5XSAgbW1jYmxrMDogcDEgcDIgcDMgcDQgcDUgcDYgcDcgcDgg cDkgcDEwIHAxMSBwMTIgcDEzIHAxNCBwMTUKWyAgICAyLjA4NDA4Ml0gbWF4MTQ1NzctbXVp YyBtYXg3NzgzNi1tdWljOiBkZXZpY2UgSUQgOiAweDc1ClsgICAgMi4wOTU3MDhdICBtbWNi bGswYm9vdDE6IHVua25vd24gcGFydGl0aW9uIHRhYmxlClsgICAgMi4wOTYzMDBdIG9wcm9m aWxlOiB1c2luZyB0aW1lciBpbnRlcnJ1cHQuClsgICAgMi4wOTk4MzFdICBtbWNibGswYm9v dDA6IHVua25vd24gcGFydGl0aW9uIHRhYmxlClsgICAgMi4xMDAxOTddIFRDUDogY3ViaWMg cmVnaXN0ZXJlZApbICAgIDIuMTAwMzkxXSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFt aWx5IDE3ClsgICAgMi4xMDA1MjRdIE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkg MTUKWyAgICAyLjExMTI3MF0gQmx1ZXRvb3RoOiBSRkNPTU0gVFRZIGxheWVyIGluaXRpYWxp emVkClsgICAgMi4xMTEzMjVdIEJsdWV0b290aDogUkZDT01NIHNvY2tldCBsYXllciBpbml0 aWFsaXplZApbICAgIDIuMTExMzgwXSBCbHVldG9vdGg6IFJGQ09NTSB2ZXIgMS4xMQpbICAg IDIuMTExNDY2XSBCbHVldG9vdGg6IEJORVAgKEV0aGVybmV0IEVtdWxhdGlvbikgdmVyIDEu MwpbICAgIDIuMTExNDkxXSBCbHVldG9vdGg6IEJORVAgc29ja2V0IGxheWVyIGluaXRpYWxp emVkClsgICAgMi4xMTE1MDZdIEJsdWV0b290aDogSElEUCAoSHVtYW4gSW50ZXJmYWNlIEVt dWxhdGlvbikgdmVyIDEuMgpbICAgIDIuMTExNTMwXSBCbHVldG9vdGg6IEhJRFAgc29ja2V0 IGxheWVyIGluaXRpYWxpemVkClsgICAgMi4xMTQxNDVdIGlzcC1wb3dlci1kb21haW46IFBv d2VyLW9mZiBsYXRlbmN5IGV4Y2VlZGVkLCBuZXcgdmFsdWUgNDM3Mzc1IG5zClsgICAgMi4x MTQ0NzFdIGxjZDAtcG93ZXItZG9tYWluOiBQb3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwg bmV3IHZhbHVlIDI5MzcwOCBucwpbICAgIDIuMTE0OTcxXSBnM2QtcG93ZXItZG9tYWluOiBQ b3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwgbmV3IHZhbHVlIDQ3MDk1OSBucwpbICAgIDIu MTE1MzMwXSBtZmMtcG93ZXItZG9tYWluOiBQb3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwg bmV3IHZhbHVlIDMyNzk1OCBucwpbICAgIDIuMTE1NjYzXSBjYW0tcG93ZXItZG9tYWluOiBQ b3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwgbmV3IHZhbHVlIDMwNjMzMyBucwpbICAgIDIu MTE4MTQ5XSByZWdpc3RlcmVkIHRhc2tzdGF0cyB2ZXJzaW9uIDEKWyAgICAyLjEyMjMwOF0g aW5wdXQ6IHNvYzpncGlvLWtleXNAMCBhcyAvZGV2aWNlcy9zb2Mvc29jOmdwaW8ta2V5c0Aw L2lucHV0L2lucHV0MApbICAgIDIuMTk4MDQ2XSBzM2MtcnRjIDEwMDcwMDAwLnJ0Yzogc2V0 dGluZyBzeXN0ZW0gY2xvY2sgdG8gMjAwMC0wMS0wMSAwMDowMDowMCBVVEMgKDk0NjY4NDgw MCkKWyAgICAyLjIwNzY0Ml0gY2hhcmdlci1tYW5hZ2VyIHNvYzpjaGFyZ2VyLW1hbmFnZXJA OiBJZ25vcmluZyBmdWxsLWJhdHRlcnkgdm9sdGFnZSB0aHJlc2hvbGQgYXMgaXQgaXMgbm90 IHN1cHBsaWVkClsgICAgMi4yMTY1NTddIGNoYXJnZXItbWFuYWdlciBzb2M6Y2hhcmdlci1t YW5hZ2VyQDogSWdub3JpbmcgZnVsbC1iYXR0ZXJ5IGZ1bGwgY2FwYWNpdHkgdGhyZXNob2xk IGFzIGl0IGlzIG5vdCBzdXBwbGllZApbICAgIDIuMjI3MTQ3XSBjaGFyZ2VyLW1hbmFnZXIg c29jOmNoYXJnZXItbWFuYWdlckA6IENhbm5vdCBmaW5kIHBvd2VyIHN1cHBseSAibWF4MTcw NDAiClsgICAgMi4yNzc5NDZdIENQVWlkbGUgQ1BVMTogZ29pbmcgb2ZmClsgICAgMi4yNzgx MTBdIENQVWlkbGUgQ1BVMDogZ29pbmcgQUZUUgpbICAgIDIuMjc5NDc4XSBJbnRlcm5hbCBl cnJvcjogT29wcyAtIHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogMCBbIzFdIFBSRUVNUFQgU01Q IEFSTQpbICAgIDIuMjg2NzQyXSBNb2R1bGVzIGxpbmtlZCBpbjoKWyAgICAyLjI4OTc4M10g Q1BVOiAwIFBJRDogMCBDb21tOiBzd2FwcGVyLzAgTm90IHRhaW50ZWQgMy4xNi4wLXJjNC0w MDA5OC1nZWFhMGU0ZGFhYWJiLWRpcnR5ICMxNjAKWyAgICAyLjI5ODQ1OV0gdGFzazogYzA3 NzZkYTggdGk6IGMwNzZjMDAwIHRhc2sudGk6IGMwNzZjMDAwClsgICAgMi4zMDM4NDZdIFBD IGlzIGF0IGV4eW5vc19kb19pZGxlKzB4MzQvMHg4YwpbICAgIDIuMzA4MTgyXSBMUiBpcyBh dCBleHlub3NfZW50ZXJfYWZ0cisweDM4LzB4NTgKWyAgICAyLjMxMjc4Ml0gcGMgOiBbPGMw MDFmMjg4Pl0gICAgbHIgOiBbPGMwMDFmYmMwPl0gICAgcHNyOiA2MDAwMDE5MwpbICAgIDIu MzEyNzgyXSBzcCA6IGMwNzZkZTg0ICBpcCA6IGMwNTE1YTdjICBmcCA6IDAwMDAwMDAwClsg ICAgMi4zMjQyMzddIHIxMDogYzEwMTA5NDQgIHI5IDogZGVkMTY0NDAgIHI4IDogMDAwMDAw MGYKWyAgICAyLjMyOTQ0NV0gcjcgOiAwMDAwMDAwNyAgcjYgOiAwMDAwMDAwMCAgcjUgOiBj MDc2ZGVjYyAgcjQgOiAwMDAwMDAzMApbICAgIDIuMzM1OTU1XSByMyA6IGMwN2NkZTdjICBy MiA6IGMwN2NkZTg0ICByMSA6IDAwMDAwMDAxICByMCA6IDAwMDAwMDAxClsgICAgMi4zNDI0 NjddIEZsYWdzOiBuWkN2ICBJUlFzIG9mZiAgRklRcyBvbiAgTW9kZSBTVkNfMzIgIElTQSBB Uk0gIFNlZ21lbnQga2VybmVsClsgICAgMi4zNDk4NDRdIENvbnRyb2w6IDEwYzUzYzdkICBU YWJsZTogNDAwMDQwNmEgIERBQzogMDAwMDAwMTUKWyAgICAyLjM1NTU3Ml0gUHJvY2VzcyBz d2FwcGVyLzAgKHBpZDogMCwgc3RhY2sgbGltaXQgPSAweGMwNzZjMjQwKQpbICAgIDIuMzYx NTYxXSBTdGFjazogKDB4YzA3NmRlODQgdG8gMHhjMDc2ZTAwMCkKWyAgICAyLjM2NTkwNl0g ZGU4MDogICAgICAgICAgYzAwMWYyNTQgYzAwMWZiYzAgYzAwMWZiODggYzAzN2Y4NzggMDAw MDAwM2YgYzAwMTQyNGMgNWY0OTQwMDAKWyAgICAyLjM3NDA2NF0gZGVhMDogYzA3NmRlY2Mg NDAwMWVkODAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMTUgNDAwMDQwNmEg MTBjNTNjN2QKWyAgICAyLjM4MjIyNF0gZGVjMDogMDAwMGU0NDAgMDBmMDAwMDAgMDAwMDAw MDAgMDAwMDAwMDAgYzAzN2Y4NjQgYzA3ODVmYzAgZGZhYjMyODAgMDAwMDAwMDEKWyAgICAy LjM5MDM4M10gZGVlMDogZGVkMTY0NDAgYzEwMTA5NDQgZGVkMTY0NGMgYzAwMTQzMzggMDAw MDAwMGYgYzEwMTA5NDggYzA3OTExNDggYzAzN2Y5YjgKWyAgICAyLjM5ODU0Ml0gZGYwMDog ODc5Zjk0MTQgMDAwMDAwMDAgYzA3YWRkYzggZmZmZmZmZmYgZGZhYjMyODAgZGVkMTY0NDAg YzEwMTA5NDQgYzAzN2Q3MTQKWyAgICAyLjQwNjcwMV0gZGYyMDogODc5Zjk0MTQgMDAwMDAw MDAgYzA3NmMwMDAgYzAzN2YwMjAgZmZmZjAwMDAgMDAwMDAwMDEgZGZhYjMyODAgYzA3NmMw MDAKWyAgICAyLjQxNDg2MV0gZGY0MDogZmZmZmZmZmYgYzA3YWRkYzggYzEwMTA5NDQgYzAz N2Y2NzAgYzA3YmQ2NDAgYzA1MTVlMzQgMDAwMDAwMDEgZGVkMTY0NTAKWyAgICAyLjQyMzAy MF0gZGY2MDogZGZhYjMyODQgZGZhYjMyODAgYzA1MTVlMzQgMDAwMDAwMDEgYzA3NmMwMDAg YzA3NzQ0MmMgMDAwMDAwMDAgYzA3YWRkYzgKWyAgICAyLjQzMTE3OV0gZGY4MDogYzA3YmQ2 NDAgYzAwNmRkZTAgMDAwMDAwMDEgYzA3NmEyNzggMDAwMDAwMDAgYzA3YmM0NmMgYzA3NmRm YTQgYzA3NzQ4ZTgKWyAgICAyLjQzOTMzOV0gZGZhMDogYzA3Y2RiMDAgYzA3NWNjNWMgZGZl ZmM3ODAgNDAwMDQwNmEgNDEwZmMwNzMgMDAwMDAwMDAgMDAwMDAwMDAgYzAwNmUyMzAKWyAg ICAyLjQ0NzQ5OF0gZGZjMDogYzA3NzZkYTggYzA3MjViMWMgZmZmZmZmZmYgZmZmZmZmZmYg YzA3MjU2MDggMDAwMDAwMDAgMDAwMDAwMDAgYzA3NWNjNWMKWyAgICAyLjQ1NTY1Nl0gZGZl MDogMDAwMDAwMDAgYzA3Y2RkMTQgYzA3NzQzYjAgYzA3NWNjNTggYzA3Nzg4MjQgNDAwMDgw NzQgMDAwMDAwMDAgMDAwMDAwMDAKWyAgICAyLjQ2MzgyNF0gWzxjMDAxZjI4OD5dIChleHlu b3NfZG9faWRsZSkgZnJvbSBbPGMwMDFmYmMwPl0gKGV4eW5vc19lbnRlcl9hZnRyKzB4Mzgv MHg1OCkKWyAgICAyLjQ3MTk4MV0gWzxjMDAxZmJjMD5dIChleHlub3NfZW50ZXJfYWZ0cikg ZnJvbSBbPGMwMzdmODc4Pl0gKGlkbGVfYWZ0cl9maW5pc2hlcisweDE0LzB4MjApClsgICAg Mi40ODA0ODZdIFs8YzAzN2Y4Nzg+XSAoaWRsZV9hZnRyX2ZpbmlzaGVyKSBmcm9tIFs8YzAw MTQyNGM+XSAoY3B1X3N1c3BlbmRfYWJvcnQrMHgwLzB4MTQpClsgICAgMi40ODg5MDFdIFs8 YzAwMTQyNGM+XSAoY3B1X3N1c3BlbmRfYWJvcnQpIGZyb20gWzwwMDAwMDAwMD5dICggIChu dWxsKSkKWyAgICAyLjQ5NTY3M10gQ29kZTogZTM1MTAwMDEgMWFmZmZmZmIgZTU5ZjIwNGMg ZTU5ZjMwNGMgKGVlMWZjZjEwKQpbICAgIDIuNTAxNzQ4XSAtLS1bIGVuZCB0cmFjZSA2MmMw N2FjZTMwM2EzZmNlIF0tLS0KWyAgICAyLjUwNjM0Nl0gS2VybmVsIHBhbmljIC0gbm90IHN5 bmNpbmc6IEZhdGFsIGV4Y2VwdGlvbgpbICAgIDMuNjQ1NTUyXSBTTVA6IGZhaWxlZCB0byBz dG9wIHNlY29uZGFyeSBDUFVzClsgICAgMy42NDU2NTJdIC0tLVsgZW5kIEtlcm5lbCBwYW5p YyAtIG5vdCBzeW5jaW5nOiBGYXRhbCBleGNlcHRpb24KCgo= --------------020807090809030505090105 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel --------------020807090809030505090105-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: k.kozlowski@samsung.com (Krzysztof Kozlowski) Date: Thu, 10 Jul 2014 10:27:10 +0200 Subject: [PATCH v3 3/4] ARM: EXYNOS: cpuidle: add secure firmware support to AFTR mode code In-Reply-To: <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> References: <1404926274-18411-1-git-send-email-b.zolnierkie@samsung.com> <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> Message-ID: <53BE4E5E.1080803@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 09.07.2014 19:17, Bartlomiej Zolnierkiewicz wrote: > * Move cp15 registers saving to exynos_save_cp15() helper and add > additional helper usage to do_idle firmware method. > > * Use sysram_ns_base_addr + 0x24/0x20 addresses instead of the default > ones used by exynos_cpu_set_boot_vector() on boards with secure > firmware enabled. > > * Use do_idle firmware method instead of cpu_do_idle() on boards with > secure firmware enabled. > > Signed-off-by: Bartlomiej Zolnierkiewicz > Acked-by: Kyungmin Park > --- > v3: > - make exynos_enter_aftr() return a value > - add cp15 registers handling to do_idle firmware method > - set sysram_ns_base_addr + 0x24/0x20 in do_idle firmware method > - move calling of do_idle firmware method from cpuidle-exynos.c > to pm.c > > arch/arm/mach-exynos/common.h | 2 +- > arch/arm/mach-exynos/firmware.c | 26 ++++++++++++++++++-------- > arch/arm/mach-exynos/pm.c | 11 +++++++++-- > drivers/cpuidle/cpuidle-exynos.c | 6 +++--- > 4 files changed, 31 insertions(+), 14 deletions(-) > > diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h > index a6a200f..0829808 100644 > --- a/arch/arm/mach-exynos/common.h > +++ b/arch/arm/mach-exynos/common.h > @@ -170,7 +170,7 @@ extern int exynos_cpu_power_state(int cpu); > extern void exynos_cluster_power_down(int cluster); > extern void exynos_cluster_power_up(int cluster); > extern int exynos_cluster_power_state(int cluster); > -extern void exynos_enter_aftr(void); > +extern int exynos_enter_aftr(void); > > extern void s5p_init_cpu(void __iomem *cpuid_addr); > extern unsigned int samsung_rev(void); > diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c > index 53fbf5c..163f5b9 100644 > --- a/arch/arm/mach-exynos/firmware.c > +++ b/arch/arm/mach-exynos/firmware.c > @@ -24,13 +24,30 @@ > #include "smc.h" > > #define EXYNOS_SLEEP_MAGIC 0x00000bad > +#define EXYNOS_AFTR_MAGIC 0xfcba0d10 > #define EXYNOS_BOOT_ADDR 0x8 > #define EXYNOS_BOOT_FLAG 0xc > > +/* For Cortex-A9 Diagnostic and Power control register */ > +static unsigned int cp15_power; > +static unsigned int cp15_diag; > + > +static void exynos_save_cp15(void) > +{ > + /* Save Power control and Diagnostic registers */ > + asm ("mrc p15, 0, %0, c15, c0, 0\n" > + "mrc p15, 0, %1, c15, c0, 1\n" > + : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); Hi, On Exynos3250 I encounter "Oops - undefined instruction" on this asm while entering AFTR: [ 2.277946] CPUidle CPU1: going off [ 2.278110] CPUidle CPU0: going AFTR [ 2.279478] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP ARM Are you sure it should be called on each SoC? Full dmesg attached. Best regards, Krzysztof > +} > + > static int exynos_do_idle(unsigned long mode) > { > switch (mode) { > case FW_DO_IDLE_AFTR: > + exynos_save_cp15(); > + __raw_writel(virt_to_phys(exynos_cpu_resume), > + sysram_ns_base_addr + 0x24); > + __raw_writel(EXYNOS_AFTR_MAGIC, sysram_ns_base_addr + 0x20); > exynos_smc(SMC_CMD_CPU0AFTR, 0, 0, 0); > break; > case FW_DO_IDLE_SLEEP: > @@ -76,10 +93,6 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) > return 0; > } > > -/* For Cortex-A9 Diagnostic and Power control register */ > -static unsigned int cp15_power; > -static unsigned int cp15_diag; > - > static int exynos_cpu_suspend(unsigned long arg) > { > flush_cache_all(); > @@ -94,10 +107,7 @@ static int exynos_cpu_suspend(unsigned long arg) > > static int exynos_suspend(void) > { > - /* Save Power control and Diagnostic registers */ > - asm ("mrc p15, 0, %0, c15, c0, 0\n" > - "mrc p15, 0, %1, c15, c0, 1\n" > - : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); > + exynos_save_cp15(); > > writel(EXYNOS_SLEEP_MAGIC, sysram_ns_base_addr + EXYNOS_BOOT_FLAG); > writel(virt_to_phys(cpu_resume), > diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c > index c722454..af0d4bf 100644 > --- a/arch/arm/mach-exynos/pm.c > +++ b/arch/arm/mach-exynos/pm.c > @@ -201,12 +201,19 @@ static void exynos_cpu_set_boot_vector(long flags) > __raw_writel(flags, exynos_boot_vector_flag()); > } > > -void exynos_enter_aftr(void) > +int exynos_enter_aftr(void) > { > + int ret; > + > exynos_set_wakeupmask(0x0000ff3e); > - exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > /* Set value of power down register for aftr mode */ > exynos_sys_powerdown_conf(SYS_AFTR); > + > + ret = call_firmware_op(do_idle, FW_DO_IDLE_AFTR); > + if (ret == -ENOSYS) > + exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > + > + return ret; > } > > /* For Cortex-A9 Diagnostic and Power control register */ > diff --git a/drivers/cpuidle/cpuidle-exynos.c b/drivers/cpuidle/cpuidle-exynos.c > index 7c01512..c5b36d3 100644 > --- a/drivers/cpuidle/cpuidle-exynos.c > +++ b/drivers/cpuidle/cpuidle-exynos.c > @@ -18,12 +18,12 @@ > #include > #include > > -static void (*exynos_enter_aftr)(void); > +static int (*exynos_enter_aftr)(void); > > static int idle_finisher(unsigned long flags) > { > - exynos_enter_aftr(); > - cpu_do_idle(); > + if (exynos_enter_aftr() == -ENOSYS) > + cpu_do_idle(); > > return 1; > } > -------------- next part -------------- Elapsed time: 2.627 sec (0x7d44a4, 3125000Hz) Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.16.0-rc4-00098-geaa0e4daaabb-dirty (k.kozlowski at AMDC1943) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-12ubuntu1) ) #160 SMP PREEMPT Thu Jul 10 09:56:14 CEST 2014 [ 0.000000] CPU: ARMv7 Processor [410fc073] revision 3 (ARMv7), cr=10c53c7d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Running under secure firmware. [ 0.000000] PERCPU: Embedded 9 pages/cpu @dfab1000 s14656 r8192 d14016 u36864 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 129794 [ 0.000000] Kernel command line: console=ttySAC1,115200 loglevel=7 no_console_suspend init=/bin/sh root=/dev/mmcblk0p15 ro rootfstype=ext4 rootwait bootmode=normal pwron.reason=ap:swrst,pmic:pwron sec_debug.enable=1 sec_debug.enable_user=0 softlockup_panic=0 sec_log=0x200000 at 0x46000000 lcdtype=0 oops=panic pmic_info=1875 sysscope=0xee000000 cordon=a4be4deb59d0e10ddccd45c2afebdd1b serialno=410094f7534ab063 tizenboot.emmc_checksum=3 tizenboot.odin=1 bootloader.ver=localbuild bootloader.fb=0x48000000 bootloader.log=0x11fd at 0x46001636 [ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes) [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.000000] allocated 1046528 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Memory: 500912K/523264K available (5340K kernel code, 390K rwdata, 1940K rodata, 282K init, 8511K bss, 22352K reserved) [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xffc00000 - 0xffe00000 (2048 kB) [ 0.000000] vmalloc : 0xe0000000 - 0xff000000 ( 496 MB) [ 0.000000] lowmem : 0xc0000000 - 0xdff00000 ( 511 MB) [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.000000] .text : 0xc0008000 - 0xc072454c (7282 kB) [ 0.000000] .init : 0xc0725000 - 0xc076b940 ( 283 kB) [ 0.000000] .data : 0xc076c000 - 0xc07cdadc ( 391 kB) [ 0.000000] .bss : 0xc07cdadc - 0xc101daa4 (8512 kB) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] Preemptible hierarchical RCU implementation. [ 0.000000] RCU lockdep checking is enabled. [ 0.000000] Offload RCU callbacks from all CPUs [ 0.000000] Offload RCU callbacks from CPUs: 0-1. [ 0.000000] NR_IRQS:16 nr_irqs:16 16 [ 0.000015] sched_clock: 64 bits at 24MHz, resolution 41ns, wraps every 2863311519744ns [ 0.001224] Console: colour dummy device 80x30 [ 0.001280] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar [ 0.001292] ... MAX_LOCKDEP_SUBCLASSES: 8 [ 0.001304] ... MAX_LOCK_DEPTH: 48 [ 0.001315] ... MAX_LOCKDEP_KEYS: 8191 [ 0.001326] ... CLASSHASH_SIZE: 4096 [ 0.001337] ... MAX_LOCKDEP_ENTRIES: 32768 [ 0.001349] ... MAX_LOCKDEP_CHAINS: 65536 [ 0.001360] ... CHAINHASH_SIZE: 32768 [ 0.001371] memory used by lock dependency info: 5167 kB [ 0.001383] per task-struct memory footprint: 1152 bytes [ 0.001435] Calibrating delay loop... 1384.44 BogoMIPS (lpj=3461120) [ 0.095032] pid_max: default: 32768 minimum: 301 [ 0.095460] Security Framework initialized [ 0.095640] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.095662] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 0.099246] Initializing cgroup subsys memory [ 0.099560] Initializing cgroup subsys freezer [ 0.099678] Initializing cgroup subsys debug [ 0.099946] CPU: Testing write buffer coherency: ok [ 0.101558] CPU0: update cpu_capacity 1024 [ 0.101579] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 [ 0.101794] Setting up static identity map for 0x40512728 - 0x40512780 [ 0.147987] CPU1: Software reset [ 0.148227] CPU1: Booted secondary processor [ 0.174989] CPU1: update cpu_capacity 1024 [ 0.174998] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001 [ 0.175835] Brought up 2 CPUs [ 0.175865] SMP: Total of 2 processors activated. [ 0.175879] CPU: All CPU(s) started in SVC mode. [ 0.180386] devtmpfs: initialized [ 0.207275] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 3 [ 0.210686] pinctrl core: initialized pinctrl subsystem [ 0.214405] regulator-dummy: no parameters [ 0.275551] NET: Registered protocol family 16 [ 0.276331] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.279469] cpuidle: using governor ladder [ 0.279500] cpuidle: using governor menu [ 0.302487] samsung-pinctrl 11000000.pinctrl: node initial-state does not have either config or function configurations [ 0.309420] samsung-pinctrl 11400000.pinctrl: node initial-state does not have either config or function configurations [ 0.324909] hw-breakpoint: Failed to enable monitor mode on CPU 0. [ 0.324962] EXYNOS3250 PMU Initialize [ 0.371635] V_EMMC_2.8V-fixed: 2800 mV [ 0.397883] max14577 7-0025: Device type: 2 (ID: 0xe, vendor: 0x5) [ 0.419854] SAFEOUT: 4900 mV [ 0.434087] CHARGER: 45 <--> 475 mA at 475 mA [ 0.447298] UNUSED_LDO1: 2700 mV [ 0.454790] UNUSED_LDO2: 800 <--> 3950 mV at 1800 mV [ 0.459814] i2c-gpio 138d0000.i2c: using pins 147 (SDA) and 148 (SCL) [ 0.460688] s3c-i2c 13860000.i2c: slave address 0x10 [ 0.460717] s3c-i2c 13860000.i2c: bus frequency set to 97 KHz [ 0.469107] VAP_ALIVE_1.0V: 1000 mV [ 0.471929] VAP_M1_1.2V: 1200 mV [ 0.474480] VCC_AP_1.8V: 1800 mV [ 0.477202] VAP_AVDD_PLL1: 1800 mV [ 0.479719] VAP_PLL_ISO_1.0V: 1000 mV [ 0.482360] VAP_VMIPI_1.0V: 1000 mV [ 0.484944] VAP_AVDD_1.8V: 1800 mV [ 0.487823] VAP_USB_3.0V: 3000 mV [ 0.490440] V_LPDDR_1.2V: 1200 mV [ 0.492439] UNUSED_LDO10: 900 <--> 1100 mV at 1000 mV [ 0.495540] V_EMMC_1.8V: 1800 mV [ 0.499959] V_EMMC_2.8V: 2800 mV [ 0.503167] CAM_AVDD_2.8V: 2800 mV [ 0.505241] MOT_2.7V: 1800 <--> 2700 mV at 2700 mV [ 0.508272] TSP_AVDD_3.3V: 3300 mV [ 0.510835] LCD_VDD_3.3V: 3300 mV [ 0.514345] UNUSED_LDO17: 2800 mV [ 0.517396] CAM_AF_2.8V: 2800 mV [ 0.520497] TSP_VDD_1.8V: 1800 mV [ 0.523064] LCD_VDD_1.8V: 1800 mV [ 0.526080] CAM_IO_1.8V: 1800 mV [ 0.529113] CAM_DVDD_1.2V: 1200 mV [ 0.531781] HRM_VCC_1.8V: 1800 mV [ 0.536243] HRM_VCC_3.3V: 3300 mV [ 0.538250] UNUSED_LDO25: 1800 <--> 3375 mV at 3000 mV [ 0.540909] VAP_MIF_1.0V: 800 <--> 900 mV at 1000 mV [ 0.543458] VAP_ARM_1.0V: 850 <--> 1150 mV at 1000 mV [ 0.546008] VAP_INT3D_1.0V: 850 <--> 1000 mV at 1000 mV [ 0.548831] VCC_SUB_1.95V: 1950 mV [ 0.551473] VCC_SUB_1.35V: 1350 mV [ 0.553389] s3c-i2c 13860000.i2c: i2c-0: S3C I2C adapter [ 0.553877] s3c-i2c 13870000.i2c: slave address 0x10 [ 0.553904] s3c-i2c 13870000.i2c: bus frequency set to 390 KHz [ 0.556047] s3c-i2c 13870000.i2c: i2c-1: S3C I2C adapter [ 0.556390] s3c-i2c 13880000.i2c: slave address 0x10 [ 0.556417] s3c-i2c 13880000.i2c: bus frequency set to 390 KHz [ 0.558511] s3c-i2c 13880000.i2c: i2c-2: S3C I2C adapter [ 0.558841] Linux video capture interface: v2.00 [ 0.569695] Advanced Linux Sound Architecture Driver Initialized. [ 0.573686] Bluetooth: Core ver 2.19 [ 0.573868] NET: Registered protocol family 31 [ 0.573884] Bluetooth: HCI device and connection manager initialized [ 0.573995] Bluetooth: HCI socket layer initialized [ 0.574032] Bluetooth: L2CAP socket layer initialized [ 0.574234] Bluetooth: SCO socket layer initialized [ 0.574298] NetLabel: Initializing [ 0.574312] NetLabel: domain hash size = 128 [ 0.574324] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.574557] NetLabel: unlabeled traffic allowed by default [ 0.577734] Switched to clocksource mct-frc [ 0.734124] NET: Registered protocol family 2 [ 0.737661] TCP established hash table entries: 4096 (order: 2, 16384 bytes) [ 0.737880] TCP bind hash table entries: 4096 (order: 5, 147456 bytes) [ 0.739635] TCP: Hash tables configured (established 4096 bind 4096) [ 0.739825] TCP: reno registered [ 0.739860] UDP hash table entries: 256 (order: 2, 20480 bytes) [ 0.740114] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes) [ 0.741448] NET: Registered protocol family 1 [ 0.743311] hw perfevents: enabled with ARMv7 Cortex-A7 PMU driver, 5 counters available [ 0.748117] futex hash table entries: 512 (order: 3, 32768 bytes) [ 0.748471] audit: initializing netlink subsys (disabled) [ 0.748794] audit: type=2000 audit(0.745:1): initialized [ 0.786725] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.787693] fuse init (API version 7.23) [ 0.789158] msgmni has been set to 978 [ 0.798360] io scheduler noop registered [ 0.799048] io scheduler cfq registered (default) [ 0.818115] dma-pl330 12680000.pdma: Loaded driver for PL330 DMAC-1315632 [ 0.818142] dma-pl330 12680000.pdma: DBUFF-32x4bytes Num_Chans-8 Num_Peri-32 Num_Events-32 [ 0.834212] dma-pl330 12690000.pdma: Loaded driver for PL330 DMAC-1315632 [ 0.834239] dma-pl330 12690000.pdma: DBUFF-32x4bytes Num_Chans-8 Num_Peri-32 Num_Events-32 [ 0.836003] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 0.856996] 13800000.serial: ttySAC0 at MMIO 0x13800000 (irq = 141, base_baud = 0) is a S3C6400/10 [ 0.859297] 13810000.serial: ttySAC1 at MMIO 0x13810000 (irq = 142, base_baud = 0) is a S3C6400/10 [ 1.731921] console [ttySAC1] enabled [ 1.737731] [drm] Initialized drm 1.1.0 20060810 [ 1.743800] exynos-drm-ipp exynos-drm-ipp: drm ipp registered successfully. [ 1.758437] loop: module loaded [ 1.759097] s3c64xx-spi 13920000.spi: number of chip select lines not specified, assuming 1 chip select line [ 1.770034] s3c64xx-spi 13930000.spi: number of chip select lines not specified, assuming 1 chip select line [ 1.780267] s3c-rtc 10070000.rtc: rtc disabled, re-enabling [ 1.782554] s3c-rtc 10070000.rtc: rtc core: registered s3c as rtc0 [ 1.787455] s3c-rtc 10070000.rtc: warning: invalid RTC value so initializing it [ 1.804233] s5m-rtc s2mps14-rtc: rtc core: registered s5m-rtc as rtc1 [ 1.809492] max17040 1-0036: max17040_write_reg: err -111 [ 1.811637] max17040 1-0036: MAX17040 Fuel-Gauge Ver 00 [ 1.866540] Bluetooth: HCI UART driver ver 2.2 [ 1.866649] Bluetooth: HCI H4 protocol initialized [ 1.870643] cpufreq_cpu0: failed to get cpu0 regulator: -19 [ 1.878466] cpufreq: ondemand governor failed, too long transition latency of HW, fallback to performance governor [ 1.889034] exynos_cpuidle exynos_cpuidle: Probing CPU idle driver [ 1.893591] Synopsys Designware Multimedia Card Interface Driver [ 1.899810] dwmmc_exynos 12510000.mshc: Using internal DMA controller. [ 1.904768] dwmmc_exynos 12510000.mshc: Version ID is 260a [ 1.910821] dwmmc_exynos 12510000.mshc: DW MMC controller at irq 174, 64 bit host data width, 128 deep fifo [ 1.948134] dwmmc_exynos 12510000.mshc: 1 slots initialized [ 1.949843] logger: created 256K log 'log_main' [ 1.954583] logger: created 256K log 'log_events' [ 1.958286] logger: created 256K log 'log_radio' [ 1.962519] logger: created 256K log 'log_system' [ 2.020709] mmc0: BKOPS_EN bit is not set [ 2.023202] mmc_host mmc0: Bus speed (slot 0) = 50000000Hz (slot req 52000000Hz, actual 50000000HZ div = 0) [ 2.029336] mmc_host mmc0: Bus speed (slot 0) = 100000000Hz (slot req 52000000Hz, actual 50000000HZ div = 1) [ 2.038976] mmc0: new DDR MMC card at address 0001 [ 2.047969] mmcblk0: mmc0:0001 F5X5MA 3.64 GiB [ 2.052879] mmcblk0boot0: mmc0:0001 F5X5MA partition 1 4.00 MiB [ 2.054084] mmcblk0boot1: mmc0:0001 F5X5MA partition 2 4.00 MiB [ 2.060123] mmcblk0rpmb: mmc0:0001 F5X5MA partition 3 512 KiB [ 2.075249] mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 [ 2.084082] max14577-muic max77836-muic: device ID : 0x75 [ 2.095708] mmcblk0boot1: unknown partition table [ 2.096300] oprofile: using timer interrupt. [ 2.099831] mmcblk0boot0: unknown partition table [ 2.100197] TCP: cubic registered [ 2.100391] NET: Registered protocol family 17 [ 2.100524] NET: Registered protocol family 15 [ 2.111270] Bluetooth: RFCOMM TTY layer initialized [ 2.111325] Bluetooth: RFCOMM socket layer initialized [ 2.111380] Bluetooth: RFCOMM ver 1.11 [ 2.111466] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 2.111491] Bluetooth: BNEP socket layer initialized [ 2.111506] Bluetooth: HIDP (Human Interface Emulation) ver 1.2 [ 2.111530] Bluetooth: HIDP socket layer initialized [ 2.114145] isp-power-domain: Power-off latency exceeded, new value 437375 ns [ 2.114471] lcd0-power-domain: Power-off latency exceeded, new value 293708 ns [ 2.114971] g3d-power-domain: Power-off latency exceeded, new value 470959 ns [ 2.115330] mfc-power-domain: Power-off latency exceeded, new value 327958 ns [ 2.115663] cam-power-domain: Power-off latency exceeded, new value 306333 ns [ 2.118149] registered taskstats version 1 [ 2.122308] input: soc:gpio-keys at 0 as /devices/soc/soc:gpio-keys at 0/input/input0 [ 2.198046] s3c-rtc 10070000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800) [ 2.207642] charger-manager soc:charger-manager@: Ignoring full-battery voltage threshold as it is not supplied [ 2.216557] charger-manager soc:charger-manager@: Ignoring full-battery full capacity threshold as it is not supplied [ 2.227147] charger-manager soc:charger-manager@: Cannot find power supply "max17040" [ 2.277946] CPUidle CPU1: going off [ 2.278110] CPUidle CPU0: going AFTR [ 2.279478] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP ARM [ 2.286742] Modules linked in: [ 2.289783] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.16.0-rc4-00098-geaa0e4daaabb-dirty #160 [ 2.298459] task: c0776da8 ti: c076c000 task.ti: c076c000 [ 2.303846] PC is at exynos_do_idle+0x34/0x8c [ 2.308182] LR is at exynos_enter_aftr+0x38/0x58 [ 2.312782] pc : [] lr : [] psr: 60000193 [ 2.312782] sp : c076de84 ip : c0515a7c fp : 00000000 [ 2.324237] r10: c1010944 r9 : ded16440 r8 : 0000000f [ 2.329445] r7 : 00000007 r6 : 00000000 r5 : c076decc r4 : 00000030 [ 2.335955] r3 : c07cde7c r2 : c07cde84 r1 : 00000001 r0 : 00000001 [ 2.342467] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel [ 2.349844] Control: 10c53c7d Table: 4000406a DAC: 00000015 [ 2.355572] Process swapper/0 (pid: 0, stack limit = 0xc076c240) [ 2.361561] Stack: (0xc076de84 to 0xc076e000) [ 2.365906] de80: c001f254 c001fbc0 c001fb88 c037f878 0000003f c001424c 5f494000 [ 2.374064] dea0: c076decc 4001ed80 00000000 00000000 00000000 00000015 4000406a 10c53c7d [ 2.382224] dec0: 0000e440 00f00000 00000000 00000000 c037f864 c0785fc0 dfab3280 00000001 [ 2.390383] dee0: ded16440 c1010944 ded1644c c0014338 0000000f c1010948 c0791148 c037f9b8 [ 2.398542] df00: 879f9414 00000000 c07addc8 ffffffff dfab3280 ded16440 c1010944 c037d714 [ 2.406701] df20: 879f9414 00000000 c076c000 c037f020 ffff0000 00000001 dfab3280 c076c000 [ 2.414861] df40: ffffffff c07addc8 c1010944 c037f670 c07bd640 c0515e34 00000001 ded16450 [ 2.423020] df60: dfab3284 dfab3280 c0515e34 00000001 c076c000 c077442c 00000000 c07addc8 [ 2.431179] df80: c07bd640 c006dde0 00000001 c076a278 00000000 c07bc46c c076dfa4 c07748e8 [ 2.439339] dfa0: c07cdb00 c075cc5c dfefc780 4000406a 410fc073 00000000 00000000 c006e230 [ 2.447498] dfc0: c0776da8 c0725b1c ffffffff ffffffff c0725608 00000000 00000000 c075cc5c [ 2.455656] dfe0: 00000000 c07cdd14 c07743b0 c075cc58 c0778824 40008074 00000000 00000000 [ 2.463824] [] (exynos_do_idle) from [] (exynos_enter_aftr+0x38/0x58) [ 2.471981] [] (exynos_enter_aftr) from [] (idle_aftr_finisher+0x14/0x20) [ 2.480486] [] (idle_aftr_finisher) from [] (cpu_suspend_abort+0x0/0x14) [ 2.488901] [] (cpu_suspend_abort) from [<00000000>] ( (null)) [ 2.495673] Code: e3510001 1afffffb e59f204c e59f304c (ee1fcf10) [ 2.501748] ---[ end trace 62c07ace303a3fce ]--- [ 2.506346] Kernel panic - not syncing: Fatal exception [ 3.645552] SMP: failed to stop secondary CPUs [ 3.645652] ---[ end Kernel panic - not syncing: Fatal exception From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752360AbaGJI3D (ORCPT ); Thu, 10 Jul 2014 04:29:03 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:38393 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752338AbaGJI1T (ORCPT ); Thu, 10 Jul 2014 04:27:19 -0400 X-AuditID: cbfec7f4-b7fac6d000006cfe-2c-53be4e5f8dc6 Message-id: <53BE4E5E.1080803@samsung.com> Date: Thu, 10 Jul 2014 10:27:10 +0200 From: Krzysztof Kozlowski User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-version: 1.0 To: Bartlomiej Zolnierkiewicz , Kukjin Kim Cc: linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org, Sachin Kamat , Viresh Kumar , Tomasz Figa , Daniel Lezcano , "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, Kyungmin Park , linaro-kernel@lists.linaro.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v3 3/4] ARM: EXYNOS: cpuidle: add secure firmware support to AFTR mode code References: <1404926274-18411-1-git-send-email-b.zolnierkie@samsung.com> <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> In-reply-to: <1404926274-18411-4-git-send-email-b.zolnierkie@samsung.com> Content-type: multipart/mixed; boundary=------------020807090809030505090105 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprEIsWRmVeSWpSXmKPExsVy+t/xy7rxfvuCDT5fUbLYOGM9q8W8z7IW r18YWvQuuMpmcbbpDbvF+0PPmC02Pb7GanF51xw2i8+9RxgtZpzfx2Rx5vQlVouTf3oZLdbP eM1isfGrhwOfx51re9g8Ni+p97j97zGzx5ar7SwefVtWMXp83iQXwBbFZZOSmpNZllqkb5fA lXGnbTZbwdXHjBWHlv5gamCcd42xi5GTQ0LARKJjfyMbhC0mceHeeiCbi0NIYCmjxIyVE9lB EkICnxklWrcVdTFycPAKaEn8+JwMEmYRUJW4s24BC4jNJmAssXn5ErA5ogIREgf6nrGC2LwC ghI/Jt8DqxERiJO4+mQN2F5mgYXMEnMbTEBGCgskShy+rAextp1RonHHESaQGk4BT4mVU/qY IOp9JLa+f8Y2gZF/FpKxs5CkIGwzia6tXYwQtrzE9rdzmCFsV4ml81dB1ShKTOl+yA5hO0r8 +LGHfQEj+ypG0dTS5ILipPRcQ73ixNzi0rx0veT83E2MkLj7soNx8TGrQ4wCHIxKPLwatbuD hVgTy4orcw8xqgDNebRh9QVGKZa8/LxUJRHebXb7goV4UxIrq1KL8uOLSnNSiw8xMnFwSjUw br60876N80bD0zpGDx/76OxcH/8i+s+x1LZXR7YU8VyYV2Zm8SZMp90w6GPs7C1H9mxOXXD5 4B4T1Uau/CPvTXelOluv3bP7heatnt/Xb/qLCZytW/JdVHHSm6oso3VhM92OWs02lpL/Yy8j siaYU4pJZrOfzoZz8fwODVPK/MPnyJgvvy+drMRSnJFoqMVcVJwIANEfNE2lAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------020807090809030505090105 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 09.07.2014 19:17, Bartlomiej Zolnierkiewicz wrote: > * Move cp15 registers saving to exynos_save_cp15() helper and add > additional helper usage to do_idle firmware method. > > * Use sysram_ns_base_addr + 0x24/0x20 addresses instead of the default > ones used by exynos_cpu_set_boot_vector() on boards with secure > firmware enabled. > > * Use do_idle firmware method instead of cpu_do_idle() on boards with > secure firmware enabled. > > Signed-off-by: Bartlomiej Zolnierkiewicz > Acked-by: Kyungmin Park > --- > v3: > - make exynos_enter_aftr() return a value > - add cp15 registers handling to do_idle firmware method > - set sysram_ns_base_addr + 0x24/0x20 in do_idle firmware method > - move calling of do_idle firmware method from cpuidle-exynos.c > to pm.c > > arch/arm/mach-exynos/common.h | 2 +- > arch/arm/mach-exynos/firmware.c | 26 ++++++++++++++++++-------- > arch/arm/mach-exynos/pm.c | 11 +++++++++-- > drivers/cpuidle/cpuidle-exynos.c | 6 +++--- > 4 files changed, 31 insertions(+), 14 deletions(-) > > diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h > index a6a200f..0829808 100644 > --- a/arch/arm/mach-exynos/common.h > +++ b/arch/arm/mach-exynos/common.h > @@ -170,7 +170,7 @@ extern int exynos_cpu_power_state(int cpu); > extern void exynos_cluster_power_down(int cluster); > extern void exynos_cluster_power_up(int cluster); > extern int exynos_cluster_power_state(int cluster); > -extern void exynos_enter_aftr(void); > +extern int exynos_enter_aftr(void); > > extern void s5p_init_cpu(void __iomem *cpuid_addr); > extern unsigned int samsung_rev(void); > diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c > index 53fbf5c..163f5b9 100644 > --- a/arch/arm/mach-exynos/firmware.c > +++ b/arch/arm/mach-exynos/firmware.c > @@ -24,13 +24,30 @@ > #include "smc.h" > > #define EXYNOS_SLEEP_MAGIC 0x00000bad > +#define EXYNOS_AFTR_MAGIC 0xfcba0d10 > #define EXYNOS_BOOT_ADDR 0x8 > #define EXYNOS_BOOT_FLAG 0xc > > +/* For Cortex-A9 Diagnostic and Power control register */ > +static unsigned int cp15_power; > +static unsigned int cp15_diag; > + > +static void exynos_save_cp15(void) > +{ > + /* Save Power control and Diagnostic registers */ > + asm ("mrc p15, 0, %0, c15, c0, 0\n" > + "mrc p15, 0, %1, c15, c0, 1\n" > + : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); Hi, On Exynos3250 I encounter "Oops - undefined instruction" on this asm while entering AFTR: [ 2.277946] CPUidle CPU1: going off [ 2.278110] CPUidle CPU0: going AFTR [ 2.279478] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT SMP ARM Are you sure it should be called on each SoC? Full dmesg attached. Best regards, Krzysztof > +} > + > static int exynos_do_idle(unsigned long mode) > { > switch (mode) { > case FW_DO_IDLE_AFTR: > + exynos_save_cp15(); > + __raw_writel(virt_to_phys(exynos_cpu_resume), > + sysram_ns_base_addr + 0x24); > + __raw_writel(EXYNOS_AFTR_MAGIC, sysram_ns_base_addr + 0x20); > exynos_smc(SMC_CMD_CPU0AFTR, 0, 0, 0); > break; > case FW_DO_IDLE_SLEEP: > @@ -76,10 +93,6 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) > return 0; > } > > -/* For Cortex-A9 Diagnostic and Power control register */ > -static unsigned int cp15_power; > -static unsigned int cp15_diag; > - > static int exynos_cpu_suspend(unsigned long arg) > { > flush_cache_all(); > @@ -94,10 +107,7 @@ static int exynos_cpu_suspend(unsigned long arg) > > static int exynos_suspend(void) > { > - /* Save Power control and Diagnostic registers */ > - asm ("mrc p15, 0, %0, c15, c0, 0\n" > - "mrc p15, 0, %1, c15, c0, 1\n" > - : "=r" (cp15_power), "=r" (cp15_diag) : : "cc"); > + exynos_save_cp15(); > > writel(EXYNOS_SLEEP_MAGIC, sysram_ns_base_addr + EXYNOS_BOOT_FLAG); > writel(virt_to_phys(cpu_resume), > diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c > index c722454..af0d4bf 100644 > --- a/arch/arm/mach-exynos/pm.c > +++ b/arch/arm/mach-exynos/pm.c > @@ -201,12 +201,19 @@ static void exynos_cpu_set_boot_vector(long flags) > __raw_writel(flags, exynos_boot_vector_flag()); > } > > -void exynos_enter_aftr(void) > +int exynos_enter_aftr(void) > { > + int ret; > + > exynos_set_wakeupmask(0x0000ff3e); > - exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > /* Set value of power down register for aftr mode */ > exynos_sys_powerdown_conf(SYS_AFTR); > + > + ret = call_firmware_op(do_idle, FW_DO_IDLE_AFTR); > + if (ret == -ENOSYS) > + exynos_cpu_set_boot_vector(S5P_CHECK_AFTR); > + > + return ret; > } > > /* For Cortex-A9 Diagnostic and Power control register */ > diff --git a/drivers/cpuidle/cpuidle-exynos.c b/drivers/cpuidle/cpuidle-exynos.c > index 7c01512..c5b36d3 100644 > --- a/drivers/cpuidle/cpuidle-exynos.c > +++ b/drivers/cpuidle/cpuidle-exynos.c > @@ -18,12 +18,12 @@ > #include > #include > > -static void (*exynos_enter_aftr)(void); > +static int (*exynos_enter_aftr)(void); > > static int idle_finisher(unsigned long flags) > { > - exynos_enter_aftr(); > - cpu_do_idle(); > + if (exynos_enter_aftr() == -ENOSYS) > + cpu_do_idle(); > > return 1; > } > --------------020807090809030505090105 Content-Type: text/plain; charset=UTF-8; name="exynos3250-oops.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="exynos3250-oops.txt" RWxhcHNlZCB0aW1lOiAyLjYyNyBzZWMgKDB4N2Q0NGE0LCAzMTI1MDAwSHopClVuY29tcHJl c3NpbmcgTGludXguLi4gZG9uZSwgYm9vdGluZyB0aGUga2VybmVsLgpbICAgIDAuMDAwMDAw XSBCb290aW5nIExpbnV4IG9uIHBoeXNpY2FsIENQVSAweDAKWyAgICAwLjAwMDAwMF0gSW5p dGlhbGl6aW5nIGNncm91cCBzdWJzeXMgY3B1c2V0ClsgICAgMC4wMDAwMDBdIEluaXRpYWxp emluZyBjZ3JvdXAgc3Vic3lzIGNwdQpbICAgIDAuMDAwMDAwXSBJbml0aWFsaXppbmcgY2dy b3VwIHN1YnN5cyBjcHVhY2N0ClsgICAgMC4wMDAwMDBdIExpbnV4IHZlcnNpb24gMy4xNi4w LXJjNC0wMDA5OC1nZWFhMGU0ZGFhYWJiLWRpcnR5IChrLmtvemxvd3NraUBBTURDMTk0Mykg KGdjYyB2ZXJzaW9uIDQuNy4zIChVYnVudHUvTGluYXJvIDQuNy4zLTEydWJ1bnR1MSkgKSAj MTYwIFNNUCBQUkVFTVBUIFRodSBKdWwgMTAgMDk6NTY6MTQgQ0VTVCAyMDE0ClsgICAgMC4w MDAwMDBdIENQVTogQVJNdjcgUHJvY2Vzc29yIFs0MTBmYzA3M10gcmV2aXNpb24gMyAoQVJN djcpLCBjcj0xMGM1M2M3ZApbICAgIDAuMDAwMDAwXSBDUFU6IFBJUFQgLyBWSVBUIG5vbmFs aWFzaW5nIGRhdGEgY2FjaGUsIFZJUFQgYWxpYXNpbmcgaW5zdHJ1Y3Rpb24gY2FjaGUKWyAg ICAwLjAwMDAwMF0gTWVtb3J5IHBvbGljeTogRGF0YSBjYWNoZSB3cml0ZWFsbG9jClsgICAg MC4wMDAwMDBdIFJ1bm5pbmcgdW5kZXIgc2VjdXJlIGZpcm13YXJlLgpbICAgIDAuMDAwMDAw XSBQRVJDUFU6IEVtYmVkZGVkIDkgcGFnZXMvY3B1IEBkZmFiMTAwMCBzMTQ2NTYgcjgxOTIg ZDE0MDE2IHUzNjg2NApbICAgIDAuMDAwMDAwXSBCdWlsdCAxIHpvbmVsaXN0cyBpbiBab25l IG9yZGVyLCBtb2JpbGl0eSBncm91cGluZyBvbi4gIFRvdGFsIHBhZ2VzOiAxMjk3OTQKWyAg ICAwLjAwMDAwMF0gS2VybmVsIGNvbW1hbmQgbGluZTogY29uc29sZT10dHlTQUMxLDExNTIw MCBsb2dsZXZlbD03IG5vX2NvbnNvbGVfc3VzcGVuZCBpbml0PS9iaW4vc2ggcm9vdD0vZGV2 L21tY2JsazBwMTUgcm8gcm9vdGZzdHlwZT1leHQ0IHJvb3R3YWl0IGJvb3Rtb2RlPW5vcm1h bCAgcHdyb24ucmVhc29uPWFwOnN3cnN0LHBtaWM6cHdyb24gc2VjX2RlYnVnLmVuYWJsZT0x IHNlY19kZWJ1Zy5lbmFibGVfdXNlcj0wIHNvZnRsb2NrdXBfcGFuaWM9MCBzZWNfbG9nPTB4 MjAwMDAwQDB4NDYwMDAwMDAgbGNkdHlwZT0wIG9vcHM9cGFuaWMgcG1pY19pbmZvPTE4NzUg c3lzc2NvcGU9MHhlZTAwMDAwMCBjb3Jkb249YTRiZTRkZWI1OWQwZTEwZGRjY2Q0NWMyYWZl YmRkMWIgc2VyaWFsbm89NDEwMDk0Zjc1MzRhYjA2MyB0aXplbmJvb3QuZW1tY19jaGVja3N1 bT0zIHRpemVuYm9vdC5vZGluPTEgYm9vdGxvYWRlci52ZXI9bG9jYWxidWlsZCBib290bG9h ZGVyLmZiPTB4NDgwMDAwMDAgYm9vdGxvYWRlci5sb2c9MHgxMWZkQDB4NDYwMDE2MzYKWyAg ICAwLjAwMDAwMF0gUElEIGhhc2ggdGFibGUgZW50cmllczogMjA0OCAob3JkZXI6IDEsIDgx OTIgYnl0ZXMpClsgICAgMC4wMDAwMDBdIERlbnRyeSBjYWNoZSBoYXNoIHRhYmxlIGVudHJp ZXM6IDY1NTM2IChvcmRlcjogNiwgMjYyMTQ0IGJ5dGVzKQpbICAgIDAuMDAwMDAwXSBJbm9k ZS1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDMyNzY4IChvcmRlcjogNSwgMTMxMDcyIGJ5 dGVzKQpbICAgIDAuMDAwMDAwXSBhbGxvY2F0ZWQgMTA0NjUyOCBieXRlcyBvZiBwYWdlX2Nn cm91cApbICAgIDAuMDAwMDAwXSBwbGVhc2UgdHJ5ICdjZ3JvdXBfZGlzYWJsZT1tZW1vcnkn IG9wdGlvbiBpZiB5b3UgZG9uJ3Qgd2FudCBtZW1vcnkgY2dyb3VwcwpbICAgIDAuMDAwMDAw XSBNZW1vcnk6IDUwMDkxMksvNTIzMjY0SyBhdmFpbGFibGUgKDUzNDBLIGtlcm5lbCBjb2Rl LCAzOTBLIHJ3ZGF0YSwgMTk0MEsgcm9kYXRhLCAyODJLIGluaXQsIDg1MTFLIGJzcywgMjIz NTJLIHJlc2VydmVkKQpbICAgIDAuMDAwMDAwXSBWaXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5 b3V0OgpbICAgIDAuMDAwMDAwXSAgICAgdmVjdG9yICA6IDB4ZmZmZjAwMDAgLSAweGZmZmYx MDAwICAgKCAgIDQga0IpClsgICAgMC4wMDAwMDBdICAgICBmaXhtYXAgIDogMHhmZmMwMDAw MCAtIDB4ZmZlMDAwMDAgICAoMjA0OCBrQikKWyAgICAwLjAwMDAwMF0gICAgIHZtYWxsb2Mg OiAweGUwMDAwMDAwIC0gMHhmZjAwMDAwMCAgICggNDk2IE1CKQpbICAgIDAuMDAwMDAwXSAg ICAgbG93bWVtICA6IDB4YzAwMDAwMDAgLSAweGRmZjAwMDAwICAgKCA1MTEgTUIpClsgICAg MC4wMDAwMDBdICAgICBtb2R1bGVzIDogMHhiZjAwMDAwMCAtIDB4YzAwMDAwMDAgICAoICAx NiBNQikKWyAgICAwLjAwMDAwMF0gICAgICAgLnRleHQgOiAweGMwMDA4MDAwIC0gMHhjMDcy NDU0YyAgICg3MjgyIGtCKQpbICAgIDAuMDAwMDAwXSAgICAgICAuaW5pdCA6IDB4YzA3MjUw MDAgLSAweGMwNzZiOTQwICAgKCAyODMga0IpClsgICAgMC4wMDAwMDBdICAgICAgIC5kYXRh IDogMHhjMDc2YzAwMCAtIDB4YzA3Y2RhZGMgICAoIDM5MSBrQikKWyAgICAwLjAwMDAwMF0g ICAgICAgIC5ic3MgOiAweGMwN2NkYWRjIC0gMHhjMTAxZGFhNCAgICg4NTEyIGtCKQpbICAg IDAuMDAwMDAwXSBTTFVCOiBIV2FsaWduPTY0LCBPcmRlcj0wLTMsIE1pbk9iamVjdHM9MCwg Q1BVcz0yLCBOb2Rlcz0xClsgICAgMC4wMDAwMDBdIFByZWVtcHRpYmxlIGhpZXJhcmNoaWNh bCBSQ1UgaW1wbGVtZW50YXRpb24uClsgICAgMC4wMDAwMDBdICBSQ1UgbG9ja2RlcCBjaGVj a2luZyBpcyBlbmFibGVkLgpbICAgIDAuMDAwMDAwXSAgT2ZmbG9hZCBSQ1UgY2FsbGJhY2tz IGZyb20gYWxsIENQVXMKWyAgICAwLjAwMDAwMF0gIE9mZmxvYWQgUkNVIGNhbGxiYWNrcyBm cm9tIENQVXM6IDAtMS4KWyAgICAwLjAwMDAwMF0gTlJfSVJRUzoxNiBucl9pcnFzOjE2IDE2 ClsgICAgMC4wMDAwMTVdIHNjaGVkX2Nsb2NrOiA2NCBiaXRzIGF0IDI0TUh6LCByZXNvbHV0 aW9uIDQxbnMsIHdyYXBzIGV2ZXJ5IDI4NjMzMTE1MTk3NDRucwpbICAgIDAuMDAxMjI0XSBD b25zb2xlOiBjb2xvdXIgZHVtbXkgZGV2aWNlIDgweDMwClsgICAgMC4wMDEyODBdIExvY2sg ZGVwZW5kZW5jeSB2YWxpZGF0b3I6IENvcHlyaWdodCAoYykgMjAwNiBSZWQgSGF0LCBJbmMu LCBJbmdvIE1vbG5hcgpbICAgIDAuMDAxMjkyXSAuLi4gTUFYX0xPQ0tERVBfU1VCQ0xBU1NF UzogIDgKWyAgICAwLjAwMTMwNF0gLi4uIE1BWF9MT0NLX0RFUFRIOiAgICAgICAgICA0OApb ICAgIDAuMDAxMzE1XSAuLi4gTUFYX0xPQ0tERVBfS0VZUzogICAgICAgIDgxOTEKWyAgICAw LjAwMTMyNl0gLi4uIENMQVNTSEFTSF9TSVpFOiAgICAgICAgICA0MDk2ClsgICAgMC4wMDEz MzddIC4uLiBNQVhfTE9DS0RFUF9FTlRSSUVTOiAgICAgMzI3NjgKWyAgICAwLjAwMTM0OV0g Li4uIE1BWF9MT0NLREVQX0NIQUlOUzogICAgICA2NTUzNgpbICAgIDAuMDAxMzYwXSAuLi4g Q0hBSU5IQVNIX1NJWkU6ICAgICAgICAgIDMyNzY4ClsgICAgMC4wMDEzNzFdICBtZW1vcnkg dXNlZCBieSBsb2NrIGRlcGVuZGVuY3kgaW5mbzogNTE2NyBrQgpbICAgIDAuMDAxMzgzXSAg cGVyIHRhc2stc3RydWN0IG1lbW9yeSBmb290cHJpbnQ6IDExNTIgYnl0ZXMKWyAgICAwLjAw MTQzNV0gQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcC4uLiAxMzg0LjQ0IEJvZ29NSVBTIChscGo9 MzQ2MTEyMCkKWyAgICAwLjA5NTAzMl0gcGlkX21heDogZGVmYXVsdDogMzI3NjggbWluaW11 bTogMzAxClsgICAgMC4wOTU0NjBdIFNlY3VyaXR5IEZyYW1ld29yayBpbml0aWFsaXplZApb ICAgIDAuMDk1NjQwXSBNb3VudC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6IDEwMjQgKG9y ZGVyOiAwLCA0MDk2IGJ5dGVzKQpbICAgIDAuMDk1NjYyXSBNb3VudHBvaW50LWNhY2hlIGhh c2ggdGFibGUgZW50cmllczogMTAyNCAob3JkZXI6IDAsIDQwOTYgYnl0ZXMpClsgICAgMC4w OTkyNDZdIEluaXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIG1lbW9yeQpbICAgIDAuMDk5NTYw XSBJbml0aWFsaXppbmcgY2dyb3VwIHN1YnN5cyBmcmVlemVyClsgICAgMC4wOTk2NzhdIElu aXRpYWxpemluZyBjZ3JvdXAgc3Vic3lzIGRlYnVnClsgICAgMC4wOTk5NDZdIENQVTogVGVz dGluZyB3cml0ZSBidWZmZXIgY29oZXJlbmN5OiBvawpbICAgIDAuMTAxNTU4XSBDUFUwOiB1 cGRhdGUgY3B1X2NhcGFjaXR5IDEwMjQKWyAgICAwLjEwMTU3OV0gQ1BVMDogdGhyZWFkIC0x LCBjcHUgMCwgc29ja2V0IDAsIG1waWRyIDgwMDAwMDAwClsgICAgMC4xMDE3OTRdIFNldHRp bmcgdXAgc3RhdGljIGlkZW50aXR5IG1hcCBmb3IgMHg0MDUxMjcyOCAtIDB4NDA1MTI3ODAK WyAgICAwLjE0Nzk4N10gQ1BVMTogU29mdHdhcmUgcmVzZXQKWyAgICAwLjE0ODIyN10gQ1BV MTogQm9vdGVkIHNlY29uZGFyeSBwcm9jZXNzb3IKWyAgICAwLjE3NDk4OV0gQ1BVMTogdXBk YXRlIGNwdV9jYXBhY2l0eSAxMDI0ClsgICAgMC4xNzQ5OThdIENQVTE6IHRocmVhZCAtMSwg Y3B1IDEsIHNvY2tldCAwLCBtcGlkciA4MDAwMDAwMQpbICAgIDAuMTc1ODM1XSBCcm91Z2h0 IHVwIDIgQ1BVcwpbICAgIDAuMTc1ODY1XSBTTVA6IFRvdGFsIG9mIDIgcHJvY2Vzc29ycyBh Y3RpdmF0ZWQuClsgICAgMC4xNzU4NzldIENQVTogQWxsIENQVShzKSBzdGFydGVkIGluIFNW QyBtb2RlLgpbICAgIDAuMTgwMzg2XSBkZXZ0bXBmczogaW5pdGlhbGl6ZWQKWyAgICAwLjIw NzI3NV0gVkZQIHN1cHBvcnQgdjAuMzogaW1wbGVtZW50b3IgNDEgYXJjaGl0ZWN0dXJlIDIg cGFydCAzMCB2YXJpYW50IDcgcmV2IDMKWyAgICAwLjIxMDY4Nl0gcGluY3RybCBjb3JlOiBp bml0aWFsaXplZCBwaW5jdHJsIHN1YnN5c3RlbQpbICAgIDAuMjE0NDA1XSByZWd1bGF0b3It ZHVtbXk6IG5vIHBhcmFtZXRlcnMKWyAgICAwLjI3NTU1MV0gTkVUOiBSZWdpc3RlcmVkIHBy b3RvY29sIGZhbWlseSAxNgpbICAgIDAuMjc2MzMxXSBETUE6IHByZWFsbG9jYXRlZCAyNTYg S2lCIHBvb2wgZm9yIGF0b21pYyBjb2hlcmVudCBhbGxvY2F0aW9ucwpbICAgIDAuMjc5NDY5 XSBjcHVpZGxlOiB1c2luZyBnb3Zlcm5vciBsYWRkZXIKWyAgICAwLjI3OTUwMF0gY3B1aWRs ZTogdXNpbmcgZ292ZXJub3IgbWVudQpbICAgIDAuMzAyNDg3XSBzYW1zdW5nLXBpbmN0cmwg MTEwMDAwMDAucGluY3RybDogbm9kZSBpbml0aWFsLXN0YXRlIGRvZXMgbm90IGhhdmUgZWl0 aGVyIGNvbmZpZyBvciBmdW5jdGlvbiBjb25maWd1cmF0aW9ucwpbICAgIDAuMzA5NDIwXSBz YW1zdW5nLXBpbmN0cmwgMTE0MDAwMDAucGluY3RybDogbm9kZSBpbml0aWFsLXN0YXRlIGRv ZXMgbm90IGhhdmUgZWl0aGVyIGNvbmZpZyBvciBmdW5jdGlvbiBjb25maWd1cmF0aW9ucwpb ICAgIDAuMzI0OTA5XSBody1icmVha3BvaW50OiBGYWlsZWQgdG8gZW5hYmxlIG1vbml0b3Ig bW9kZSBvbiBDUFUgMC4KWyAgICAwLjMyNDk2Ml0gRVhZTk9TMzI1MCBQTVUgSW5pdGlhbGl6 ZQpbICAgIDAuMzcxNjM1XSBWX0VNTUNfMi44Vi1maXhlZDogMjgwMCBtVgpbICAgIDAuMzk3 ODgzXSBtYXgxNDU3NyA3LTAwMjU6IERldmljZSB0eXBlOiAyIChJRDogMHhlLCB2ZW5kb3I6 IDB4NSkKWyAgICAwLjQxOTg1NF0gU0FGRU9VVDogNDkwMCBtVgpbICAgIDAuNDM0MDg3XSBD SEFSR0VSOiA0NSA8LS0+IDQ3NSBtQSBhdCA0NzUgbUEKWyAgICAwLjQ0NzI5OF0gVU5VU0VE X0xETzE6IDI3MDAgbVYKWyAgICAwLjQ1NDc5MF0gVU5VU0VEX0xETzI6IDgwMCA8LS0+IDM5 NTAgbVYgYXQgMTgwMCBtVgpbICAgIDAuNDU5ODE0XSBpMmMtZ3BpbyAxMzhkMDAwMC5pMmM6 IHVzaW5nIHBpbnMgMTQ3IChTREEpIGFuZCAxNDggKFNDTCkKWyAgICAwLjQ2MDY4OF0gczNj LWkyYyAxMzg2MDAwMC5pMmM6IHNsYXZlIGFkZHJlc3MgMHgxMApbICAgIDAuNDYwNzE3XSBz M2MtaTJjIDEzODYwMDAwLmkyYzogYnVzIGZyZXF1ZW5jeSBzZXQgdG8gOTcgS0h6ClsgICAg MC40NjkxMDddIFZBUF9BTElWRV8xLjBWOiAxMDAwIG1WClsgICAgMC40NzE5MjldIFZBUF9N MV8xLjJWOiAxMjAwIG1WClsgICAgMC40NzQ0ODBdIFZDQ19BUF8xLjhWOiAxODAwIG1WClsg ICAgMC40NzcyMDJdIFZBUF9BVkREX1BMTDE6IDE4MDAgbVYKWyAgICAwLjQ3OTcxOV0gVkFQ X1BMTF9JU09fMS4wVjogMTAwMCBtVgpbICAgIDAuNDgyMzYwXSBWQVBfVk1JUElfMS4wVjog MTAwMCBtVgpbICAgIDAuNDg0OTQ0XSBWQVBfQVZERF8xLjhWOiAxODAwIG1WClsgICAgMC40 ODc4MjNdIFZBUF9VU0JfMy4wVjogMzAwMCBtVgpbICAgIDAuNDkwNDQwXSBWX0xQRERSXzEu MlY6IDEyMDAgbVYKWyAgICAwLjQ5MjQzOV0gVU5VU0VEX0xETzEwOiA5MDAgPC0tPiAxMTAw IG1WIGF0IDEwMDAgbVYKWyAgICAwLjQ5NTU0MF0gVl9FTU1DXzEuOFY6IDE4MDAgbVYKWyAg ICAwLjQ5OTk1OV0gVl9FTU1DXzIuOFY6IDI4MDAgbVYKWyAgICAwLjUwMzE2N10gQ0FNX0FW RERfMi44VjogMjgwMCBtVgpbICAgIDAuNTA1MjQxXSBNT1RfMi43VjogMTgwMCA8LS0+IDI3 MDAgbVYgYXQgMjcwMCBtVgpbICAgIDAuNTA4MjcyXSBUU1BfQVZERF8zLjNWOiAzMzAwIG1W ClsgICAgMC41MTA4MzVdIExDRF9WRERfMy4zVjogMzMwMCBtVgpbICAgIDAuNTE0MzQ1XSBV TlVTRURfTERPMTc6IDI4MDAgbVYKWyAgICAwLjUxNzM5Nl0gQ0FNX0FGXzIuOFY6IDI4MDAg bVYKWyAgICAwLjUyMDQ5N10gVFNQX1ZERF8xLjhWOiAxODAwIG1WClsgICAgMC41MjMwNjRd IExDRF9WRERfMS44VjogMTgwMCBtVgpbICAgIDAuNTI2MDgwXSBDQU1fSU9fMS44VjogMTgw MCBtVgpbICAgIDAuNTI5MTEzXSBDQU1fRFZERF8xLjJWOiAxMjAwIG1WClsgICAgMC41MzE3 ODFdIEhSTV9WQ0NfMS44VjogMTgwMCBtVgpbICAgIDAuNTM2MjQzXSBIUk1fVkNDXzMuM1Y6 IDMzMDAgbVYKWyAgICAwLjUzODI1MF0gVU5VU0VEX0xETzI1OiAxODAwIDwtLT4gMzM3NSBt ViBhdCAzMDAwIG1WClsgICAgMC41NDA5MDldIFZBUF9NSUZfMS4wVjogODAwIDwtLT4gOTAw IG1WIGF0IDEwMDAgbVYKWyAgICAwLjU0MzQ1OF0gVkFQX0FSTV8xLjBWOiA4NTAgPC0tPiAx MTUwIG1WIGF0IDEwMDAgbVYKWyAgICAwLjU0NjAwOF0gVkFQX0lOVDNEXzEuMFY6IDg1MCA8 LS0+IDEwMDAgbVYgYXQgMTAwMCBtVgpbICAgIDAuNTQ4ODMxXSBWQ0NfU1VCXzEuOTVWOiAx OTUwIG1WClsgICAgMC41NTE0NzNdIFZDQ19TVUJfMS4zNVY6IDEzNTAgbVYKWyAgICAwLjU1 MzM4OV0gczNjLWkyYyAxMzg2MDAwMC5pMmM6IGkyYy0wOiBTM0MgSTJDIGFkYXB0ZXIKWyAg ICAwLjU1Mzg3N10gczNjLWkyYyAxMzg3MDAwMC5pMmM6IHNsYXZlIGFkZHJlc3MgMHgxMApb ICAgIDAuNTUzOTA0XSBzM2MtaTJjIDEzODcwMDAwLmkyYzogYnVzIGZyZXF1ZW5jeSBzZXQg dG8gMzkwIEtIegpbICAgIDAuNTU2MDQ3XSBzM2MtaTJjIDEzODcwMDAwLmkyYzogaTJjLTE6 IFMzQyBJMkMgYWRhcHRlcgpbICAgIDAuNTU2MzkwXSBzM2MtaTJjIDEzODgwMDAwLmkyYzog c2xhdmUgYWRkcmVzcyAweDEwClsgICAgMC41NTY0MTddIHMzYy1pMmMgMTM4ODAwMDAuaTJj OiBidXMgZnJlcXVlbmN5IHNldCB0byAzOTAgS0h6ClsgICAgMC41NTg1MTFdIHMzYy1pMmMg MTM4ODAwMDAuaTJjOiBpMmMtMjogUzNDIEkyQyBhZGFwdGVyClsgICAgMC41NTg4NDFdIExp bnV4IHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlOiB2Mi4wMApbICAgIDAuNTY5Njk1XSBBZHZh bmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUgRHJpdmVyIEluaXRpYWxpemVkLgpbICAg IDAuNTczNjg2XSBCbHVldG9vdGg6IENvcmUgdmVyIDIuMTkKWyAgICAwLjU3Mzg2OF0gTkVU OiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAzMQpbICAgIDAuNTczODg0XSBCbHVldG9v dGg6IEhDSSBkZXZpY2UgYW5kIGNvbm5lY3Rpb24gbWFuYWdlciBpbml0aWFsaXplZApbICAg IDAuNTczOTk1XSBCbHVldG9vdGg6IEhDSSBzb2NrZXQgbGF5ZXIgaW5pdGlhbGl6ZWQKWyAg ICAwLjU3NDAzMl0gQmx1ZXRvb3RoOiBMMkNBUCBzb2NrZXQgbGF5ZXIgaW5pdGlhbGl6ZWQK WyAgICAwLjU3NDIzNF0gQmx1ZXRvb3RoOiBTQ08gc29ja2V0IGxheWVyIGluaXRpYWxpemVk ClsgICAgMC41NzQyOThdIE5ldExhYmVsOiBJbml0aWFsaXppbmcKWyAgICAwLjU3NDMxMl0g TmV0TGFiZWw6ICBkb21haW4gaGFzaCBzaXplID0gMTI4ClsgICAgMC41NzQzMjRdIE5ldExh YmVsOiAgcHJvdG9jb2xzID0gVU5MQUJFTEVEIENJUFNPdjQKWyAgICAwLjU3NDU1N10gTmV0 TGFiZWw6ICB1bmxhYmVsZWQgdHJhZmZpYyBhbGxvd2VkIGJ5IGRlZmF1bHQKWyAgICAwLjU3 NzczNF0gU3dpdGNoZWQgdG8gY2xvY2tzb3VyY2UgbWN0LWZyYwpbICAgIDAuNzM0MTI0XSBO RVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDIKWyAgICAwLjczNzY2MV0gVENQIGVz dGFibGlzaGVkIGhhc2ggdGFibGUgZW50cmllczogNDA5NiAob3JkZXI6IDIsIDE2Mzg0IGJ5 dGVzKQpbICAgIDAuNzM3ODgwXSBUQ1AgYmluZCBoYXNoIHRhYmxlIGVudHJpZXM6IDQwOTYg KG9yZGVyOiA1LCAxNDc0NTYgYnl0ZXMpClsgICAgMC43Mzk2MzVdIFRDUDogSGFzaCB0YWJs ZXMgY29uZmlndXJlZCAoZXN0YWJsaXNoZWQgNDA5NiBiaW5kIDQwOTYpClsgICAgMC43Mzk4 MjVdIFRDUDogcmVubyByZWdpc3RlcmVkClsgICAgMC43Mzk4NjBdIFVEUCBoYXNoIHRhYmxl IGVudHJpZXM6IDI1NiAob3JkZXI6IDIsIDIwNDgwIGJ5dGVzKQpbICAgIDAuNzQwMTE0XSBV RFAtTGl0ZSBoYXNoIHRhYmxlIGVudHJpZXM6IDI1NiAob3JkZXI6IDIsIDIwNDgwIGJ5dGVz KQpbICAgIDAuNzQxNDQ4XSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDEKWyAg ICAwLjc0MzMxMV0gaHcgcGVyZmV2ZW50czogZW5hYmxlZCB3aXRoIEFSTXY3IENvcnRleC1B NyBQTVUgZHJpdmVyLCA1IGNvdW50ZXJzIGF2YWlsYWJsZQpbICAgIDAuNzQ4MTE3XSBmdXRl eCBoYXNoIHRhYmxlIGVudHJpZXM6IDUxMiAob3JkZXI6IDMsIDMyNzY4IGJ5dGVzKQpbICAg IDAuNzQ4NDcxXSBhdWRpdDogaW5pdGlhbGl6aW5nIG5ldGxpbmsgc3Vic3lzIChkaXNhYmxl ZCkKWyAgICAwLjc0ODc5NF0gYXVkaXQ6IHR5cGU9MjAwMCBhdWRpdCgwLjc0NToxKTogaW5p dGlhbGl6ZWQKWyAgICAwLjc4NjcyNV0gc3F1YXNoZnM6IHZlcnNpb24gNC4wICgyMDA5LzAx LzMxKSBQaGlsbGlwIExvdWdoZXIKWyAgICAwLjc4NzY5M10gZnVzZSBpbml0IChBUEkgdmVy c2lvbiA3LjIzKQpbICAgIDAuNzg5MTU4XSBtc2dtbmkgaGFzIGJlZW4gc2V0IHRvIDk3OApb ICAgIDAuNzk4MzYwXSBpbyBzY2hlZHVsZXIgbm9vcCByZWdpc3RlcmVkClsgICAgMC43OTkw NDhdIGlvIHNjaGVkdWxlciBjZnEgcmVnaXN0ZXJlZCAoZGVmYXVsdCkKWyAgICAwLjgxODEx NV0gZG1hLXBsMzMwIDEyNjgwMDAwLnBkbWE6IExvYWRlZCBkcml2ZXIgZm9yIFBMMzMwIERN QUMtMTMxNTYzMgpbICAgIDAuODE4MTQyXSBkbWEtcGwzMzAgMTI2ODAwMDAucGRtYTogICAg ICAgICBEQlVGRi0zMng0Ynl0ZXMgTnVtX0NoYW5zLTggTnVtX1BlcmktMzIgTnVtX0V2ZW50 cy0zMgpbICAgIDAuODM0MjEyXSBkbWEtcGwzMzAgMTI2OTAwMDAucGRtYTogTG9hZGVkIGRy aXZlciBmb3IgUEwzMzAgRE1BQy0xMzE1NjMyClsgICAgMC44MzQyMzldIGRtYS1wbDMzMCAx MjY5MDAwMC5wZG1hOiAgICAgICAgIERCVUZGLTMyeDRieXRlcyBOdW1fQ2hhbnMtOCBOdW1f UGVyaS0zMiBOdW1fRXZlbnRzLTMyClsgICAgMC44MzYwMDNdIFNlcmlhbDogODI1MC8xNjU1 MCBkcml2ZXIsIDQgcG9ydHMsIElSUSBzaGFyaW5nIGRpc2FibGVkClsgICAgMC44NTY5OTZd IDEzODAwMDAwLnNlcmlhbDogdHR5U0FDMCBhdCBNTUlPIDB4MTM4MDAwMDAgKGlycSA9IDE0 MSwgYmFzZV9iYXVkID0gMCkgaXMgYSBTM0M2NDAwLzEwClsgICAgMC44NTkyOTddIDEzODEw MDAwLnNlcmlhbDogdHR5U0FDMSBhdCBNTUlPIDB4MTM4MTAwMDAgKGlycSA9IDE0MiwgYmFz ZV9iYXVkID0gMCkgaXMgYSBTM0M2NDAwLzEwClsgICAgMS43MzE5MjFdIGNvbnNvbGUgW3R0 eVNBQzFdIGVuYWJsZWQKWyAgICAxLjczNzczMV0gW2RybV0gSW5pdGlhbGl6ZWQgZHJtIDEu MS4wIDIwMDYwODEwClsgICAgMS43NDM4MDBdIGV4eW5vcy1kcm0taXBwIGV4eW5vcy1kcm0t aXBwOiBkcm0gaXBwIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LgpbICAgIDEuNzU4NDM3XSBs b29wOiBtb2R1bGUgbG9hZGVkClsgICAgMS43NTkwOTddIHMzYzY0eHgtc3BpIDEzOTIwMDAw LnNwaTogbnVtYmVyIG9mIGNoaXAgc2VsZWN0IGxpbmVzIG5vdCBzcGVjaWZpZWQsIGFzc3Vt aW5nIDEgY2hpcCBzZWxlY3QgbGluZQpbICAgIDEuNzcwMDM0XSBzM2M2NHh4LXNwaSAxMzkz MDAwMC5zcGk6IG51bWJlciBvZiBjaGlwIHNlbGVjdCBsaW5lcyBub3Qgc3BlY2lmaWVkLCBh c3N1bWluZyAxIGNoaXAgc2VsZWN0IGxpbmUKWyAgICAxLjc4MDI2N10gczNjLXJ0YyAxMDA3 MDAwMC5ydGM6IHJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmcKWyAgICAxLjc4MjU1NF0gczNj LXJ0YyAxMDA3MDAwMC5ydGM6IHJ0YyBjb3JlOiByZWdpc3RlcmVkIHMzYyBhcyBydGMwClsg ICAgMS43ODc0NTVdIHMzYy1ydGMgMTAwNzAwMDAucnRjOiB3YXJuaW5nOiBpbnZhbGlkIFJU QyB2YWx1ZSBzbyBpbml0aWFsaXppbmcgaXQKWyAgICAxLjgwNDIzM10gczVtLXJ0YyBzMm1w czE0LXJ0YzogcnRjIGNvcmU6IHJlZ2lzdGVyZWQgczVtLXJ0YyBhcyBydGMxClsgICAgMS44 MDk0OTJdIG1heDE3MDQwIDEtMDAzNjogbWF4MTcwNDBfd3JpdGVfcmVnOiBlcnIgLTExMQpb ICAgIDEuODExNjM3XSBtYXgxNzA0MCAxLTAwMzY6IE1BWDE3MDQwIEZ1ZWwtR2F1Z2UgVmVy IDAwClsgICAgMS44NjY1NDBdIEJsdWV0b290aDogSENJIFVBUlQgZHJpdmVyIHZlciAyLjIK WyAgICAxLjg2NjY0OV0gQmx1ZXRvb3RoOiBIQ0kgSDQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQK WyAgICAxLjg3MDY0M10gY3B1ZnJlcV9jcHUwOiBmYWlsZWQgdG8gZ2V0IGNwdTAgcmVndWxh dG9yOiAtMTkKWyAgICAxLjg3ODQ2Nl0gY3B1ZnJlcTogb25kZW1hbmQgZ292ZXJub3IgZmFp bGVkLCB0b28gbG9uZyB0cmFuc2l0aW9uIGxhdGVuY3kgb2YgSFcsIGZhbGxiYWNrIHRvIHBl cmZvcm1hbmNlIGdvdmVybm9yClsgICAgMS44ODkwMzRdIGV4eW5vc19jcHVpZGxlIGV4eW5v c19jcHVpZGxlOiBQcm9iaW5nIENQVSBpZGxlIGRyaXZlcgpbICAgIDEuODkzNTkxXSBTeW5v cHN5cyBEZXNpZ253YXJlIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgRHJpdmVyClsgICAg MS44OTk4MTBdIGR3bW1jX2V4eW5vcyAxMjUxMDAwMC5tc2hjOiBVc2luZyBpbnRlcm5hbCBE TUEgY29udHJvbGxlci4KWyAgICAxLjkwNDc2OF0gZHdtbWNfZXh5bm9zIDEyNTEwMDAwLm1z aGM6IFZlcnNpb24gSUQgaXMgMjYwYQpbICAgIDEuOTEwODIxXSBkd21tY19leHlub3MgMTI1 MTAwMDAubXNoYzogRFcgTU1DIGNvbnRyb2xsZXIgYXQgaXJxIDE3NCwgNjQgYml0IGhvc3Qg ZGF0YSB3aWR0aCwgMTI4IGRlZXAgZmlmbwpbICAgIDEuOTQ4MTM0XSBkd21tY19leHlub3Mg MTI1MTAwMDAubXNoYzogMSBzbG90cyBpbml0aWFsaXplZApbICAgIDEuOTQ5ODQzXSBsb2dn ZXI6IGNyZWF0ZWQgMjU2SyBsb2cgJ2xvZ19tYWluJwpbICAgIDEuOTU0NTgzXSBsb2dnZXI6 IGNyZWF0ZWQgMjU2SyBsb2cgJ2xvZ19ldmVudHMnClsgICAgMS45NTgyODZdIGxvZ2dlcjog Y3JlYXRlZCAyNTZLIGxvZyAnbG9nX3JhZGlvJwpbICAgIDEuOTYyNTE5XSBsb2dnZXI6IGNy ZWF0ZWQgMjU2SyBsb2cgJ2xvZ19zeXN0ZW0nClsgICAgMi4wMjA3MDldIG1tYzA6IEJLT1BT X0VOIGJpdCBpcyBub3Qgc2V0ClsgICAgMi4wMjMyMDJdIG1tY19ob3N0IG1tYzA6IEJ1cyBz cGVlZCAoc2xvdCAwKSA9IDUwMDAwMDAwSHogKHNsb3QgcmVxIDUyMDAwMDAwSHosIGFjdHVh bCA1MDAwMDAwMEhaIGRpdiA9IDApClsgICAgMi4wMjkzMzZdIG1tY19ob3N0IG1tYzA6IEJ1 cyBzcGVlZCAoc2xvdCAwKSA9IDEwMDAwMDAwMEh6IChzbG90IHJlcSA1MjAwMDAwMEh6LCBh Y3R1YWwgNTAwMDAwMDBIWiBkaXYgPSAxKQpbICAgIDIuMDM4OTc2XSBtbWMwOiBuZXcgRERS IE1NQyBjYXJkIGF0IGFkZHJlc3MgMDAwMQpbICAgIDIuMDQ3OTY5XSBtbWNibGswOiBtbWMw OjAwMDEgRjVYNU1BIDMuNjQgR2lCClsgICAgMi4wNTI4NzldIG1tY2JsazBib290MDogbW1j MDowMDAxIEY1WDVNQSBwYXJ0aXRpb24gMSA0LjAwIE1pQgpbICAgIDIuMDU0MDg0XSBtbWNi bGswYm9vdDE6IG1tYzA6MDAwMSBGNVg1TUEgcGFydGl0aW9uIDIgNC4wMCBNaUIKWyAgICAy LjA2MDEyM10gbW1jYmxrMHJwbWI6IG1tYzA6MDAwMSBGNVg1TUEgcGFydGl0aW9uIDMgNTEy IEtpQgpbICAgIDIuMDc1MjQ5XSAgbW1jYmxrMDogcDEgcDIgcDMgcDQgcDUgcDYgcDcgcDgg cDkgcDEwIHAxMSBwMTIgcDEzIHAxNCBwMTUKWyAgICAyLjA4NDA4Ml0gbWF4MTQ1NzctbXVp YyBtYXg3NzgzNi1tdWljOiBkZXZpY2UgSUQgOiAweDc1ClsgICAgMi4wOTU3MDhdICBtbWNi bGswYm9vdDE6IHVua25vd24gcGFydGl0aW9uIHRhYmxlClsgICAgMi4wOTYzMDBdIG9wcm9m aWxlOiB1c2luZyB0aW1lciBpbnRlcnJ1cHQuClsgICAgMi4wOTk4MzFdICBtbWNibGswYm9v dDA6IHVua25vd24gcGFydGl0aW9uIHRhYmxlClsgICAgMi4xMDAxOTddIFRDUDogY3ViaWMg cmVnaXN0ZXJlZApbICAgIDIuMTAwMzkxXSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFt aWx5IDE3ClsgICAgMi4xMDA1MjRdIE5FVDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkg MTUKWyAgICAyLjExMTI3MF0gQmx1ZXRvb3RoOiBSRkNPTU0gVFRZIGxheWVyIGluaXRpYWxp emVkClsgICAgMi4xMTEzMjVdIEJsdWV0b290aDogUkZDT01NIHNvY2tldCBsYXllciBpbml0 aWFsaXplZApbICAgIDIuMTExMzgwXSBCbHVldG9vdGg6IFJGQ09NTSB2ZXIgMS4xMQpbICAg IDIuMTExNDY2XSBCbHVldG9vdGg6IEJORVAgKEV0aGVybmV0IEVtdWxhdGlvbikgdmVyIDEu MwpbICAgIDIuMTExNDkxXSBCbHVldG9vdGg6IEJORVAgc29ja2V0IGxheWVyIGluaXRpYWxp emVkClsgICAgMi4xMTE1MDZdIEJsdWV0b290aDogSElEUCAoSHVtYW4gSW50ZXJmYWNlIEVt dWxhdGlvbikgdmVyIDEuMgpbICAgIDIuMTExNTMwXSBCbHVldG9vdGg6IEhJRFAgc29ja2V0 IGxheWVyIGluaXRpYWxpemVkClsgICAgMi4xMTQxNDVdIGlzcC1wb3dlci1kb21haW46IFBv d2VyLW9mZiBsYXRlbmN5IGV4Y2VlZGVkLCBuZXcgdmFsdWUgNDM3Mzc1IG5zClsgICAgMi4x MTQ0NzFdIGxjZDAtcG93ZXItZG9tYWluOiBQb3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwg bmV3IHZhbHVlIDI5MzcwOCBucwpbICAgIDIuMTE0OTcxXSBnM2QtcG93ZXItZG9tYWluOiBQ b3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwgbmV3IHZhbHVlIDQ3MDk1OSBucwpbICAgIDIu MTE1MzMwXSBtZmMtcG93ZXItZG9tYWluOiBQb3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwg bmV3IHZhbHVlIDMyNzk1OCBucwpbICAgIDIuMTE1NjYzXSBjYW0tcG93ZXItZG9tYWluOiBQ b3dlci1vZmYgbGF0ZW5jeSBleGNlZWRlZCwgbmV3IHZhbHVlIDMwNjMzMyBucwpbICAgIDIu MTE4MTQ5XSByZWdpc3RlcmVkIHRhc2tzdGF0cyB2ZXJzaW9uIDEKWyAgICAyLjEyMjMwOF0g aW5wdXQ6IHNvYzpncGlvLWtleXNAMCBhcyAvZGV2aWNlcy9zb2Mvc29jOmdwaW8ta2V5c0Aw L2lucHV0L2lucHV0MApbICAgIDIuMTk4MDQ2XSBzM2MtcnRjIDEwMDcwMDAwLnJ0Yzogc2V0 dGluZyBzeXN0ZW0gY2xvY2sgdG8gMjAwMC0wMS0wMSAwMDowMDowMCBVVEMgKDk0NjY4NDgw MCkKWyAgICAyLjIwNzY0Ml0gY2hhcmdlci1tYW5hZ2VyIHNvYzpjaGFyZ2VyLW1hbmFnZXJA OiBJZ25vcmluZyBmdWxsLWJhdHRlcnkgdm9sdGFnZSB0aHJlc2hvbGQgYXMgaXQgaXMgbm90 IHN1cHBsaWVkClsgICAgMi4yMTY1NTddIGNoYXJnZXItbWFuYWdlciBzb2M6Y2hhcmdlci1t YW5hZ2VyQDogSWdub3JpbmcgZnVsbC1iYXR0ZXJ5IGZ1bGwgY2FwYWNpdHkgdGhyZXNob2xk IGFzIGl0IGlzIG5vdCBzdXBwbGllZApbICAgIDIuMjI3MTQ3XSBjaGFyZ2VyLW1hbmFnZXIg c29jOmNoYXJnZXItbWFuYWdlckA6IENhbm5vdCBmaW5kIHBvd2VyIHN1cHBseSAibWF4MTcw NDAiClsgICAgMi4yNzc5NDZdIENQVWlkbGUgQ1BVMTogZ29pbmcgb2ZmClsgICAgMi4yNzgx MTBdIENQVWlkbGUgQ1BVMDogZ29pbmcgQUZUUgpbICAgIDIuMjc5NDc4XSBJbnRlcm5hbCBl cnJvcjogT29wcyAtIHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogMCBbIzFdIFBSRUVNUFQgU01Q IEFSTQpbICAgIDIuMjg2NzQyXSBNb2R1bGVzIGxpbmtlZCBpbjoKWyAgICAyLjI4OTc4M10g Q1BVOiAwIFBJRDogMCBDb21tOiBzd2FwcGVyLzAgTm90IHRhaW50ZWQgMy4xNi4wLXJjNC0w MDA5OC1nZWFhMGU0ZGFhYWJiLWRpcnR5ICMxNjAKWyAgICAyLjI5ODQ1OV0gdGFzazogYzA3 NzZkYTggdGk6IGMwNzZjMDAwIHRhc2sudGk6IGMwNzZjMDAwClsgICAgMi4zMDM4NDZdIFBD IGlzIGF0IGV4eW5vc19kb19pZGxlKzB4MzQvMHg4YwpbICAgIDIuMzA4MTgyXSBMUiBpcyBh dCBleHlub3NfZW50ZXJfYWZ0cisweDM4LzB4NTgKWyAgICAyLjMxMjc4Ml0gcGMgOiBbPGMw MDFmMjg4Pl0gICAgbHIgOiBbPGMwMDFmYmMwPl0gICAgcHNyOiA2MDAwMDE5MwpbICAgIDIu MzEyNzgyXSBzcCA6IGMwNzZkZTg0ICBpcCA6IGMwNTE1YTdjICBmcCA6IDAwMDAwMDAwClsg ICAgMi4zMjQyMzddIHIxMDogYzEwMTA5NDQgIHI5IDogZGVkMTY0NDAgIHI4IDogMDAwMDAw MGYKWyAgICAyLjMyOTQ0NV0gcjcgOiAwMDAwMDAwNyAgcjYgOiAwMDAwMDAwMCAgcjUgOiBj MDc2ZGVjYyAgcjQgOiAwMDAwMDAzMApbICAgIDIuMzM1OTU1XSByMyA6IGMwN2NkZTdjICBy MiA6IGMwN2NkZTg0ICByMSA6IDAwMDAwMDAxICByMCA6IDAwMDAwMDAxClsgICAgMi4zNDI0 NjddIEZsYWdzOiBuWkN2ICBJUlFzIG9mZiAgRklRcyBvbiAgTW9kZSBTVkNfMzIgIElTQSBB Uk0gIFNlZ21lbnQga2VybmVsClsgICAgMi4zNDk4NDRdIENvbnRyb2w6IDEwYzUzYzdkICBU YWJsZTogNDAwMDQwNmEgIERBQzogMDAwMDAwMTUKWyAgICAyLjM1NTU3Ml0gUHJvY2VzcyBz d2FwcGVyLzAgKHBpZDogMCwgc3RhY2sgbGltaXQgPSAweGMwNzZjMjQwKQpbICAgIDIuMzYx NTYxXSBTdGFjazogKDB4YzA3NmRlODQgdG8gMHhjMDc2ZTAwMCkKWyAgICAyLjM2NTkwNl0g ZGU4MDogICAgICAgICAgYzAwMWYyNTQgYzAwMWZiYzAgYzAwMWZiODggYzAzN2Y4NzggMDAw MDAwM2YgYzAwMTQyNGMgNWY0OTQwMDAKWyAgICAyLjM3NDA2NF0gZGVhMDogYzA3NmRlY2Mg NDAwMWVkODAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMTUgNDAwMDQwNmEg MTBjNTNjN2QKWyAgICAyLjM4MjIyNF0gZGVjMDogMDAwMGU0NDAgMDBmMDAwMDAgMDAwMDAw MDAgMDAwMDAwMDAgYzAzN2Y4NjQgYzA3ODVmYzAgZGZhYjMyODAgMDAwMDAwMDEKWyAgICAy LjM5MDM4M10gZGVlMDogZGVkMTY0NDAgYzEwMTA5NDQgZGVkMTY0NGMgYzAwMTQzMzggMDAw MDAwMGYgYzEwMTA5NDggYzA3OTExNDggYzAzN2Y5YjgKWyAgICAyLjM5ODU0Ml0gZGYwMDog ODc5Zjk0MTQgMDAwMDAwMDAgYzA3YWRkYzggZmZmZmZmZmYgZGZhYjMyODAgZGVkMTY0NDAg YzEwMTA5NDQgYzAzN2Q3MTQKWyAgICAyLjQwNjcwMV0gZGYyMDogODc5Zjk0MTQgMDAwMDAw MDAgYzA3NmMwMDAgYzAzN2YwMjAgZmZmZjAwMDAgMDAwMDAwMDEgZGZhYjMyODAgYzA3NmMw MDAKWyAgICAyLjQxNDg2MV0gZGY0MDogZmZmZmZmZmYgYzA3YWRkYzggYzEwMTA5NDQgYzAz N2Y2NzAgYzA3YmQ2NDAgYzA1MTVlMzQgMDAwMDAwMDEgZGVkMTY0NTAKWyAgICAyLjQyMzAy MF0gZGY2MDogZGZhYjMyODQgZGZhYjMyODAgYzA1MTVlMzQgMDAwMDAwMDEgYzA3NmMwMDAg YzA3NzQ0MmMgMDAwMDAwMDAgYzA3YWRkYzgKWyAgICAyLjQzMTE3OV0gZGY4MDogYzA3YmQ2 NDAgYzAwNmRkZTAgMDAwMDAwMDEgYzA3NmEyNzggMDAwMDAwMDAgYzA3YmM0NmMgYzA3NmRm YTQgYzA3NzQ4ZTgKWyAgICAyLjQzOTMzOV0gZGZhMDogYzA3Y2RiMDAgYzA3NWNjNWMgZGZl ZmM3ODAgNDAwMDQwNmEgNDEwZmMwNzMgMDAwMDAwMDAgMDAwMDAwMDAgYzAwNmUyMzAKWyAg ICAyLjQ0NzQ5OF0gZGZjMDogYzA3NzZkYTggYzA3MjViMWMgZmZmZmZmZmYgZmZmZmZmZmYg YzA3MjU2MDggMDAwMDAwMDAgMDAwMDAwMDAgYzA3NWNjNWMKWyAgICAyLjQ1NTY1Nl0gZGZl MDogMDAwMDAwMDAgYzA3Y2RkMTQgYzA3NzQzYjAgYzA3NWNjNTggYzA3Nzg4MjQgNDAwMDgw NzQgMDAwMDAwMDAgMDAwMDAwMDAKWyAgICAyLjQ2MzgyNF0gWzxjMDAxZjI4OD5dIChleHlu b3NfZG9faWRsZSkgZnJvbSBbPGMwMDFmYmMwPl0gKGV4eW5vc19lbnRlcl9hZnRyKzB4Mzgv MHg1OCkKWyAgICAyLjQ3MTk4MV0gWzxjMDAxZmJjMD5dIChleHlub3NfZW50ZXJfYWZ0cikg ZnJvbSBbPGMwMzdmODc4Pl0gKGlkbGVfYWZ0cl9maW5pc2hlcisweDE0LzB4MjApClsgICAg Mi40ODA0ODZdIFs8YzAzN2Y4Nzg+XSAoaWRsZV9hZnRyX2ZpbmlzaGVyKSBmcm9tIFs8YzAw MTQyNGM+XSAoY3B1X3N1c3BlbmRfYWJvcnQrMHgwLzB4MTQpClsgICAgMi40ODg5MDFdIFs8 YzAwMTQyNGM+XSAoY3B1X3N1c3BlbmRfYWJvcnQpIGZyb20gWzwwMDAwMDAwMD5dICggIChu dWxsKSkKWyAgICAyLjQ5NTY3M10gQ29kZTogZTM1MTAwMDEgMWFmZmZmZmIgZTU5ZjIwNGMg ZTU5ZjMwNGMgKGVlMWZjZjEwKQpbICAgIDIuNTAxNzQ4XSAtLS1bIGVuZCB0cmFjZSA2MmMw N2FjZTMwM2EzZmNlIF0tLS0KWyAgICAyLjUwNjM0Nl0gS2VybmVsIHBhbmljIC0gbm90IHN5 bmNpbmc6IEZhdGFsIGV4Y2VwdGlvbgpbICAgIDMuNjQ1NTUyXSBTTVA6IGZhaWxlZCB0byBz dG9wIHNlY29uZGFyeSBDUFVzClsgICAgMy42NDU2NTJdIC0tLVsgZW5kIEtlcm5lbCBwYW5p YyAtIG5vdCBzeW5jaW5nOiBGYXRhbCBleGNlcHRpb24KCgo= --------------020807090809030505090105--