From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Return-Path: Sender: Daniel Vetter Date: Thu, 13 Sep 2018 15:33:46 +0200 From: Daniel Vetter To: Christophe Leroy Cc: Bartlomiej Zolnierkiewicz , Benjamin Herrenschmidt , Dominik Brodowski , Geoff Levand , Jens Axboe , Kumar Gala , Li Yang , Michael Ellerman , Nicholas Piggin , Paul Mackerras , Scott Wood , aneesh.kumar@linux.vnet.ibm.com, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-block@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2 02/24] drivers/video/fbdev: use ioremap_wc/wt() instead of __ioremap() Message-ID: <20180913133346.GD11082@phenom.ffwll.local> References: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> List-ID: On Wed, Sep 12, 2018 at 03:58:17PM +0000, Christophe Leroy wrote: > _PAGE_NO_CACHE is a platform specific flag. In addition, this flag > is misleading because one would think it requests a noncached page > whereas a noncached page is _PAGE_NO_CACHE | _PAGE_GUARDED > > _PAGE_NO_CACHE alone means write combined noncached page, so lets > use ioremap_wc() instead. > > _PAGE_WRITETHRU is also platform specific flag. Use ioremap_wt() > instead. > > Signed-off-by: Christophe Leroy I wondered why this all showed up in my gfx inbox, then spotted this patch here. I trust you way more on the _PAGE_ flags than me, but this looks reasonable. Acked-by: Daniel Vetter > --- > drivers/video/fbdev/chipsfb.c | 3 +-- > drivers/video/fbdev/controlfb.c | 5 +---- > drivers/video/fbdev/platinumfb.c | 5 +---- > drivers/video/fbdev/valkyriefb.c | 12 ++++++------ > 4 files changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c > index f103665cad43..40182ed85648 100644 > --- a/drivers/video/fbdev/chipsfb.c > +++ b/drivers/video/fbdev/chipsfb.c > @@ -27,7 +27,6 @@ > #include > #include > #include > -#include > > #ifdef CONFIG_PMAC_BACKLIGHT > #include > @@ -401,7 +400,7 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) > #endif /* CONFIG_PMAC_BACKLIGHT */ > > #ifdef CONFIG_PPC > - p->screen_base = __ioremap(addr, 0x200000, _PAGE_NO_CACHE); > + p->screen_base = ioremap_wc(addr, 0x200000); > #else > p->screen_base = ioremap(addr, 0x200000); > #endif > diff --git a/drivers/video/fbdev/controlfb.c b/drivers/video/fbdev/controlfb.c > index 8d14b29aafea..9cb0ef7ac29e 100644 > --- a/drivers/video/fbdev/controlfb.c > +++ b/drivers/video/fbdev/controlfb.c > @@ -48,9 +48,7 @@ > #include > #include > #include > -#include > #include > -#include > #include > > #include "macmodes.h" > @@ -715,8 +713,7 @@ static int __init control_of_init(struct device_node *dp) > goto error_out; > } > /* map at most 8MB for the frame buffer */ > - p->frame_buffer = __ioremap(p->frame_buffer_phys, 0x800000, > - _PAGE_WRITETHRU); > + p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000); > > if (!p->control_regs_phys || > !request_mem_region(p->control_regs_phys, p->control_regs_size, > diff --git a/drivers/video/fbdev/platinumfb.c b/drivers/video/fbdev/platinumfb.c > index 377d3399a3ad..bf6b7fb83cf4 100644 > --- a/drivers/video/fbdev/platinumfb.c > +++ b/drivers/video/fbdev/platinumfb.c > @@ -32,9 +32,7 @@ > #include > #include > #include > -#include > #include > -#include > > #include "macmodes.h" > #include "platinumfb.h" > @@ -577,8 +575,7 @@ static int platinumfb_probe(struct platform_device* odev) > > /* frame buffer - map only 4MB */ > pinfo->frame_buffer_phys = pinfo->rsrc_fb.start; > - pinfo->frame_buffer = __ioremap(pinfo->rsrc_fb.start, 0x400000, > - _PAGE_WRITETHRU); > + pinfo->frame_buffer = ioremap_wt(pinfo->rsrc_fb.start, 0x400000); > pinfo->base_frame_buffer = pinfo->frame_buffer; > > /* registers */ > diff --git a/drivers/video/fbdev/valkyriefb.c b/drivers/video/fbdev/valkyriefb.c > index 275fb98236d3..d51c3a8009cb 100644 > --- a/drivers/video/fbdev/valkyriefb.c > +++ b/drivers/video/fbdev/valkyriefb.c > @@ -54,13 +54,11 @@ > #include > #include > #include > -#include > #ifdef CONFIG_MAC > #include > #else > #include > #endif > -#include > > #include "macmodes.h" > #include "valkyriefb.h" > @@ -318,7 +316,7 @@ static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p) > int __init valkyriefb_init(void) > { > struct fb_info_valkyrie *p; > - unsigned long frame_buffer_phys, cmap_regs_phys, flags; > + unsigned long frame_buffer_phys, cmap_regs_phys; > int err; > char *option = NULL; > > @@ -337,7 +335,6 @@ int __init valkyriefb_init(void) > /* Hardcoded addresses... welcome to 68k Macintosh country :-) */ > frame_buffer_phys = 0xf9000000; > cmap_regs_phys = 0x50f24000; > - flags = IOMAP_NOCACHE_SER; /* IOMAP_WRITETHROUGH?? */ > #else /* ppc (!CONFIG_MAC) */ > { > struct device_node *dp; > @@ -354,7 +351,6 @@ int __init valkyriefb_init(void) > > frame_buffer_phys = r.start; > cmap_regs_phys = r.start + 0x304000; > - flags = _PAGE_WRITETHRU; > } > #endif /* ppc (!CONFIG_MAC) */ > > @@ -369,7 +365,11 @@ int __init valkyriefb_init(void) > } > p->total_vram = 0x100000; > p->frame_buffer_phys = frame_buffer_phys; > - p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags); > +#ifdef CONFIG_MAC > + p->frame_buffer = ioremap_nocache(frame_buffer_phys, p->total_vram); > +#else > + p->frame_buffer = ioremap_wt(frame_buffer_phys, p->total_vram); > +#endif > p->cmap_regs_phys = cmap_regs_phys; > p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); > p->valkyrie_regs_phys = cmap_regs_phys+0x6000; > -- > 2.13.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Date: Thu, 13 Sep 2018 13:33:46 +0000 Subject: Re: [PATCH v2 02/24] drivers/video/fbdev: use ioremap_wc/wt() instead of __ioremap() Message-Id: <20180913133346.GD11082@phenom.ffwll.local> List-Id: References: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> In-Reply-To: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Christophe Leroy Cc: Jens Axboe , linux-block@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Bartlomiej Zolnierkiewicz , Geoff Levand , dri-devel@lists.freedesktop.org, Kumar Gala , Dominik Brodowski , Li Yang , Scott Wood , Paul Mackerras , Nicholas Piggin , Michael Ellerman , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, aneesh.kumar@linux.vnet.ibm.com On Wed, Sep 12, 2018 at 03:58:17PM +0000, Christophe Leroy wrote: > _PAGE_NO_CACHE is a platform specific flag. In addition, this flag > is misleading because one would think it requests a noncached page > whereas a noncached page is _PAGE_NO_CACHE | _PAGE_GUARDED > > _PAGE_NO_CACHE alone means write combined noncached page, so lets > use ioremap_wc() instead. > > _PAGE_WRITETHRU is also platform specific flag. Use ioremap_wt() > instead. > > Signed-off-by: Christophe Leroy I wondered why this all showed up in my gfx inbox, then spotted this patch here. I trust you way more on the _PAGE_ flags than me, but this looks reasonable. Acked-by: Daniel Vetter > --- > drivers/video/fbdev/chipsfb.c | 3 +-- > drivers/video/fbdev/controlfb.c | 5 +---- > drivers/video/fbdev/platinumfb.c | 5 +---- > drivers/video/fbdev/valkyriefb.c | 12 ++++++------ > 4 files changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c > index f103665cad43..40182ed85648 100644 > --- a/drivers/video/fbdev/chipsfb.c > +++ b/drivers/video/fbdev/chipsfb.c > @@ -27,7 +27,6 @@ > #include > #include > #include > -#include > > #ifdef CONFIG_PMAC_BACKLIGHT > #include > @@ -401,7 +400,7 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) > #endif /* CONFIG_PMAC_BACKLIGHT */ > > #ifdef CONFIG_PPC > - p->screen_base = __ioremap(addr, 0x200000, _PAGE_NO_CACHE); > + p->screen_base = ioremap_wc(addr, 0x200000); > #else > p->screen_base = ioremap(addr, 0x200000); > #endif > diff --git a/drivers/video/fbdev/controlfb.c b/drivers/video/fbdev/controlfb.c > index 8d14b29aafea..9cb0ef7ac29e 100644 > --- a/drivers/video/fbdev/controlfb.c > +++ b/drivers/video/fbdev/controlfb.c > @@ -48,9 +48,7 @@ > #include > #include > #include > -#include > #include > -#include > #include > > #include "macmodes.h" > @@ -715,8 +713,7 @@ static int __init control_of_init(struct device_node *dp) > goto error_out; > } > /* map at most 8MB for the frame buffer */ > - p->frame_buffer = __ioremap(p->frame_buffer_phys, 0x800000, > - _PAGE_WRITETHRU); > + p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000); > > if (!p->control_regs_phys || > !request_mem_region(p->control_regs_phys, p->control_regs_size, > diff --git a/drivers/video/fbdev/platinumfb.c b/drivers/video/fbdev/platinumfb.c > index 377d3399a3ad..bf6b7fb83cf4 100644 > --- a/drivers/video/fbdev/platinumfb.c > +++ b/drivers/video/fbdev/platinumfb.c > @@ -32,9 +32,7 @@ > #include > #include > #include > -#include > #include > -#include > > #include "macmodes.h" > #include "platinumfb.h" > @@ -577,8 +575,7 @@ static int platinumfb_probe(struct platform_device* odev) > > /* frame buffer - map only 4MB */ > pinfo->frame_buffer_phys = pinfo->rsrc_fb.start; > - pinfo->frame_buffer = __ioremap(pinfo->rsrc_fb.start, 0x400000, > - _PAGE_WRITETHRU); > + pinfo->frame_buffer = ioremap_wt(pinfo->rsrc_fb.start, 0x400000); > pinfo->base_frame_buffer = pinfo->frame_buffer; > > /* registers */ > diff --git a/drivers/video/fbdev/valkyriefb.c b/drivers/video/fbdev/valkyriefb.c > index 275fb98236d3..d51c3a8009cb 100644 > --- a/drivers/video/fbdev/valkyriefb.c > +++ b/drivers/video/fbdev/valkyriefb.c > @@ -54,13 +54,11 @@ > #include > #include > #include > -#include > #ifdef CONFIG_MAC > #include > #else > #include > #endif > -#include > > #include "macmodes.h" > #include "valkyriefb.h" > @@ -318,7 +316,7 @@ static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p) > int __init valkyriefb_init(void) > { > struct fb_info_valkyrie *p; > - unsigned long frame_buffer_phys, cmap_regs_phys, flags; > + unsigned long frame_buffer_phys, cmap_regs_phys; > int err; > char *option = NULL; > > @@ -337,7 +335,6 @@ int __init valkyriefb_init(void) > /* Hardcoded addresses... welcome to 68k Macintosh country :-) */ > frame_buffer_phys = 0xf9000000; > cmap_regs_phys = 0x50f24000; > - flags = IOMAP_NOCACHE_SER; /* IOMAP_WRITETHROUGH?? */ > #else /* ppc (!CONFIG_MAC) */ > { > struct device_node *dp; > @@ -354,7 +351,6 @@ int __init valkyriefb_init(void) > > frame_buffer_phys = r.start; > cmap_regs_phys = r.start + 0x304000; > - flags = _PAGE_WRITETHRU; > } > #endif /* ppc (!CONFIG_MAC) */ > > @@ -369,7 +365,11 @@ int __init valkyriefb_init(void) > } > p->total_vram = 0x100000; > p->frame_buffer_phys = frame_buffer_phys; > - p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags); > +#ifdef CONFIG_MAC > + p->frame_buffer = ioremap_nocache(frame_buffer_phys, p->total_vram); > +#else > + p->frame_buffer = ioremap_wt(frame_buffer_phys, p->total_vram); > +#endif > p->cmap_regs_phys = cmap_regs_phys; > p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); > p->valkyrie_regs_phys = cmap_regs_phys+0x6000; > -- > 2.13.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel@ffwll.ch (Daniel Vetter) Date: Thu, 13 Sep 2018 15:33:46 +0200 Subject: [PATCH v2 02/24] drivers/video/fbdev: use ioremap_wc/wt() instead of __ioremap() In-Reply-To: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> References: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> Message-ID: <20180913133346.GD11082@phenom.ffwll.local> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Sep 12, 2018 at 03:58:17PM +0000, Christophe Leroy wrote: > _PAGE_NO_CACHE is a platform specific flag. In addition, this flag > is misleading because one would think it requests a noncached page > whereas a noncached page is _PAGE_NO_CACHE | _PAGE_GUARDED > > _PAGE_NO_CACHE alone means write combined noncached page, so lets > use ioremap_wc() instead. > > _PAGE_WRITETHRU is also platform specific flag. Use ioremap_wt() > instead. > > Signed-off-by: Christophe Leroy I wondered why this all showed up in my gfx inbox, then spotted this patch here. I trust you way more on the _PAGE_ flags than me, but this looks reasonable. Acked-by: Daniel Vetter > --- > drivers/video/fbdev/chipsfb.c | 3 +-- > drivers/video/fbdev/controlfb.c | 5 +---- > drivers/video/fbdev/platinumfb.c | 5 +---- > drivers/video/fbdev/valkyriefb.c | 12 ++++++------ > 4 files changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c > index f103665cad43..40182ed85648 100644 > --- a/drivers/video/fbdev/chipsfb.c > +++ b/drivers/video/fbdev/chipsfb.c > @@ -27,7 +27,6 @@ > #include > #include > #include > -#include > > #ifdef CONFIG_PMAC_BACKLIGHT > #include > @@ -401,7 +400,7 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) > #endif /* CONFIG_PMAC_BACKLIGHT */ > > #ifdef CONFIG_PPC > - p->screen_base = __ioremap(addr, 0x200000, _PAGE_NO_CACHE); > + p->screen_base = ioremap_wc(addr, 0x200000); > #else > p->screen_base = ioremap(addr, 0x200000); > #endif > diff --git a/drivers/video/fbdev/controlfb.c b/drivers/video/fbdev/controlfb.c > index 8d14b29aafea..9cb0ef7ac29e 100644 > --- a/drivers/video/fbdev/controlfb.c > +++ b/drivers/video/fbdev/controlfb.c > @@ -48,9 +48,7 @@ > #include > #include > #include > -#include > #include > -#include > #include > > #include "macmodes.h" > @@ -715,8 +713,7 @@ static int __init control_of_init(struct device_node *dp) > goto error_out; > } > /* map at most 8MB for the frame buffer */ > - p->frame_buffer = __ioremap(p->frame_buffer_phys, 0x800000, > - _PAGE_WRITETHRU); > + p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000); > > if (!p->control_regs_phys || > !request_mem_region(p->control_regs_phys, p->control_regs_size, > diff --git a/drivers/video/fbdev/platinumfb.c b/drivers/video/fbdev/platinumfb.c > index 377d3399a3ad..bf6b7fb83cf4 100644 > --- a/drivers/video/fbdev/platinumfb.c > +++ b/drivers/video/fbdev/platinumfb.c > @@ -32,9 +32,7 @@ > #include > #include > #include > -#include > #include > -#include > > #include "macmodes.h" > #include "platinumfb.h" > @@ -577,8 +575,7 @@ static int platinumfb_probe(struct platform_device* odev) > > /* frame buffer - map only 4MB */ > pinfo->frame_buffer_phys = pinfo->rsrc_fb.start; > - pinfo->frame_buffer = __ioremap(pinfo->rsrc_fb.start, 0x400000, > - _PAGE_WRITETHRU); > + pinfo->frame_buffer = ioremap_wt(pinfo->rsrc_fb.start, 0x400000); > pinfo->base_frame_buffer = pinfo->frame_buffer; > > /* registers */ > diff --git a/drivers/video/fbdev/valkyriefb.c b/drivers/video/fbdev/valkyriefb.c > index 275fb98236d3..d51c3a8009cb 100644 > --- a/drivers/video/fbdev/valkyriefb.c > +++ b/drivers/video/fbdev/valkyriefb.c > @@ -54,13 +54,11 @@ > #include > #include > #include > -#include > #ifdef CONFIG_MAC > #include > #else > #include > #endif > -#include > > #include "macmodes.h" > #include "valkyriefb.h" > @@ -318,7 +316,7 @@ static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p) > int __init valkyriefb_init(void) > { > struct fb_info_valkyrie *p; > - unsigned long frame_buffer_phys, cmap_regs_phys, flags; > + unsigned long frame_buffer_phys, cmap_regs_phys; > int err; > char *option = NULL; > > @@ -337,7 +335,6 @@ int __init valkyriefb_init(void) > /* Hardcoded addresses... welcome to 68k Macintosh country :-) */ > frame_buffer_phys = 0xf9000000; > cmap_regs_phys = 0x50f24000; > - flags = IOMAP_NOCACHE_SER; /* IOMAP_WRITETHROUGH?? */ > #else /* ppc (!CONFIG_MAC) */ > { > struct device_node *dp; > @@ -354,7 +351,6 @@ int __init valkyriefb_init(void) > > frame_buffer_phys = r.start; > cmap_regs_phys = r.start + 0x304000; > - flags = _PAGE_WRITETHRU; > } > #endif /* ppc (!CONFIG_MAC) */ > > @@ -369,7 +365,11 @@ int __init valkyriefb_init(void) > } > p->total_vram = 0x100000; > p->frame_buffer_phys = frame_buffer_phys; > - p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags); > +#ifdef CONFIG_MAC > + p->frame_buffer = ioremap_nocache(frame_buffer_phys, p->total_vram); > +#else > + p->frame_buffer = ioremap_wt(frame_buffer_phys, p->total_vram); > +#endif > p->cmap_regs_phys = cmap_regs_phys; > p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); > p->valkyrie_regs_phys = cmap_regs_phys+0x6000; > -- > 2.13.3 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 02/24] drivers/video/fbdev: use ioremap_wc/wt() instead of __ioremap() Date: Thu, 13 Sep 2018 15:33:46 +0200 Message-ID: <20180913133346.GD11082@phenom.ffwll.local> References: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id EEAE46E6AA for ; Thu, 13 Sep 2018 13:33:50 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id h33-v6so4648853edb.5 for ; Thu, 13 Sep 2018 06:33:50 -0700 (PDT) Content-Disposition: inline In-Reply-To: <2f980cf32a05415662272cf052c2b9e2a94c756f.1536692743.git.christophe.leroy@c-s.fr> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Christophe Leroy Cc: Jens Axboe , linux-block@vger.kernel.org, linux-fbdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Bartlomiej Zolnierkiewicz , Geoff Levand , dri-devel@lists.freedesktop.org, Kumar Gala , Dominik Brodowski , Li Yang , Scott Wood , Paul Mackerras , Nicholas Piggin , Michael Ellerman , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, aneesh.kumar@linux.vnet.ibm.com List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBTZXAgMTIsIDIwMTggYXQgMDM6NTg6MTdQTSArMDAwMCwgQ2hyaXN0b3BoZSBMZXJv eSB3cm90ZToKPiBfUEFHRV9OT19DQUNIRSBpcyBhIHBsYXRmb3JtIHNwZWNpZmljIGZsYWcuIElu IGFkZGl0aW9uLCB0aGlzIGZsYWcKPiBpcyBtaXNsZWFkaW5nIGJlY2F1c2Ugb25lIHdvdWxkIHRo aW5rIGl0IHJlcXVlc3RzIGEgbm9uY2FjaGVkIHBhZ2UKPiB3aGVyZWFzIGEgbm9uY2FjaGVkIHBh Z2UgaXMgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVECj4gCj4gX1BBR0VfTk9fQ0FDSEUg YWxvbmUgbWVhbnMgd3JpdGUgY29tYmluZWQgbm9uY2FjaGVkIHBhZ2UsIHNvIGxldHMKPiB1c2Ug aW9yZW1hcF93YygpIGluc3RlYWQuCj4gCj4gX1BBR0VfV1JJVEVUSFJVIGlzIGFsc28gcGxhdGZv cm0gc3BlY2lmaWMgZmxhZy4gVXNlIGlvcmVtYXBfd3QoKQo+IGluc3RlYWQuCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2hyaXN0b3BoZSBMZXJveSA8Y2hyaXN0b3BoZS5sZXJveUBjLXMuZnI+CgpJIHdv bmRlcmVkIHdoeSB0aGlzIGFsbCBzaG93ZWQgdXAgaW4gbXkgZ2Z4IGluYm94LCB0aGVuIHNwb3R0 ZWQgdGhpcyBwYXRjaApoZXJlLgoKSSB0cnVzdCB5b3Ugd2F5IG1vcmUgb24gdGhlIF9QQUdFXyBm bGFncyB0aGFuIG1lLCBidXQgdGhpcyBsb29rcwpyZWFzb25hYmxlLgoKQWNrZWQtYnk6IERhbmll bCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cgo+IC0tLQo+ICBkcml2ZXJzL3ZpZGVv L2ZiZGV2L2NoaXBzZmIuYyAgICB8ICAzICstLQo+ICBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvbnRy b2xmYi5jICB8ICA1ICstLS0tCj4gIGRyaXZlcnMvdmlkZW8vZmJkZXYvcGxhdGludW1mYi5jIHwg IDUgKy0tLS0KPiAgZHJpdmVycy92aWRlby9mYmRldi92YWxreXJpZWZiLmMgfCAxMiArKysrKyst LS0tLS0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NoaXBzZmIuYyBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvY2hpcHNmYi5jCj4gaW5kZXggZjEwMzY2NWNhZDQzLi40MDE4MmVkODU2 NDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jaGlwc2ZiLmMKPiArKysgYi9k cml2ZXJzL3ZpZGVvL2ZiZGV2L2NoaXBzZmIuYwo+IEBAIC0yNyw3ICsyNyw2IEBACj4gICNpbmNs dWRlIDxsaW51eC9pbml0Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiAgI2luY2x1ZGUg PGxpbnV4L2NvbnNvbGUuaD4KPiAtI2luY2x1ZGUgPGFzbS9pby5oPgo+ICAKPiAgI2lmZGVmIENP TkZJR19QTUFDX0JBQ0tMSUdIVAo+ICAjaW5jbHVkZSA8YXNtL2JhY2tsaWdodC5oPgo+IEBAIC00 MDEsNyArNDAwLDcgQEAgc3RhdGljIGludCBjaGlwc2ZiX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2 ICpkcCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKPiAgI2VuZGlmIC8qIENPTkZJ R19QTUFDX0JBQ0tMSUdIVCAqLwo+ICAKPiAgI2lmZGVmIENPTkZJR19QUEMKPiAtCXAtPnNjcmVl bl9iYXNlID0gX19pb3JlbWFwKGFkZHIsIDB4MjAwMDAwLCBfUEFHRV9OT19DQUNIRSk7Cj4gKwlw LT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfd2MoYWRkciwgMHgyMDAwMDApOwo+ICAjZWxzZQo+ICAJ cC0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGFkZHIsIDB4MjAwMDAwKTsKPiAgI2VuZGlmCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29udHJvbGZiLmMgYi9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2NvbnRyb2xmYi5jCj4gaW5kZXggOGQxNGIyOWFhZmVhLi45Y2IwZWY3YWMyOWUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb250cm9sZmIuYwo+ICsrKyBiL2RyaXZl cnMvdmlkZW8vZmJkZXYvY29udHJvbGZiLmMKPiBAQCAtNDgsOSArNDgsNyBAQAo+ICAjaW5jbHVk ZSA8bGludXgvbnZyYW0uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgo+ICAjaW5jbHVkZSA8 bGludXgvY3VkYS5oPgo+IC0jaW5jbHVkZSA8YXNtL2lvLmg+Cj4gICNpbmNsdWRlIDxhc20vcHJv bS5oPgo+IC0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KPiAgI2luY2x1ZGUgPGFzbS9idGV4dC5o Pgo+ICAKPiAgI2luY2x1ZGUgIm1hY21vZGVzLmgiCj4gQEAgLTcxNSw4ICs3MTMsNyBAQCBzdGF0 aWMgaW50IF9faW5pdCBjb250cm9sX29mX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCkKPiAg CQlnb3RvIGVycm9yX291dDsKPiAgCX0KPiAgCS8qIG1hcCBhdCBtb3N0IDhNQiBmb3IgdGhlIGZy YW1lIGJ1ZmZlciAqLwo+IC0JcC0+ZnJhbWVfYnVmZmVyID0gX19pb3JlbWFwKHAtPmZyYW1lX2J1 ZmZlcl9waHlzLCAweDgwMDAwMCwKPiAtCQkJCSAgICBfUEFHRV9XUklURVRIUlUpOwo+ICsJcC0+ ZnJhbWVfYnVmZmVyID0gaW9yZW1hcF93dChwLT5mcmFtZV9idWZmZXJfcGh5cywgMHg4MDAwMDAp Owo+ICAKPiAgCWlmICghcC0+Y29udHJvbF9yZWdzX3BoeXMgfHwKPiAgCSAgICAhcmVxdWVzdF9t ZW1fcmVnaW9uKHAtPmNvbnRyb2xfcmVnc19waHlzLCBwLT5jb250cm9sX3JlZ3Nfc2l6ZSwKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9wbGF0aW51bWZiLmMgYi9kcml2ZXJzL3Zp ZGVvL2ZiZGV2L3BsYXRpbnVtZmIuYwo+IGluZGV4IDM3N2QzMzk5YTNhZC4uYmY2YjdmYjgzY2Y0 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvcGxhdGludW1mYi5jCj4gKysrIGIv ZHJpdmVycy92aWRlby9mYmRldi9wbGF0aW51bWZiLmMKPiBAQCAtMzIsOSArMzIsNyBAQAo+ICAj aW5jbHVkZSA8bGludXgvbnZyYW0uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ ICAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiAtI2luY2x1ZGUgPGFzbS9pby5oPgo+ ICAjaW5jbHVkZSA8YXNtL3Byb20uaD4KPiAtI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Cj4gIAo+ ICAjaW5jbHVkZSAibWFjbW9kZXMuaCIKPiAgI2luY2x1ZGUgInBsYXRpbnVtZmIuaCIKPiBAQCAt NTc3LDggKzU3NSw3IEBAIHN0YXRpYyBpbnQgcGxhdGludW1mYl9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlKiBvZGV2KQo+ICAKPiAgCS8qIGZyYW1lIGJ1ZmZlciAtIG1hcCBvbmx5IDRNQiAq Lwo+ICAJcGluZm8tPmZyYW1lX2J1ZmZlcl9waHlzID0gcGluZm8tPnJzcmNfZmIuc3RhcnQ7Cj4g LQlwaW5mby0+ZnJhbWVfYnVmZmVyID0gX19pb3JlbWFwKHBpbmZvLT5yc3JjX2ZiLnN0YXJ0LCAw eDQwMDAwMCwKPiAtCQkJCQlfUEFHRV9XUklURVRIUlUpOwo+ICsJcGluZm8tPmZyYW1lX2J1ZmZl ciA9IGlvcmVtYXBfd3QocGluZm8tPnJzcmNfZmIuc3RhcnQsIDB4NDAwMDAwKTsKPiAgCXBpbmZv LT5iYXNlX2ZyYW1lX2J1ZmZlciA9IHBpbmZvLT5mcmFtZV9idWZmZXI7Cj4gIAo+ICAJLyogcmVn aXN0ZXJzICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvdmFsa3lyaWVmYi5j IGIvZHJpdmVycy92aWRlby9mYmRldi92YWxreXJpZWZiLmMKPiBpbmRleCAyNzVmYjk4MjM2ZDMu LmQ1MWMzYTgwMDljYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3ZhbGt5cmll ZmIuYwo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvdmFsa3lyaWVmYi5jCj4gQEAgLTU0LDEz ICs1NCwxMSBAQAo+ICAjaW5jbHVkZSA8bGludXgvbnZyYW0uaD4KPiAgI2luY2x1ZGUgPGxpbnV4 L2FkYi5oPgo+ICAjaW5jbHVkZSA8bGludXgvY3VkYS5oPgo+IC0jaW5jbHVkZSA8YXNtL2lvLmg+ Cj4gICNpZmRlZiBDT05GSUdfTUFDCj4gICNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+Cj4gICNl bHNlCj4gICNpbmNsdWRlIDxhc20vcHJvbS5oPgo+ICAjZW5kaWYKPiAtI2luY2x1ZGUgPGFzbS9w Z3RhYmxlLmg+Cj4gIAo+ICAjaW5jbHVkZSAibWFjbW9kZXMuaCIKPiAgI2luY2x1ZGUgInZhbGt5 cmllZmIuaCIKPiBAQCAtMzE4LDcgKzMxNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB2YWxreXJp ZV9jaG9vc2VfbW9kZShzdHJ1Y3QgZmJfaW5mb192YWxreXJpZSAqcCkKPiAgaW50IF9faW5pdCB2 YWxreXJpZWZiX2luaXQodm9pZCkKPiAgewo+ICAJc3RydWN0IGZiX2luZm9fdmFsa3lyaWUJKnA7 Cj4gLQl1bnNpZ25lZCBsb25nIGZyYW1lX2J1ZmZlcl9waHlzLCBjbWFwX3JlZ3NfcGh5cywgZmxh Z3M7Cj4gKwl1bnNpZ25lZCBsb25nIGZyYW1lX2J1ZmZlcl9waHlzLCBjbWFwX3JlZ3NfcGh5czsK PiAgCWludCBlcnI7Cj4gIAljaGFyICpvcHRpb24gPSBOVUxMOwo+ICAKPiBAQCAtMzM3LDcgKzMz NSw2IEBAIGludCBfX2luaXQgdmFsa3lyaWVmYl9pbml0KHZvaWQpCj4gIAkvKiBIYXJkY29kZWQg YWRkcmVzc2VzLi4uIHdlbGNvbWUgdG8gNjhrIE1hY2ludG9zaCBjb3VudHJ5IDotKSAqLwo+ICAJ ZnJhbWVfYnVmZmVyX3BoeXMgPSAweGY5MDAwMDAwOwo+ICAJY21hcF9yZWdzX3BoeXMgPSAweDUw ZjI0MDAwOwo+IC0JZmxhZ3MgPSBJT01BUF9OT0NBQ0hFX1NFUjsgLyogSU9NQVBfV1JJVEVUSFJP VUdIPz8gKi8KPiAgI2Vsc2UgLyogcHBjICghQ09ORklHX01BQykgKi8KPiAgCXsKPiAgCQlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmRwOwo+IEBAIC0zNTQsNyArMzUxLDYgQEAgaW50IF9faW5pdCB2YWxr eXJpZWZiX2luaXQodm9pZCkKPiAgCj4gIAkJZnJhbWVfYnVmZmVyX3BoeXMgPSByLnN0YXJ0Owo+ ICAJCWNtYXBfcmVnc19waHlzID0gci5zdGFydCArIDB4MzA0MDAwOwo+IC0JCWZsYWdzID0gX1BB R0VfV1JJVEVUSFJVOwo+ICAJfQo+ICAjZW5kaWYgLyogcHBjICghQ09ORklHX01BQykgKi8KPiAg Cj4gQEAgLTM2OSw3ICszNjUsMTEgQEAgaW50IF9faW5pdCB2YWxreXJpZWZiX2luaXQodm9pZCkK PiAgCX0KPiAgCXAtPnRvdGFsX3ZyYW0gPSAweDEwMDAwMDsKPiAgCXAtPmZyYW1lX2J1ZmZlcl9w aHlzID0gZnJhbWVfYnVmZmVyX3BoeXM7Cj4gLQlwLT5mcmFtZV9idWZmZXIgPSBfX2lvcmVtYXAo ZnJhbWVfYnVmZmVyX3BoeXMsIHAtPnRvdGFsX3ZyYW0sIGZsYWdzKTsKPiArI2lmZGVmIENPTkZJ R19NQUMKPiArCXAtPmZyYW1lX2J1ZmZlciA9IGlvcmVtYXBfbm9jYWNoZShmcmFtZV9idWZmZXJf cGh5cywgcC0+dG90YWxfdnJhbSk7Cj4gKyNlbHNlCj4gKwlwLT5mcmFtZV9idWZmZXIgPSBpb3Jl bWFwX3d0KGZyYW1lX2J1ZmZlcl9waHlzLCBwLT50b3RhbF92cmFtKTsKPiArI2VuZGlmCj4gIAlw LT5jbWFwX3JlZ3NfcGh5cyA9IGNtYXBfcmVnc19waHlzOwo+ICAJcC0+Y21hcF9yZWdzID0gaW9y ZW1hcChwLT5jbWFwX3JlZ3NfcGh5cywgMHgxMDAwKTsKPiAgCXAtPnZhbGt5cmllX3JlZ3NfcGh5 cyA9IGNtYXBfcmVnc19waHlzKzB4NjAwMDsKPiAtLSAKPiAyLjEzLjMKPiAKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK