* [PATCH v3 01/11] hexagon: mm: Convert to GENERIC_IOREMAP [not found] <20221009103114.149036-1-bhe@redhat.com> @ 2022-10-09 10:31 ` Baoquan He 2022-10-09 16:39 ` Christophe Leroy 0 siblings, 1 reply; 3+ messages in thread From: Baoquan He @ 2022-10-09 10:31 UTC (permalink / raw) To: linux-kernel Cc: linux-mm, akpm, hch, agordeev, wangkefeng.wang, christophe.leroy, schnelle, David.Laight, shorne, bhe, Brian Cain, Mark Brown, Linus Walleij, linux-hexagon By taking GENERIC_IOREMAP method, the generic ioremap_prot() and iounmap() are visible and available to arch. Arch only needs to provide implementation of arch_ioremap() or arch_iounmap() if there's arch specific handling needed in its ioremap() or iounmap(). This change will simplify implementation by removing duplicated codes with generic ioremap() and iounmap(), and has the equivalent functioality. For hexagon, the current ioremap() and iounmap() are the same as generic version. After taking GENERIC_IOREMAP way, the old ioremap() and iounmap() can be completely removed. Signed-off-by: Baoquan He <bhe@redhat.com> Cc: Brian Cain <bcain@quicinc.com> Cc: Mark Brown <broonie@kernel.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: linux-hexagon@vger.kernel.org --- v2->v3: Rewrite patch log. Put it at the beginning of patchset since it doesn't introduce new arch_ioremap()/arch_iounmap(). arch/hexagon/Kconfig | 1 + arch/hexagon/include/asm/io.h | 9 +++++-- arch/hexagon/mm/ioremap.c | 44 ----------------------------------- 3 files changed, 8 insertions(+), 46 deletions(-) delete mode 100644 arch/hexagon/mm/ioremap.c diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index 54eadf265178..17afffde1a7f 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -25,6 +25,7 @@ config HEXAGON select NEED_SG_DMA_LENGTH select NO_IOPORT_MAP select GENERIC_IOMAP + select GENERIC_IOREMAP select GENERIC_SMP_IDLE_THREAD select STACKTRACE_SUPPORT select GENERIC_CLOCKEVENTS_BROADCAST diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h index 46a099de85b7..dcd9cbbf5934 100644 --- a/arch/hexagon/include/asm/io.h +++ b/arch/hexagon/include/asm/io.h @@ -170,8 +170,13 @@ static inline void writel(u32 data, volatile void __iomem *addr) #define writew_relaxed __raw_writew #define writel_relaxed __raw_writel -void __iomem *ioremap(unsigned long phys_addr, unsigned long size); -#define ioremap_uc(X, Y) ioremap((X), (Y)) +/* + * I/O memory mapping functions. + */ +#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ + (__HEXAGON_C_DEV << 6)) + +#define ioremap_uc(addr, size) ioremap((addr), (size)) #define __raw_writel writel diff --git a/arch/hexagon/mm/ioremap.c b/arch/hexagon/mm/ioremap.c deleted file mode 100644 index 255c5b1ee1a7..000000000000 --- a/arch/hexagon/mm/ioremap.c +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * I/O remap functions for Hexagon - * - * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. - */ - -#include <linux/io.h> -#include <linux/vmalloc.h> -#include <linux/mm.h> - -void __iomem *ioremap(unsigned long phys_addr, unsigned long size) -{ - unsigned long last_addr, addr; - unsigned long offset = phys_addr & ~PAGE_MASK; - struct vm_struct *area; - - pgprot_t prot = __pgprot(_PAGE_PRESENT|_PAGE_READ|_PAGE_WRITE - |(__HEXAGON_C_DEV << 6)); - - last_addr = phys_addr + size - 1; - - /* Wrapping not allowed */ - if (!size || (last_addr < phys_addr)) - return NULL; - - /* Rounds up to next page size, including whole-page offset */ - size = PAGE_ALIGN(offset + size); - - area = get_vm_area(size, VM_IOREMAP); - addr = (unsigned long)area->addr; - - if (ioremap_page_range(addr, addr+size, phys_addr, prot)) { - vunmap((void *)addr); - return NULL; - } - - return (void __iomem *) (offset + addr); -} - -void iounmap(const volatile void __iomem *addr) -{ - vunmap((void *) ((unsigned long) addr & PAGE_MASK)); -} -- 2.34.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3 01/11] hexagon: mm: Convert to GENERIC_IOREMAP 2022-10-09 10:31 ` [PATCH v3 01/11] hexagon: mm: Convert to GENERIC_IOREMAP Baoquan He @ 2022-10-09 16:39 ` Christophe Leroy 2022-10-10 0:17 ` Baoquan He 0 siblings, 1 reply; 3+ messages in thread From: Christophe Leroy @ 2022-10-09 16:39 UTC (permalink / raw) To: Baoquan He, linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, akpm@linux-foundation.org, hch@infradead.org, agordeev@linux.ibm.com, wangkefeng.wang@huawei.com, schnelle@linux.ibm.com, David.Laight@ACULAB.COM, shorne@gmail.com, Brian Cain, Mark Brown, Linus Walleij, linux-hexagon@vger.kernel.org Le 09/10/2022 à 12:31, Baoquan He a écrit : > By taking GENERIC_IOREMAP method, the generic ioremap_prot() and > iounmap() are visible and available to arch. Arch only needs to > provide implementation of arch_ioremap() or arch_iounmap() if there's > arch specific handling needed in its ioremap() or iounmap(). This > change will simplify implementation by removing duplicated codes with > generic ioremap() and iounmap(), and has the equivalent functioality. > > For hexagon, the current ioremap() and iounmap() are the same as > generic version. After taking GENERIC_IOREMAP way, the old ioremap() > and iounmap() can be completely removed. > > Signed-off-by: Baoquan He <bhe@redhat.com> > Cc: Brian Cain <bcain@quicinc.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: linux-hexagon@vger.kernel.org > --- > v2->v3: > Rewrite patch log. > Put it at the beginning of patchset since it doesn't introduce new > arch_ioremap()/arch_iounmap(). > > arch/hexagon/Kconfig | 1 + > arch/hexagon/include/asm/io.h | 9 +++++-- > arch/hexagon/mm/ioremap.c | 44 ----------------------------------- > 3 files changed, 8 insertions(+), 46 deletions(-) > delete mode 100644 arch/hexagon/mm/ioremap.c > > diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig > index 54eadf265178..17afffde1a7f 100644 > --- a/arch/hexagon/Kconfig > +++ b/arch/hexagon/Kconfig > @@ -25,6 +25,7 @@ config HEXAGON > select NEED_SG_DMA_LENGTH > select NO_IOPORT_MAP > select GENERIC_IOMAP > + select GENERIC_IOREMAP > select GENERIC_SMP_IDLE_THREAD > select STACKTRACE_SUPPORT > select GENERIC_CLOCKEVENTS_BROADCAST > diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h > index 46a099de85b7..dcd9cbbf5934 100644 > --- a/arch/hexagon/include/asm/io.h > +++ b/arch/hexagon/include/asm/io.h > @@ -170,8 +170,13 @@ static inline void writel(u32 data, volatile void __iomem *addr) > #define writew_relaxed __raw_writew > #define writel_relaxed __raw_writel > > -void __iomem *ioremap(unsigned long phys_addr, unsigned long size); > -#define ioremap_uc(X, Y) ioremap((X), (Y)) > +/* > + * I/O memory mapping functions. > + */ > +#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ > + (__HEXAGON_C_DEV << 6)) > + > +#define ioremap_uc(addr, size) ioremap((addr), (size)) Why do you need to change this macro ? > > > #define __raw_writel writel > diff --git a/arch/hexagon/mm/ioremap.c b/arch/hexagon/mm/ioremap.c > deleted file mode 100644 > index 255c5b1ee1a7..000000000000 > --- a/arch/hexagon/mm/ioremap.c > +++ /dev/null > @@ -1,44 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > -/* > - * I/O remap functions for Hexagon > - * > - * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. > - */ > - > -#include <linux/io.h> > -#include <linux/vmalloc.h> > -#include <linux/mm.h> > - > -void __iomem *ioremap(unsigned long phys_addr, unsigned long size) > -{ > - unsigned long last_addr, addr; > - unsigned long offset = phys_addr & ~PAGE_MASK; > - struct vm_struct *area; > - > - pgprot_t prot = __pgprot(_PAGE_PRESENT|_PAGE_READ|_PAGE_WRITE > - |(__HEXAGON_C_DEV << 6)); > - > - last_addr = phys_addr + size - 1; > - > - /* Wrapping not allowed */ > - if (!size || (last_addr < phys_addr)) > - return NULL; > - > - /* Rounds up to next page size, including whole-page offset */ > - size = PAGE_ALIGN(offset + size); > - > - area = get_vm_area(size, VM_IOREMAP); > - addr = (unsigned long)area->addr; > - > - if (ioremap_page_range(addr, addr+size, phys_addr, prot)) { > - vunmap((void *)addr); > - return NULL; > - } > - > - return (void __iomem *) (offset + addr); > -} > - > -void iounmap(const volatile void __iomem *addr) > -{ > - vunmap((void *) ((unsigned long) addr & PAGE_MASK)); > -} ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3 01/11] hexagon: mm: Convert to GENERIC_IOREMAP 2022-10-09 16:39 ` Christophe Leroy @ 2022-10-10 0:17 ` Baoquan He 0 siblings, 0 replies; 3+ messages in thread From: Baoquan He @ 2022-10-10 0:17 UTC (permalink / raw) To: Christophe Leroy Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, hch@infradead.org, agordeev@linux.ibm.com, wangkefeng.wang@huawei.com, schnelle@linux.ibm.com, David.Laight@ACULAB.COM, shorne@gmail.com, Brian Cain, Mark Brown, Linus Walleij, linux-hexagon@vger.kernel.org On 10/09/22 at 04:39pm, Christophe Leroy wrote: > > > Le 09/10/2022 à 12:31, Baoquan He a écrit : > > By taking GENERIC_IOREMAP method, the generic ioremap_prot() and > > iounmap() are visible and available to arch. Arch only needs to > > provide implementation of arch_ioremap() or arch_iounmap() if there's > > arch specific handling needed in its ioremap() or iounmap(). This > > change will simplify implementation by removing duplicated codes with > > generic ioremap() and iounmap(), and has the equivalent functioality. > > > > For hexagon, the current ioremap() and iounmap() are the same as > > generic version. After taking GENERIC_IOREMAP way, the old ioremap() > > and iounmap() can be completely removed. > > > > Signed-off-by: Baoquan He <bhe@redhat.com> > > Cc: Brian Cain <bcain@quicinc.com> > > Cc: Mark Brown <broonie@kernel.org> > > Cc: Linus Walleij <linus.walleij@linaro.org> > > Cc: linux-hexagon@vger.kernel.org > > --- > > v2->v3: > > Rewrite patch log. > > Put it at the beginning of patchset since it doesn't introduce new > > arch_ioremap()/arch_iounmap(). > > > > arch/hexagon/Kconfig | 1 + > > arch/hexagon/include/asm/io.h | 9 +++++-- > > arch/hexagon/mm/ioremap.c | 44 ----------------------------------- > > 3 files changed, 8 insertions(+), 46 deletions(-) > > delete mode 100644 arch/hexagon/mm/ioremap.c > > > > diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig > > index 54eadf265178..17afffde1a7f 100644 > > --- a/arch/hexagon/Kconfig > > +++ b/arch/hexagon/Kconfig > > @@ -25,6 +25,7 @@ config HEXAGON > > select NEED_SG_DMA_LENGTH > > select NO_IOPORT_MAP > > select GENERIC_IOMAP > > + select GENERIC_IOREMAP > > select GENERIC_SMP_IDLE_THREAD > > select STACKTRACE_SUPPORT > > select GENERIC_CLOCKEVENTS_BROADCAST > > diff --git a/arch/hexagon/include/asm/io.h b/arch/hexagon/include/asm/io.h > > index 46a099de85b7..dcd9cbbf5934 100644 > > --- a/arch/hexagon/include/asm/io.h > > +++ b/arch/hexagon/include/asm/io.h > > @@ -170,8 +170,13 @@ static inline void writel(u32 data, volatile void __iomem *addr) > > #define writew_relaxed __raw_writew > > #define writel_relaxed __raw_writel > > > > -void __iomem *ioremap(unsigned long phys_addr, unsigned long size); > > -#define ioremap_uc(X, Y) ioremap((X), (Y)) > > +/* > > + * I/O memory mapping functions. > > + */ > > +#define _PAGE_IOREMAP (_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ > > + (__HEXAGON_C_DEV << 6)) > > + > > +#define ioremap_uc(addr, size) ioremap((addr), (size)) > > Why do you need to change this macro ? I don't like the X, Y since they look meaningless. I can change back if you like the old one. Thanks for checking. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-10-10 0:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20221009103114.149036-1-bhe@redhat.com>
2022-10-09 10:31 ` [PATCH v3 01/11] hexagon: mm: Convert to GENERIC_IOREMAP Baoquan He
2022-10-09 16:39 ` Christophe Leroy
2022-10-10 0:17 ` Baoquan He
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox