From: Anup Patel <anup@brainfault.org> To: Christoph Hellwig <hch@lst.de> Cc: Mark Rutland <mark.rutland@arm.com>, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, Sebastian Reichel <sre@kernel.org>, Rob Herring <robh+dt@kernel.org>, Palmer Dabbelt <palmer@dabbelt.com>, Paul Walmsley <paul.walmsley@sifive.com>, linux-riscv <linux-riscv@lists.infradead.org> Subject: Re: QEMU RISC-V virt machine poweroff driver Date: Mon, 11 Nov 2019 17:06:24 +0530 Message-ID: <CAAhSdy3SGAkOFMhx320KJdPDh6c=qcKqCZ=qrXNKBGtejpZwSA@mail.gmail.com> (raw) In-Reply-To: <20191107212408.11857-1-hch@lst.de> On Fri, Nov 8, 2019 at 2:54 AM Christoph Hellwig <hch@lst.de> wrote: > > Hi all, > > this patch add a driver for the test device in the Qemu RISC-V > virt machine which allows properly shutting down the VM. > It also is added to the riscv defconfig given that qemu-virt > is the most popular riscv platform. We really don't need this driver. Instead, we can simply re-use following drivers: mfd/syscon power/reset/syscon-reboot power/reset/syscon-poweroff Just enable following to your defconfig: CONFIG_POWER_RESET=y CONFIG_POWER_RESET_SYSCON=y CONFIG_POWER_RESET_SYSCON_POWEROFF=y CONFIG_SYSCON_REBOOT_MODE=y Once above drivers are enabled in your defconfig, make sure test device DT nodes are described in the following way for virt machine: testdev: test@100000 { compatible = "syscon"; reg = <0x100000 0x1000>; }; reboot { compatible = "syscon-reboot"; regmap = <&testdev>; offset = <0x0>; value = <0x7777>; }; poweroff { compatible = "syscon-poweroff"; regmap = <&testdev>; offset = <0x0>; value = <0x5555>; }; Here's the QEMU changes I used for above DT nodes: diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index d7c5d630eb..7f8206c726 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -186,7 +186,7 @@ static void create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap, int cpu; uint32_t *cells; char *nodename; - uint32_t plic_phandle, phandle = 1; + uint32_t plic_phandle, test_phandle, phandle = 1; int i; hwaddr flashsize = virt_memmap[VIRT_FLASH].size / 2; hwaddr flashbase = virt_memmap[VIRT_FLASH].base; @@ -357,13 +357,32 @@ static void create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap, create_pcie_irq_map(fdt, nodename, plic_phandle); g_free(nodename); + test_phandle = phandle++; nodename = g_strdup_printf("/test@%lx", (long)memmap[VIRT_TEST].base); qemu_fdt_add_subnode(fdt, nodename); - qemu_fdt_setprop_string(fdt, nodename, "compatible", "sifive,test0"); + qemu_fdt_setprop_string(fdt, nodename, "compatible", "syscon"); qemu_fdt_setprop_cells(fdt, nodename, "reg", 0x0, memmap[VIRT_TEST].base, 0x0, memmap[VIRT_TEST].size); + qemu_fdt_setprop_cell(fdt, nodename, "phandle", test_phandle); + test_phandle = qemu_fdt_get_phandle(fdt, nodename); + g_free(nodename); + + nodename = g_strdup_printf("/reboot"); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_string(fdt, nodename, "compatible", "syscon-reboot"); + qemu_fdt_setprop_cell(fdt, nodename, "regmap", test_phandle); + qemu_fdt_setprop_cell(fdt, nodename, "offset", 0x0); + qemu_fdt_setprop_cell(fdt, nodename, "value", FINISHER_RESET); + g_free(nodename); + + nodename = g_strdup_printf("/poweroff"); + qemu_fdt_add_subnode(fdt, nodename); + qemu_fdt_setprop_string(fdt, nodename, "compatible", "syscon-poweroff"); + qemu_fdt_setprop_cell(fdt, nodename, "regmap", test_phandle); + qemu_fdt_setprop_cell(fdt, nodename, "offset", 0x0); + qemu_fdt_setprop_cell(fdt, nodename, "value", FINISHER_PASS); g_free(nodename); nodename = g_strdup_printf("/uart@%lx", Regards, Anup > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply index Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-07 21:24 Christoph Hellwig 2019-11-07 21:24 ` [PATCH 1/2] dt-bindings: power: reset: document the QEMU RISC-V virt machine poweroff device Christoph Hellwig 2019-11-07 21:52 ` Palmer Dabbelt 2019-11-07 22:32 ` Paul Walmsley 2019-11-14 1:44 ` Rob Herring 2019-11-07 21:24 ` [PATCH 2/2] power: reset: add a QEMU RISC-V virt machine poweroff driver Christoph Hellwig 2019-11-07 21:53 ` Palmer Dabbelt 2019-11-07 22:33 ` Paul Walmsley 2019-11-07 21:56 ` Palmer Dabbelt 2019-11-11 11:36 ` Anup Patel [this message] 2019-11-11 16:12 ` Christoph Hellwig 2019-11-11 17:20 ` Paul Walmsley 2019-11-12 4:16 ` Anup Patel 2019-11-14 1:50 ` Rob Herring 2019-11-15 22:14 ` Nick Kossifidis 2019-11-18 6:12 ` Anup Patel
Reply instructions: You may reply publically 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='CAAhSdy3SGAkOFMhx320KJdPDh6c=qcKqCZ=qrXNKBGtejpZwSA@mail.gmail.com' \ --to=anup@brainfault.org \ --cc=devicetree@vger.kernel.org \ --cc=hch@lst.de \ --cc=linux-pm@vger.kernel.org \ --cc=linux-riscv@lists.infradead.org \ --cc=mark.rutland@arm.com \ --cc=palmer@dabbelt.com \ --cc=paul.walmsley@sifive.com \ --cc=robh+dt@kernel.org \ --cc=sre@kernel.org \ /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: link
Linux-RISC-V Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-riscv/0 linux-riscv/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-riscv linux-riscv/ https://lore.kernel.org/linux-riscv \ linux-riscv@lists.infradead.org public-inbox-index linux-riscv Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.infradead.lists.linux-riscv AGPL code for this site: git clone https://public-inbox.org/public-inbox.git