From: Prabhakar <prabhakar.csengg@gmail.com> To: Arnd Bergmann <arnd@arndb.de>, Conor Dooley <conor.dooley@microchip.com>, Geert Uytterhoeven <geert+renesas@glider.be>, Heiko Stuebner <heiko@sntech.de>, Guo Ren <guoren@kernel.org>, Andrew Jones <ajones@ventanamicro.com>, Paul Walmsley <paul.walmsley@sifive.com>, Palmer Dabbelt <palmer@dabbelt.com>, Albert Ou <aou@eecs.berkeley.edu>, linux-riscv@lists.infradead.org (open list:RISC-V ARCHITECTURE) Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-renesas-soc@vger.kernel.org, Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Subject: [PATCH v6 0/6] RISC-V non-coherent function pointer based cache management operations + non-coherent DMA support for AX45MP Date: Fri, 6 Jan 2023 18:55:20 +0000 [thread overview] Message-ID: <20230106185526.260163-1-prabhakar.mahadev-lad.rj@bp.renesas.com> (raw) From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Hi All, RISC-V non-coherent function pointer based cache management operations ======================================================================= As based on the previous discussion [0]. [1], It was suggested upon the below: * Move out cache drivers from drivers/soc/folder * Implement function pointers for CMO instead of ALTERNATIVE_x() macro * Add cache drivers to drivers/cache folder [0] https://lore.kernel.org/all/43aee000-5b89-4d94-98d2-b37b1a18a83e@app.fastmail.com/ [1] https://lore.kernel.org/linux-riscv/Y62nOqzyuUKqYDpq@spud/#R This v6 version of the patch series add support to use function pointers for CMO and switches the current CMO implementations for zicbom and T-HEAD to use function pointers. Note, with the above approach we might see some performance degradation due to additional checks. ----------x---------------------x--------------------x---------------x-------------- non-coherent DMA support for AX45MP ==================================== On the Andes AX45MP core, cache coherency is a specification option so it may not be supported. In this case DMA will fail. To get around with this issue this patch series does the below: 1] Andes alternative ports is implemented as errata which checks if the IOCP is missing and only then applies to CMO errata. One vendor specific SBI EXT (RZFIVE_SBI_EXT_IOCP_SW_WORKAROUND) is implemented as part of errata. If we could access the DTB in errata I can get rid of this EXT ID from OpenSBI. Is there any approach we can access the DTB in patch callback? Below are the configs which Andes port provides (and are selected by RZ/Five): - ERRATA_ANDES - ERRATA_ANDES_CMO 2] Andes AX45MP core has a Programmable Physical Memory Attributes (PMA) block that allows dynamic adjustment of memory attributes in the runtime. It contains a configurable amount of PMA entries implemented as CSR registers to control the attributes of memory locations in interest. OpenSBI configures the PMA regions as required and creates a reserve memory node and propagates it to the higher boot stack. An RFC patch for OpenSBI is posted here: https://patchwork.ozlabs.org/project/opensbi/patch/20221212094421.14556-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; pma_resv0@58000000 { compatible = "shared-dma-pool"; reg = <0x0 0x58000000 0x0 0x08000000>; no-map; linux,dma-default; }; }; The above shared DMA pool gets appended to Linux DTB so the DMA memory requests go through this region. 3] We provide callbacks to synchronize specific content between memory and cache. - arch_sync_dma_for_device() - arch_sync_dma_for_cpu() 4] RZ/Five SoC selects the below configs - AX45MP_L2_CACHE - DMA_GLOBAL_POOL - ERRATA_ANDES - ERRATA_ANDES_CMO OpenSBI implementation patches can be found here: 1] https://patchwork.ozlabs.org/project/opensbi/cover/20221210103011.7814-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ 2]https://patchwork.ozlabs.org/project/opensbi/patch/20221212094421.14556-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ ----------x---------------------x--------------------x---------------x-------------- Note, - This series requires testing on Cores with zicbom and T-Head SoCs - Ive used GCC 12.2.0 for compilation (tested with allmodconfig) - Tested all the IP blocks on RZ/Five which use DMA v5.1 -> v6 * Dropped use of ALTERNATIVE_x() macro * Now switched to used function pointers for CMO * Moved driver to drivers/cache folder v5 -> v5.1 * https://patchwork.kernel.org/project/linux-riscv/list/?series=708610&state=%2A&archive=both v4 -> v5 * Rebased ALTERNATIVE_3() macro on top of Andrew's patches * Rebased the changes on top of Heiko's alternative call patches * Dropped configuring the PMA from Linux * Dropped configuring the L2 cache from Linux and dropped the binding for same * Now using runtime patching mechanism instead of compile time config RFC v3 -> v4 * Implemented ALTERNATIVE_3() macro * Now using runtime patching mechanism instead of compile time config * Added Andes CMO as and errata * Fixed comments pointed by Geert RFC v2-> RFC v3 * Fixed review comments pointed by Conor * Move DT binding into cache folder * Fixed DT binding check issue * Added andestech,ax45mp-cache.h header file * Now passing the flags for the PMA setup as part of andestech,pma-regions property. * Added andestech,inst/data-prefetch and andestech,tag/data-ram-ctl properties to configure the L2 cache. * Registered the cache driver as platform driver RFC v1-> RFC v2 * Moved out the code from arc/riscv to drivers/soc/renesas * Now handling the PMA setup as part of the L2 cache * Now making use of dma-noncoherent.c instead SoC specific implementation. * Dropped arch_dma_alloc() and arch_dma_free() * Switched to RISCV_DMA_NONCOHERENT * Included DT binding doc RFC v2: https://patchwork.kernel.org/project/linux-renesas-soc/cover/20221003223222.448551-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ RFC v1: https://patchwork.kernel.org/project/linux-renesas-soc/cover/20220906102154.32526-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ Cheers, Prabhakar Lad Prabhakar (6): riscv: mm: dma-noncoherent: Switch using function pointers for cache management riscv: asm: vendorid_list: Add Andes Technology to the vendors list riscv: errata: Add Andes alternative ports dt-bindings: cache: r9a07g043f-l2-cache: Add DT binding documentation for L2 cache controller cache: Add L2 cache management for Andes AX45MP RISC-V core soc: renesas: Kconfig: Select the required configs for RZ/Five SoC .../cache/andestech,ax45mp-cache.yaml | 81 +++++ arch/riscv/Kconfig.erratas | 22 ++ arch/riscv/errata/Makefile | 1 + arch/riscv/errata/andes/Makefile | 1 + arch/riscv/errata/andes/errata.c | 71 +++++ arch/riscv/errata/thead/errata.c | 71 +++++ arch/riscv/include/asm/alternative.h | 3 + arch/riscv/include/asm/dma-noncoherent.h | 83 ++++++ arch/riscv/include/asm/errata_list.h | 53 ---- arch/riscv/include/asm/vendorid_list.h | 1 + arch/riscv/kernel/alternative.c | 5 + arch/riscv/kernel/cpufeature.c | 2 + arch/riscv/mm/dma-noncoherent.c | 94 +++++- arch/riscv/mm/pmem.c | 18 +- drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/cache/Kconfig | 10 + drivers/cache/Makefile | 3 + drivers/cache/ax45mp_cache.c | 279 ++++++++++++++++++ drivers/soc/renesas/Kconfig | 4 + 20 files changed, 744 insertions(+), 61 deletions(-) create mode 100644 Documentation/devicetree/bindings/cache/andestech,ax45mp-cache.yaml create mode 100644 arch/riscv/errata/andes/Makefile create mode 100644 arch/riscv/errata/andes/errata.c create mode 100644 arch/riscv/include/asm/dma-noncoherent.h create mode 100644 drivers/cache/Kconfig create mode 100644 drivers/cache/Makefile create mode 100644 drivers/cache/ax45mp_cache.c -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Prabhakar <prabhakar.csengg@gmail.com> To: Arnd Bergmann <arnd@arndb.de>, Conor Dooley <conor.dooley@microchip.com>, Geert Uytterhoeven <geert+renesas@glider.be>, Heiko Stuebner <heiko@sntech.de>, Guo Ren <guoren@kernel.org>, Andrew Jones <ajones@ventanamicro.com>, Paul Walmsley <paul.walmsley@sifive.com>, Palmer Dabbelt <palmer@dabbelt.com>, Albert Ou <aou@eecs.berkeley.edu>, linux-riscv@lists.infradead.org (open list:RISC-V ARCHITECTURE) Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-renesas-soc@vger.kernel.org, Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Subject: [PATCH v6 0/6] RISC-V non-coherent function pointer based cache management operations + non-coherent DMA support for AX45MP Date: Fri, 6 Jan 2023 18:55:20 +0000 [thread overview] Message-ID: <20230106185526.260163-1-prabhakar.mahadev-lad.rj@bp.renesas.com> (raw) From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Hi All, RISC-V non-coherent function pointer based cache management operations ======================================================================= As based on the previous discussion [0]. [1], It was suggested upon the below: * Move out cache drivers from drivers/soc/folder * Implement function pointers for CMO instead of ALTERNATIVE_x() macro * Add cache drivers to drivers/cache folder [0] https://lore.kernel.org/all/43aee000-5b89-4d94-98d2-b37b1a18a83e@app.fastmail.com/ [1] https://lore.kernel.org/linux-riscv/Y62nOqzyuUKqYDpq@spud/#R This v6 version of the patch series add support to use function pointers for CMO and switches the current CMO implementations for zicbom and T-HEAD to use function pointers. Note, with the above approach we might see some performance degradation due to additional checks. ----------x---------------------x--------------------x---------------x-------------- non-coherent DMA support for AX45MP ==================================== On the Andes AX45MP core, cache coherency is a specification option so it may not be supported. In this case DMA will fail. To get around with this issue this patch series does the below: 1] Andes alternative ports is implemented as errata which checks if the IOCP is missing and only then applies to CMO errata. One vendor specific SBI EXT (RZFIVE_SBI_EXT_IOCP_SW_WORKAROUND) is implemented as part of errata. If we could access the DTB in errata I can get rid of this EXT ID from OpenSBI. Is there any approach we can access the DTB in patch callback? Below are the configs which Andes port provides (and are selected by RZ/Five): - ERRATA_ANDES - ERRATA_ANDES_CMO 2] Andes AX45MP core has a Programmable Physical Memory Attributes (PMA) block that allows dynamic adjustment of memory attributes in the runtime. It contains a configurable amount of PMA entries implemented as CSR registers to control the attributes of memory locations in interest. OpenSBI configures the PMA regions as required and creates a reserve memory node and propagates it to the higher boot stack. An RFC patch for OpenSBI is posted here: https://patchwork.ozlabs.org/project/opensbi/patch/20221212094421.14556-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; pma_resv0@58000000 { compatible = "shared-dma-pool"; reg = <0x0 0x58000000 0x0 0x08000000>; no-map; linux,dma-default; }; }; The above shared DMA pool gets appended to Linux DTB so the DMA memory requests go through this region. 3] We provide callbacks to synchronize specific content between memory and cache. - arch_sync_dma_for_device() - arch_sync_dma_for_cpu() 4] RZ/Five SoC selects the below configs - AX45MP_L2_CACHE - DMA_GLOBAL_POOL - ERRATA_ANDES - ERRATA_ANDES_CMO OpenSBI implementation patches can be found here: 1] https://patchwork.ozlabs.org/project/opensbi/cover/20221210103011.7814-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ 2]https://patchwork.ozlabs.org/project/opensbi/patch/20221212094421.14556-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ ----------x---------------------x--------------------x---------------x-------------- Note, - This series requires testing on Cores with zicbom and T-Head SoCs - Ive used GCC 12.2.0 for compilation (tested with allmodconfig) - Tested all the IP blocks on RZ/Five which use DMA v5.1 -> v6 * Dropped use of ALTERNATIVE_x() macro * Now switched to used function pointers for CMO * Moved driver to drivers/cache folder v5 -> v5.1 * https://patchwork.kernel.org/project/linux-riscv/list/?series=708610&state=%2A&archive=both v4 -> v5 * Rebased ALTERNATIVE_3() macro on top of Andrew's patches * Rebased the changes on top of Heiko's alternative call patches * Dropped configuring the PMA from Linux * Dropped configuring the L2 cache from Linux and dropped the binding for same * Now using runtime patching mechanism instead of compile time config RFC v3 -> v4 * Implemented ALTERNATIVE_3() macro * Now using runtime patching mechanism instead of compile time config * Added Andes CMO as and errata * Fixed comments pointed by Geert RFC v2-> RFC v3 * Fixed review comments pointed by Conor * Move DT binding into cache folder * Fixed DT binding check issue * Added andestech,ax45mp-cache.h header file * Now passing the flags for the PMA setup as part of andestech,pma-regions property. * Added andestech,inst/data-prefetch and andestech,tag/data-ram-ctl properties to configure the L2 cache. * Registered the cache driver as platform driver RFC v1-> RFC v2 * Moved out the code from arc/riscv to drivers/soc/renesas * Now handling the PMA setup as part of the L2 cache * Now making use of dma-noncoherent.c instead SoC specific implementation. * Dropped arch_dma_alloc() and arch_dma_free() * Switched to RISCV_DMA_NONCOHERENT * Included DT binding doc RFC v2: https://patchwork.kernel.org/project/linux-renesas-soc/cover/20221003223222.448551-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ RFC v1: https://patchwork.kernel.org/project/linux-renesas-soc/cover/20220906102154.32526-1-prabhakar.mahadev-lad.rj@bp.renesas.com/ Cheers, Prabhakar Lad Prabhakar (6): riscv: mm: dma-noncoherent: Switch using function pointers for cache management riscv: asm: vendorid_list: Add Andes Technology to the vendors list riscv: errata: Add Andes alternative ports dt-bindings: cache: r9a07g043f-l2-cache: Add DT binding documentation for L2 cache controller cache: Add L2 cache management for Andes AX45MP RISC-V core soc: renesas: Kconfig: Select the required configs for RZ/Five SoC .../cache/andestech,ax45mp-cache.yaml | 81 +++++ arch/riscv/Kconfig.erratas | 22 ++ arch/riscv/errata/Makefile | 1 + arch/riscv/errata/andes/Makefile | 1 + arch/riscv/errata/andes/errata.c | 71 +++++ arch/riscv/errata/thead/errata.c | 71 +++++ arch/riscv/include/asm/alternative.h | 3 + arch/riscv/include/asm/dma-noncoherent.h | 83 ++++++ arch/riscv/include/asm/errata_list.h | 53 ---- arch/riscv/include/asm/vendorid_list.h | 1 + arch/riscv/kernel/alternative.c | 5 + arch/riscv/kernel/cpufeature.c | 2 + arch/riscv/mm/dma-noncoherent.c | 94 +++++- arch/riscv/mm/pmem.c | 18 +- drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/cache/Kconfig | 10 + drivers/cache/Makefile | 3 + drivers/cache/ax45mp_cache.c | 279 ++++++++++++++++++ drivers/soc/renesas/Kconfig | 4 + 20 files changed, 744 insertions(+), 61 deletions(-) create mode 100644 Documentation/devicetree/bindings/cache/andestech,ax45mp-cache.yaml create mode 100644 arch/riscv/errata/andes/Makefile create mode 100644 arch/riscv/errata/andes/errata.c create mode 100644 arch/riscv/include/asm/dma-noncoherent.h create mode 100644 drivers/cache/Kconfig create mode 100644 drivers/cache/Makefile create mode 100644 drivers/cache/ax45mp_cache.c -- 2.25.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
next reply other threads:[~2023-01-06 18:56 UTC|newest] Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-01-06 18:55 Prabhakar [this message] 2023-01-06 18:55 ` [PATCH v6 0/6] RISC-V non-coherent function pointer based cache management operations + non-coherent DMA support for AX45MP Prabhakar 2023-01-06 18:55 ` [RFC PATCH v6 1/6] riscv: mm: dma-noncoherent: Switch using function pointers for cache management Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-06 22:31 ` Arnd Bergmann 2023-01-06 23:29 ` Conor Dooley 2023-01-06 23:29 ` Conor Dooley 2023-01-07 21:52 ` Arnd Bergmann 2023-01-07 21:52 ` Arnd Bergmann 2023-01-07 22:21 ` Conor Dooley 2023-01-07 22:21 ` Conor Dooley 2023-01-08 16:37 ` Conor Dooley 2023-01-08 16:37 ` Conor Dooley 2023-01-07 22:10 ` Lad, Prabhakar 2023-01-07 22:10 ` Lad, Prabhakar 2023-01-08 0:07 ` Arnd Bergmann 2023-01-08 0:07 ` Arnd Bergmann 2023-01-09 12:03 ` Lad, Prabhakar 2023-01-09 12:03 ` Lad, Prabhakar 2023-01-09 12:59 ` Arnd Bergmann 2023-01-09 12:59 ` Arnd Bergmann 2023-01-09 13:27 ` Conor Dooley 2023-01-09 13:27 ` Conor Dooley 2023-01-10 7:01 ` Christoph Hellwig 2023-01-10 7:01 ` Christoph Hellwig 2023-01-10 15:03 ` Arnd Bergmann 2023-01-10 15:03 ` Arnd Bergmann 2023-01-10 15:11 ` Will Deacon 2023-01-10 15:11 ` Will Deacon 2023-01-13 5:48 ` Christoph Hellwig 2023-01-13 5:48 ` Christoph Hellwig 2023-01-20 17:04 ` Arnd Bergmann 2023-01-20 17:04 ` Arnd Bergmann 2023-01-21 14:37 ` Christoph Hellwig 2023-01-21 14:37 ` Christoph Hellwig 2023-01-21 19:30 ` Arnd Bergmann 2023-01-21 19:30 ` Arnd Bergmann 2023-01-22 7:27 ` Christoph Hellwig 2023-01-22 7:27 ` Christoph Hellwig 2023-01-22 11:04 ` Arnd Bergmann 2023-01-22 11:04 ` Arnd Bergmann 2023-01-23 14:46 ` Christoph Hellwig 2023-01-23 14:46 ` Christoph Hellwig 2023-01-06 23:47 ` Conor Dooley 2023-01-06 23:47 ` Conor Dooley 2023-01-07 22:36 ` Lad, Prabhakar 2023-01-07 22:36 ` Lad, Prabhakar 2023-01-06 18:55 ` [PATCH v6 2/6] riscv: asm: vendorid_list: Add Andes Technology to the vendors list Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-06 18:55 ` [PATCH v6 3/6] riscv: errata: Add Andes alternative ports Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-06 21:44 ` Conor Dooley 2023-01-06 21:44 ` Conor Dooley 2023-01-06 18:55 ` [PATCH v6 4/6] dt-bindings: cache: r9a07g043f-l2-cache: Add DT binding documentation for L2 cache controller Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-06 21:53 ` Conor Dooley 2023-01-06 21:53 ` Conor Dooley 2023-01-07 20:43 ` Lad, Prabhakar 2023-01-07 20:43 ` Lad, Prabhakar 2023-01-09 12:15 ` Geert Uytterhoeven 2023-01-09 12:15 ` Geert Uytterhoeven 2023-01-09 13:14 ` Lad, Prabhakar 2023-01-09 13:14 ` Lad, Prabhakar 2023-01-06 18:55 ` [PATCH v6 5/6] cache: Add L2 cache management for Andes AX45MP RISC-V core Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-07 0:09 ` Conor Dooley 2023-01-07 0:09 ` Conor Dooley 2023-01-07 20:49 ` Lad, Prabhakar 2023-01-07 20:49 ` Lad, Prabhakar 2023-01-06 18:55 ` [PATCH v6 6/6] soc: renesas: Kconfig: Select the required configs for RZ/Five SoC Prabhakar 2023-01-06 18:55 ` Prabhakar 2023-01-06 23:49 ` Conor Dooley 2023-01-06 23:49 ` Conor Dooley
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230106185526.260163-1-prabhakar.mahadev-lad.rj@bp.renesas.com \ --to=prabhakar.csengg@gmail.com \ --cc=ajones@ventanamicro.com \ --cc=aou@eecs.berkeley.edu \ --cc=arnd@arndb.de \ --cc=conor.dooley@microchip.com \ --cc=devicetree@vger.kernel.org \ --cc=geert+renesas@glider.be \ --cc=guoren@kernel.org \ --cc=heiko@sntech.de \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-renesas-soc@vger.kernel.org \ --cc=linux-riscv@lists.infradead.org \ --cc=palmer@dabbelt.com \ --cc=paul.walmsley@sifive.com \ --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.