We need the fixes in here as well.
Unified · Split
| @@ -15,30 +15,31 @@ · 14 unmodified lines | |||
| 15 | Aaron Durbin <adurbin@google.com> | 15 | Aaron Durbin <adurbin@google.com> |
| 16 | Adam Oldham <oldhamca@gmail.com> | 16 | Adam Oldham <oldhamca@gmail.com> |
| 17 | Adam Radford <aradford@gmail.com> | 17 | Adam Radford <aradford@gmail.com> |
| 18 | Adrian Bunk <bunk@stusta.de> | ||
| 19 | Adriana Reus <adi.reus@gmail.com> <adriana.reus@intel.com> | 18 | Adriana Reus <adi.reus@gmail.com> <adriana.reus@intel.com> |
| 19 | Adrian Bunk <bunk@stusta.de> | ||
| 20 | Alan Cox <alan@lxorguk.ukuu.org.uk> | 20 | Alan Cox <alan@lxorguk.ukuu.org.uk> |
| 21 | Alan Cox <root@hraefn.swansea.linux.org.uk> | 21 | Alan Cox <root@hraefn.swansea.linux.org.uk> |
| 22 | Aleksey Gorelov <aleksey_gorelov@phoenix.com> | ||
| 23 | Aleksandar Markovic <aleksandar.markovic@mips.com> <aleksandar.markovic@imgtec.com> | 22 | Aleksandar Markovic <aleksandar.markovic@mips.com> <aleksandar.markovic@imgtec.com> |
| 24 | Alex Shi <alex.shi@linux.alibaba.com> <alex.shi@intel.com> | 23 | Aleksey Gorelov <aleksey_gorelov@phoenix.com> |
| 25 | Alex Shi <alex.shi@linux.alibaba.com> <alex.shi@linaro.org> | ||
| 26 | Alexander Lobakin <alobakin@pm.me> <alobakin@dlink.ru> | 24 | Alexander Lobakin <alobakin@pm.me> <alobakin@dlink.ru> |
| 27 | Alexander Lobakin <alobakin@pm.me> <alobakin@marvell.com> | 25 | Alexander Lobakin <alobakin@pm.me> <alobakin@marvell.com> |
| 28 | Alexander Lobakin <alobakin@pm.me> <bloodyreaper@yandex.ru> | 26 | Alexander Lobakin <alobakin@pm.me> <bloodyreaper@yandex.ru> |
| 29 | Alexandre Belloni <alexandre.belloni@bootlin.com> <alexandre.belloni@free-electrons.com> | 27 | Alexandre Belloni <alexandre.belloni@bootlin.com> <alexandre.belloni@free-electrons.com> |
| 30 | Alexei Starovoitov <ast@kernel.org> <ast@plumgrid.com> | ||
| 31 | Alexei Starovoitov <ast@kernel.org> <alexei.starovoitov@gmail.com> | 28 | Alexei Starovoitov <ast@kernel.org> <alexei.starovoitov@gmail.com> |
| 32 | Alexei Starovoitov <ast@kernel.org> <ast@fb.com> | 29 | Alexei Starovoitov <ast@kernel.org> <ast@fb.com> |
| 30 | Alexei Starovoitov <ast@kernel.org> <ast@plumgrid.com> | ||
| 31 | Alex Shi <alex.shi@linux.alibaba.com> <alex.shi@intel.com> | ||
| 32 | Alex Shi <alex.shi@linux.alibaba.com> <alex.shi@linaro.org> | ||
| 33 | Al Viro <viro@ftp.linux.org.uk> | 33 | Al Viro <viro@ftp.linux.org.uk> |
| 34 | Al Viro <viro@zenIV.linux.org.uk> | 34 | Al Viro <viro@zenIV.linux.org.uk> |
| 35 | Andi Kleen <ak@linux.intel.com> <ak@suse.de> | ||
| 35 | Andi Shyti <andi@etezian.org> <andi.shyti@samsung.com> | 36 | Andi Shyti <andi@etezian.org> <andi.shyti@samsung.com> |
| 36 | Andreas Herrmann <aherrman@de.ibm.com> | 37 | Andreas Herrmann <aherrman@de.ibm.com> |
| 37 | Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com> | ||
| 38 | Andrew Morton <akpm@linux-foundation.org> | 38 | Andrew Morton <akpm@linux-foundation.org> |
| 39 | Andrew Murray <amurray@thegoodpenguin.co.uk> <andrew.murray@arm.com> | ||
| 40 | Andrew Murray <amurray@thegoodpenguin.co.uk> <amurray@embedded-bits.co.uk> | 39 | Andrew Murray <amurray@thegoodpenguin.co.uk> <amurray@embedded-bits.co.uk> |
| 40 | Andrew Murray <amurray@thegoodpenguin.co.uk> <andrew.murray@arm.com> | ||
| 41 | Andrew Vasquez <andrew.vasquez@qlogic.com> | 41 | Andrew Vasquez <andrew.vasquez@qlogic.com> |
| 42 | Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com> | ||
| 42 | Andy Adamson <andros@citi.umich.edu> | 43 | Andy Adamson <andros@citi.umich.edu> |
| 43 | Antoine Tenart <antoine.tenart@free-electrons.com> | 44 | Antoine Tenart <antoine.tenart@free-electrons.com> |
| 44 | Antonio Ospite <ao2@ao2.it> <ao2@amarulasolutions.com> | 45 | Antonio Ospite <ao2@ao2.it> <ao2@amarulasolutions.com> |
| @@ -48,40 +49,42 @@ Arnaud Patard <arnaud.patard@rtp-net.org> · 3 unmodified lines | |||
| 48 | Arnd Bergmann <arnd@arndb.de> | 49 | Arnd Bergmann <arnd@arndb.de> |
| 49 | Axel Dyks <xl@xlsigned.net> | 50 | Axel Dyks <xl@xlsigned.net> |
| 50 | Axel Lin <axel.lin@gmail.com> | 51 | Axel Lin <axel.lin@gmail.com> |
| 51 | Bart Van Assche <bvanassche@acm.org> <bart.vanassche@wdc.com> | ||
| 52 | Bart Van Assche <bvanassche@acm.org> <bart.vanassche@sandisk.com> | 52 | Bart Van Assche <bvanassche@acm.org> <bart.vanassche@sandisk.com> |
| 53 | Bart Van Assche <bvanassche@acm.org> <bart.vanassche@wdc.com> | ||
| 53 | Ben Gardner <bgardner@wabtec.com> | 54 | Ben Gardner <bgardner@wabtec.com> |
| 54 | Ben M Cahill <ben.m.cahill@intel.com> | 55 | Ben M Cahill <ben.m.cahill@intel.com> |
| 55 | Björn Steinbrink <B.Steinbrink@gmx.de> | 56 | Björn Steinbrink <B.Steinbrink@gmx.de> |
| 56 | Boris Brezillon <bbrezillon@kernel.org> <boris.brezillon@bootlin.com> | ||
| 57 | Boris Brezillon <bbrezillon@kernel.org> <boris.brezillon@free-electrons.com> | ||
| 58 | Boris Brezillon <bbrezillon@kernel.org> <b.brezillon.dev@gmail.com> | 57 | Boris Brezillon <bbrezillon@kernel.org> <b.brezillon.dev@gmail.com> |
| 59 | Boris Brezillon <bbrezillon@kernel.org> <b.brezillon@overkiz.com> | 58 | Boris Brezillon <bbrezillon@kernel.org> <b.brezillon@overkiz.com> |
| 59 | Boris Brezillon <bbrezillon@kernel.org> <boris.brezillon@bootlin.com> | ||
| 60 | Boris Brezillon <bbrezillon@kernel.org> <boris.brezillon@free-electrons.com> | ||
| 60 | Brian Avery <b.avery@hp.com> | 61 | Brian Avery <b.avery@hp.com> |
| 61 | Brian King <brking@us.ibm.com> | 62 | Brian King <brking@us.ibm.com> |
| 63 | Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com> | ||
| 64 | Changbin Du <changbin.du@intel.com> <changbin.du@intel.com> | ||
| 62 | Chao Yu <chao@kernel.org> <chao2.yu@samsung.com> | 65 | Chao Yu <chao@kernel.org> <chao2.yu@samsung.com> |
| 63 | Chao Yu <chao@kernel.org> <yuchao0@huawei.com> | 66 | Chao Yu <chao@kernel.org> <yuchao0@huawei.com> |
| 64 | Christoph Hellwig <hch@lst.de> | ||
| 65 | Christophe Ricard <christophe.ricard@gmail.com> | 67 | Christophe Ricard <christophe.ricard@gmail.com> |
| 68 | Christoph Hellwig <hch@lst.de> | ||
| 66 | Corey Minyard <minyard@acm.org> | 69 | Corey Minyard <minyard@acm.org> |
| 67 | Damian Hobson-Garcia <dhobsong@igel.co.jp> | 70 | Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| 68 | Daniel Borkmann <daniel@iogearbox.net> <dborkman@redhat.com> | 71 | Daniel Borkmann <daniel@iogearbox.net> <danborkmann@googlemail.com> |
| 69 | Daniel Borkmann <daniel@iogearbox.net> <dborkmann@redhat.com> | ||
| 70 | Daniel Borkmann <daniel@iogearbox.net> <danborkmann@iogearbox.net> | 72 | Daniel Borkmann <daniel@iogearbox.net> <danborkmann@iogearbox.net> |
| 71 | Daniel Borkmann <daniel@iogearbox.net> <daniel.borkmann@tik.ee.ethz.ch> | 73 | Daniel Borkmann <daniel@iogearbox.net> <daniel.borkmann@tik.ee.ethz.ch> |
| 72 | Daniel Borkmann <daniel@iogearbox.net> <danborkmann@googlemail.com> | 74 | Daniel Borkmann <daniel@iogearbox.net> <dborkmann@redhat.com> |
| 75 | Daniel Borkmann <daniel@iogearbox.net> <dborkman@redhat.com> | ||
| 73 | Daniel Borkmann <daniel@iogearbox.net> <dxchgb@gmail.com> | 76 | Daniel Borkmann <daniel@iogearbox.net> <dxchgb@gmail.com> |
| 74 | David Brownell <david-b@pacbell.net> | 77 | David Brownell <david-b@pacbell.net> |
| 75 | David Woodhouse <dwmw2@shinybook.infradead.org> | 78 | David Woodhouse <dwmw2@shinybook.infradead.org> |
| 76 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@mips.com> | ||
| 77 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@imgtec.com> | ||
| 78 | Dengcheng Zhu <dzhu@wavecomp.com> <dczhu@mips.com> | 79 | Dengcheng Zhu <dzhu@wavecomp.com> <dczhu@mips.com> |
| 79 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@gmail.com> | 80 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@gmail.com> |
| 81 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@imgtec.com> | ||
| 82 | Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@mips.com> | ||
| 80 | <dev.kurt@vandijck-laurijssen.be> <kurt.van.dijck@eia.be> | 83 | <dev.kurt@vandijck-laurijssen.be> <kurt.van.dijck@eia.be> |
| 81 | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 84 | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
| 82 | Dmitry Safonov <0x7f454c46@gmail.com> <dsafonov@virtuozzo.com> | ||
| 83 | Dmitry Safonov <0x7f454c46@gmail.com> <d.safonov@partner.samsung.com> | ||
| 84 | Dmitry Safonov <0x7f454c46@gmail.com> <dima@arista.com> | 85 | Dmitry Safonov <0x7f454c46@gmail.com> <dima@arista.com> |
| 86 | Dmitry Safonov <0x7f454c46@gmail.com> <d.safonov@partner.samsung.com> | ||
| 87 | Dmitry Safonov <0x7f454c46@gmail.com> <dsafonov@virtuozzo.com> | ||
| 85 | Domen Puncer <domen@coderock.org> | 88 | Domen Puncer <domen@coderock.org> |
| 86 | Douglas Gilbert <dougg@torque.net> | 89 | Douglas Gilbert <dougg@torque.net> |
| 87 | Ed L. Cashin <ecashin@coraid.com> | 90 | Ed L. Cashin <ecashin@coraid.com> |
| @@ -92,20 +95,22 @@ Felix Kuhling <fxkuehl@gmx.de> · 4 unmodified lines | |||
| 92 | Felix Moeller <felix@derklecks.de> | 95 | Felix Moeller <felix@derklecks.de> |
| 93 | Filipe Lautert <filipe@icewall.org> | 96 | Filipe Lautert <filipe@icewall.org> |
| 94 | Franck Bui-Huu <vagabon.xyz@gmail.com> | 97 | Franck Bui-Huu <vagabon.xyz@gmail.com> |
| 95 | Frank Rowand <frowand.list@gmail.com> <frowand@mvista.com> | ||
| 96 | Frank Rowand <frowand.list@gmail.com> <frank.rowand@am.sony.com> | 98 | Frank Rowand <frowand.list@gmail.com> <frank.rowand@am.sony.com> |
| 97 | Frank Rowand <frowand.list@gmail.com> <frank.rowand@sonymobile.com> | 99 | Frank Rowand <frowand.list@gmail.com> <frank.rowand@sonymobile.com> |
| 100 | Frank Rowand <frowand.list@gmail.com> <frowand@mvista.com> | ||
| 98 | Frank Zago <fzago@systemfabricworks.com> | 101 | Frank Zago <fzago@systemfabricworks.com> |
| 99 | Gao Xiang <xiang@kernel.org> <gaoxiang25@huawei.com> | 102 | Gao Xiang <xiang@kernel.org> <gaoxiang25@huawei.com> |
| 100 | Gao Xiang <xiang@kernel.org> <hsiangkao@aol.com> | 103 | Gao Xiang <xiang@kernel.org> <hsiangkao@aol.com> |
| 101 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <gerald.schaefer@de.ibm.com> | ||
| 102 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@de.ibm.com> | 104 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@de.ibm.com> |
| 105 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <gerald.schaefer@de.ibm.com> | ||
| 103 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@linux.vnet.ibm.com> | 106 | Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@linux.vnet.ibm.com> |
| 104 | Greg Kroah-Hartman <greg@echidna.(none)> | 107 | Greg Kroah-Hartman <greg@echidna.(none)> |
| 105 | Greg Kroah-Hartman <gregkh@suse.de> | 108 | Greg Kroah-Hartman <gregkh@suse.de> |
| 106 | Greg Kroah-Hartman <greg@kroah.com> | 109 | Greg Kroah-Hartman <greg@kroah.com> |
| 107 | Greg Kurz <groug@kaod.org> <gkurz@linux.vnet.ibm.com> | 110 | Greg Kurz <groug@kaod.org> <gkurz@linux.vnet.ibm.com> |
| 108 | Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com> | 111 | Gregory CLEMENT <gregory.clement@bootlin.com> <gregory.clement@free-electrons.com> |
| 112 | Gustavo Padovan <gustavo@las.ic.unicamp.br> | ||
| 113 | Gustavo Padovan <padovan@profusion.mobi> | ||
| 109 | Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org> | 114 | Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org> |
| 110 | Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com> | 115 | Heiko Carstens <hca@linux.ibm.com> <h.carstens@de.ibm.com> |
| 111 | Heiko Carstens <hca@linux.ibm.com> <heiko.carstens@de.ibm.com> | 116 | Heiko Carstens <hca@linux.ibm.com> <heiko.carstens@de.ibm.com> |
| @@ -115,32 +120,33 @@ Henrik Rydberg <rydberg@bitmath.org> · 3 unmodified lines | |||
| 115 | Herbert Xu <herbert@gondor.apana.org.au> | 120 | Herbert Xu <herbert@gondor.apana.org.au> |
| 116 | Jacob Shin <Jacob.Shin@amd.com> | 121 | Jacob Shin <Jacob.Shin@amd.com> |
| 117 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk@google.com> | 122 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk@google.com> |
| 118 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk@motorola.com> | ||
| 119 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk.kim@samsung.com> | 123 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk.kim@samsung.com> |
| 124 | Jaegeuk Kim <jaegeuk@kernel.org> <jaegeuk@motorola.com> | ||
| 120 | Jakub Kicinski <kuba@kernel.org> <jakub.kicinski@netronome.com> | 125 | Jakub Kicinski <kuba@kernel.org> <jakub.kicinski@netronome.com> |
| 121 | James Bottomley <jejb@mulgrave.(none)> | 126 | James Bottomley <jejb@mulgrave.(none)> |
| 122 | James Bottomley <jejb@titanic.il.steeleye.com> | 127 | James Bottomley <jejb@titanic.il.steeleye.com> |
| 123 | James E Wilson <wilson@specifix.com> | 128 | James E Wilson <wilson@specifix.com> |
| 124 | James Hogan <jhogan@kernel.org> <james.hogan@imgtec.com> | ||
| 125 | James Hogan <jhogan@kernel.org> <james@albanarts.com> | 129 | James Hogan <jhogan@kernel.org> <james@albanarts.com> |
| 130 | James Hogan <jhogan@kernel.org> <james.hogan@imgtec.com> | ||
| 126 | James Ketrenos <jketreno@io.(none)> | 131 | James Ketrenos <jketreno@io.(none)> |
| 127 | Jan Glauber <jan.glauber@gmail.com> <jang@de.ibm.com> | 132 | Jan Glauber <jan.glauber@gmail.com> <jang@de.ibm.com> |
| 128 | Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com> | 133 | Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com> |
| 129 | Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com> | 134 | Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com> |
| 130 | Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com> | 135 | Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com> |
| 136 | Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com> | ||
| 131 | Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com> | 137 | Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com> |
| 132 | Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com> | ||
| 133 | <javier@osg.samsung.com> <javier.martinez@collabora.co.uk> | 138 | <javier@osg.samsung.com> <javier.martinez@collabora.co.uk> |
| 139 | Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com> | ||
| 134 | Jayachandran C <c.jayachandran@gmail.com> <jayachandranc@netlogicmicro.com> | 140 | Jayachandran C <c.jayachandran@gmail.com> <jayachandranc@netlogicmicro.com> |
| 135 | Jayachandran C <c.jayachandran@gmail.com> <jchandra@broadcom.com> | 141 | Jayachandran C <c.jayachandran@gmail.com> <jchandra@broadcom.com> |
| 136 | Jayachandran C <c.jayachandran@gmail.com> <jchandra@digeo.com> | 142 | Jayachandran C <c.jayachandran@gmail.com> <jchandra@digeo.com> |
| 137 | Jayachandran C <c.jayachandran@gmail.com> <jnair@caviumnetworks.com> | 143 | Jayachandran C <c.jayachandran@gmail.com> <jnair@caviumnetworks.com> |
| 138 | Jean Tourrilhes <jt@hpl.hp.com> | ||
| 139 | <jean-philippe@linaro.org> <jean-philippe.brucker@arm.com> | 144 | <jean-philippe@linaro.org> <jean-philippe.brucker@arm.com> |
| 145 | Jean Tourrilhes <jt@hpl.hp.com> | ||
| 140 | Jeff Garzik <jgarzik@pretzel.yyz.us> | 146 | Jeff Garzik <jgarzik@pretzel.yyz.us> |
| 141 | Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com> | ||
| 142 | Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net> | 147 | Jeff Layton <jlayton@kernel.org> <jlayton@poochiereds.net> |
| 143 | Jeff Layton <jlayton@kernel.org> <jlayton@primarydata.com> | 148 | Jeff Layton <jlayton@kernel.org> <jlayton@primarydata.com> |
| 149 | Jeff Layton <jlayton@kernel.org> <jlayton@redhat.com> | ||
| 144 | Jens Axboe <axboe@suse.de> | 150 | Jens Axboe <axboe@suse.de> |
| 145 | Jens Osterkamp <Jens.Osterkamp@de.ibm.com> | 151 | Jens Osterkamp <Jens.Osterkamp@de.ibm.com> |
| 146 | Jiri Slaby <jirislaby@kernel.org> <jirislaby@gmail.com> | 152 | Jiri Slaby <jirislaby@kernel.org> <jirislaby@gmail.com> |
| @@ -164,30 +170,31 @@ Julien Thierry <julien.thierry.kdev@gmail.com> <julien.thierry@arm.com> · 17 unmodified lines | |||
| 164 | Kamil Konieczny <k.konieczny@samsung.com> <k.konieczny@partner.samsung.com> | 170 | Kamil Konieczny <k.konieczny@samsung.com> <k.konieczny@partner.samsung.com> |
| 165 | Kay Sievers <kay.sievers@vrfy.org> | 171 | Kay Sievers <kay.sievers@vrfy.org> |
| 166 | Kenneth W Chen <kenneth.w.chen@intel.com> | 172 | Kenneth W Chen <kenneth.w.chen@intel.com> |
| 167 | Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> | ||
| 168 | Konstantin Khlebnikov <koct9i@gmail.com> <khlebnikov@yandex-team.ru> | 173 | Konstantin Khlebnikov <koct9i@gmail.com> <khlebnikov@yandex-team.ru> |
| 174 | Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> | ||
| 169 | Koushik <raghavendra.koushik@neterion.com> | 175 | Koushik <raghavendra.koushik@neterion.com> |
| 170 | Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com> | ||
| 171 | Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com> | 176 | Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com> |
| 177 | Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com> | ||
| 172 | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 178 | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| 173 | Leon Romanovsky <leon@kernel.org> <leon@leon.nu> | ||
| 174 | Leon Romanovsky <leon@kernel.org> <leonro@mellanox.com> | ||
| 175 | Leonardo Bras <leobras.c@gmail.com> <leonardo@linux.ibm.com> | 179 | Leonardo Bras <leobras.c@gmail.com> <leonardo@linux.ibm.com> |
| 176 | Leonid I Ananiev <leonid.i.ananiev@intel.com> | 180 | Leonid I Ananiev <leonid.i.ananiev@intel.com> |
| 181 | Leon Romanovsky <leon@kernel.org> <leon@leon.nu> | ||
| 182 | Leon Romanovsky <leon@kernel.org> <leonro@mellanox.com> | ||
| 183 | Leon Romanovsky <leon@kernel.org> <leonro@nvidia.com> | ||
| 177 | Linas Vepstas <linas@austin.ibm.com> | 184 | Linas Vepstas <linas@austin.ibm.com> |
| 178 | Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de> | ||
| 179 | Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch> | 185 | Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch> |
| 180 | Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org> | 186 | Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de> |
| 181 | Li Yang <leoyang.li@nxp.com> <leoli@freescale.com> | 187 | Li Yang <leoyang.li@nxp.com> <leoli@freescale.com> |
| 188 | Li Yang <leoyang.li@nxp.com> <leo@zh-kernel.org> | ||
| 182 | Lukasz Luba <lukasz.luba@arm.com> <l.luba@partner.samsung.com> | 189 | Lukasz Luba <lukasz.luba@arm.com> <l.luba@partner.samsung.com> |
| 183 | Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com> | 190 | Maciej W. Rozycki <macro@mips.com> <macro@imgtec.com> |
| 184 | Marc Zyngier <maz@kernel.org> <marc.zyngier@arm.com> | ||
| 185 | Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com> | 191 | Marcin Nowakowski <marcin.nowakowski@mips.com> <marcin.nowakowski@imgtec.com> |
| 192 | Marc Zyngier <maz@kernel.org> <marc.zyngier@arm.com> | ||
| 186 | Mark Brown <broonie@sirena.org.uk> | 193 | Mark Brown <broonie@sirena.org.uk> |
| 187 | Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com> | 194 | Mark Yao <markyao0591@gmail.com> <mark.yao@rock-chips.com> |
| 188 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@theobroma-systems.com> | ||
| 189 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@ginzinger.com> | 195 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@ginzinger.com> |
| 190 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@puri.sm> | 196 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@puri.sm> |
| 197 | Martin Kepplinger <martink@posteo.de> <martin.kepplinger@theobroma-systems.com> | ||
| 191 | Mathieu Othacehe <m.othacehe@gmail.com> | 198 | Mathieu Othacehe <m.othacehe@gmail.com> |
| 192 | Matthew Wilcox <willy@infradead.org> <matthew.r.wilcox@intel.com> | 199 | Matthew Wilcox <willy@infradead.org> <matthew.r.wilcox@intel.com> |
| 193 | Matthew Wilcox <willy@infradead.org> <matthew@wil.cx> | 200 | Matthew Wilcox <willy@infradead.org> <matthew@wil.cx> |
| @@ -197,17 +204,17 @@ Matthew Wilcox <willy@infradead.org> <willy@debian.org> · 3 unmodified lines | |||
| 197 | Matthew Wilcox <willy@infradead.org> <willy@linux.intel.com> | 204 | Matthew Wilcox <willy@infradead.org> <willy@linux.intel.com> |
| 198 | Matthew Wilcox <willy@infradead.org> <willy@parisc-linux.org> | 205 | Matthew Wilcox <willy@infradead.org> <willy@parisc-linux.org> |
| 199 | Matthieu CASTET <castet.matthieu@free.fr> | 206 | Matthieu CASTET <castet.matthieu@free.fr> |
| 200 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@brturbo.com.br> | 207 | Matt Ranostay <matt.ranostay@konsulko.com> <matt@ranostay.consulting> |
| 208 | Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.com> | ||
| 209 | Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com> | ||
| 210 | Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com> | ||
| 201 | Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> | 211 | Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> |
| 212 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@brturbo.com.br> | ||
| 202 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@infradead.org> | 213 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@infradead.org> |
| 214 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com> | ||
| 203 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com> | 215 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com> |
| 204 | Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com> | 216 | Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com> |
| 205 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com> | ||
| 206 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com> | 217 | Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com> |
| 207 | Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.com> | ||
| 208 | Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com> | ||
| 209 | Matt Ranostay <matt.ranostay@konsulko.com> <matt@ranostay.consulting> | ||
| 210 | Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com> | ||
| 211 | Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com> | 218 | Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com> |
| 212 | Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com> | 219 | Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com> |
| 213 | Mayuresh Janorkar <mayur@ti.com> | 220 | Mayuresh Janorkar <mayur@ti.com> |
| @@ -239,13 +246,13 @@ Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> · 25 unmodified lines | |||
| 239 | Patrick Mochel <mochel@digitalimplant.org> | 246 | Patrick Mochel <mochel@digitalimplant.org> |
| 240 | Paul Burton <paulburton@kernel.org> <paul.burton@imgtec.com> | 247 | Paul Burton <paulburton@kernel.org> <paul.burton@imgtec.com> |
| 241 | Paul Burton <paulburton@kernel.org> <paul.burton@mips.com> | 248 | Paul Burton <paulburton@kernel.org> <paul.burton@mips.com> |
| 249 | Paul E. McKenney <paulmck@kernel.org> <paul.mckenney@linaro.org> | ||
| 242 | Paul E. McKenney <paulmck@kernel.org> <paulmck@linux.ibm.com> | 250 | Paul E. McKenney <paulmck@kernel.org> <paulmck@linux.ibm.com> |
| 243 | Paul E. McKenney <paulmck@kernel.org> <paulmck@linux.vnet.ibm.com> | 251 | Paul E. McKenney <paulmck@kernel.org> <paulmck@linux.vnet.ibm.com> |
| 244 | Paul E. McKenney <paulmck@kernel.org> <paul.mckenney@linaro.org> | ||
| 245 | Paul E. McKenney <paulmck@kernel.org> <paulmck@us.ibm.com> | 252 | Paul E. McKenney <paulmck@kernel.org> <paulmck@us.ibm.com> |
| 246 | Peter A Jonsson <pj@ludd.ltu.se> | 253 | Peter A Jonsson <pj@ludd.ltu.se> |
| 247 | Peter Oruba <peter@oruba.de> | ||
| 248 | Peter Oruba <peter.oruba@amd.com> | 254 | Peter Oruba <peter.oruba@amd.com> |
| 255 | Peter Oruba <peter@oruba.de> | ||
| 249 | Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com> | 256 | Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com> |
| 250 | Praveen BP <praveenbp@ti.com> | 257 | Praveen BP <praveenbp@ti.com> |
| 251 | Punit Agrawal <punitagrawal@gmail.com> <punit.agrawal@arm.com> | 258 | Punit Agrawal <punitagrawal@gmail.com> <punit.agrawal@arm.com> |
| @@ -258,23 +265,23 @@ Ralf Baechle <ralf@linux-mips.org> · 6 unmodified lines | |||
| 258 | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> | 265 | Ralf Wildenhues <Ralf.Wildenhues@gmx.de> |
| 259 | Randy Dunlap <rdunlap@infradead.org> <rdunlap@xenotime.net> | 266 | Randy Dunlap <rdunlap@infradead.org> <rdunlap@xenotime.net> |
| 260 | Rémi Denis-Courmont <rdenis@simphalempin.com> | 267 | Rémi Denis-Courmont <rdenis@simphalempin.com> |
| 261 | Ricardo Ribalda <ribalda@kernel.org> <ricardo.ribalda@gmail.com> | ||
| 262 | Ricardo Ribalda <ribalda@kernel.org> <ricardo@ribalda.com> | 268 | Ricardo Ribalda <ribalda@kernel.org> <ricardo@ribalda.com> |
| 263 | Ricardo Ribalda <ribalda@kernel.org> Ricardo Ribalda Delgado <ribalda@kernel.org> | 269 | Ricardo Ribalda <ribalda@kernel.org> Ricardo Ribalda Delgado <ribalda@kernel.org> |
| 270 | Ricardo Ribalda <ribalda@kernel.org> <ricardo.ribalda@gmail.com> | ||
| 264 | Ross Zwisler <zwisler@kernel.org> <ross.zwisler@linux.intel.com> | 271 | Ross Zwisler <zwisler@kernel.org> <ross.zwisler@linux.intel.com> |
| 265 | Rudolf Marek <R.Marek@sh.cvut.cz> | 272 | Rudolf Marek <R.Marek@sh.cvut.cz> |
| 266 | Rui Saraiva <rmps@joel.ist.utl.pt> | 273 | Rui Saraiva <rmps@joel.ist.utl.pt> |
| 267 | Sachin P Sant <ssant@in.ibm.com> | 274 | Sachin P Sant <ssant@in.ibm.com> |
| 268 | Sarangdhar Joshi <spjoshi@codeaurora.org> | 275 | Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi> |
| 269 | Sam Ravnborg <sam@mars.ravnborg.org> | 276 | Sam Ravnborg <sam@mars.ravnborg.org> |
| 270 | Santosh Shilimkar <ssantosh@kernel.org> | ||
| 271 | Santosh Shilimkar <santosh.shilimkar@oracle.org> | 277 | Santosh Shilimkar <santosh.shilimkar@oracle.org> |
| 278 | Santosh Shilimkar <ssantosh@kernel.org> | ||
| 279 | Sarangdhar Joshi <spjoshi@codeaurora.org> | ||
| 272 | Sascha Hauer <s.hauer@pengutronix.de> | 280 | Sascha Hauer <s.hauer@pengutronix.de> |
| 273 | S.Çağlar Onur <caglar@pardus.org.tr> | 281 | S.Çağlar Onur <caglar@pardus.org.tr> |
| 274 | Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi> | ||
| 275 | Sean Nyekjaer <sean@geanix.com> <sean.nyekjaer@prevas.dk> | 282 | Sean Nyekjaer <sean@geanix.com> <sean.nyekjaer@prevas.dk> |
| 276 | Sebastian Reichel <sre@kernel.org> <sre@debian.org> | ||
| 277 | Sebastian Reichel <sre@kernel.org> <sebastian.reichel@collabora.co.uk> | 283 | Sebastian Reichel <sre@kernel.org> <sebastian.reichel@collabora.co.uk> |
| 284 | Sebastian Reichel <sre@kernel.org> <sre@debian.org> | ||
| 278 | Sedat Dilek <sedat.dilek@gmail.com> <sedat.dilek@credativ.de> | 285 | Sedat Dilek <sedat.dilek@gmail.com> <sedat.dilek@credativ.de> |
| 279 | Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com> | 286 | Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com> |
| 280 | Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> | 287 | Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> |
| @@ -285,18 +292,21 @@ Simon Arlott <simon@octiron.net> <simon@fire.lp0.eu> · 4 unmodified lines | |||
| 285 | Simon Kelley <simon@thekelleys.org.uk> | 292 | Simon Kelley <simon@thekelleys.org.uk> |
| 286 | Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> | 293 | Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> |
| 287 | Stephen Hemminger <shemminger@osdl.org> | 294 | Stephen Hemminger <shemminger@osdl.org> |
| 295 | Steve Wise <larrystevenwise@gmail.com> <swise@chelsio.com> | ||
| 296 | Steve Wise <larrystevenwise@gmail.com> <swise@opengridcomputing.com> | ||
| 288 | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> | 297 | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> |
| 289 | Subhash Jadavani <subhashj@codeaurora.org> | 298 | Subhash Jadavani <subhashj@codeaurora.org> |
| 290 | Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> | 299 | Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> |
| 291 | Sumit Semwal <sumit.semwal@ti.com> | 300 | Sumit Semwal <sumit.semwal@ti.com> |
| 301 | Takashi YOSHII <takashi.yoshii.zj@renesas.com> | ||
| 292 | Tejun Heo <htejun@gmail.com> | 302 | Tejun Heo <htejun@gmail.com> |
| 293 | Thomas Graf <tgraf@suug.ch> | 303 | Thomas Graf <tgraf@suug.ch> |
| 294 | Thomas Pedersen <twp@codeaurora.org> | 304 | Thomas Pedersen <twp@codeaurora.org> |
| 295 | Tiezhu Yang <yangtiezhu@loongson.cn> <kernelpatch@126.com> | 305 | Tiezhu Yang <yangtiezhu@loongson.cn> <kernelpatch@126.com> |
| 296 | Todor Tomov <todor.too@gmail.com> <todor.tomov@linaro.org> | 306 | Todor Tomov <todor.too@gmail.com> <todor.tomov@linaro.org> |
| 297 | Tony Luck <tony.luck@intel.com> | 307 | Tony Luck <tony.luck@intel.com> |
| 298 | TripleX Chung <xxx.phy@gmail.com> <zhongyu@18mail.cn> | ||
| 299 | TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org> | 308 | TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org> |
| 309 | TripleX Chung <xxx.phy@gmail.com> <zhongyu@18mail.cn> | ||
| 300 | Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> | 310 | Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> |
| 301 | Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> | 311 | Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> |
| 302 | Uwe Kleine-König <ukl@pengutronix.de> | 312 | Uwe Kleine-König <ukl@pengutronix.de> |
| @@ -305,22 +315,16 @@ Valdis Kletnieks <Valdis.Kletnieks@vt.edu> · 2 unmodified lines | |||
| 305 | Vinod Koul <vkoul@kernel.org> <vinod.koul@intel.com> | 315 | Vinod Koul <vkoul@kernel.org> <vinod.koul@intel.com> |
| 306 | Vinod Koul <vkoul@kernel.org> <vinod.koul@linux.intel.com> | 316 | Vinod Koul <vkoul@kernel.org> <vinod.koul@linux.intel.com> |
| 307 | Vinod Koul <vkoul@kernel.org> <vkoul@infradead.org> | 317 | Vinod Koul <vkoul@kernel.org> <vkoul@infradead.org> |
| 318 | Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com> | ||
| 308 | Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com> | 319 | Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com> |
| 309 | Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com> | 320 | Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com> |
| 310 | Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com> | ||
| 311 | Vivien Didelot <vivien.didelot@gmail.com> <vivien.didelot@savoirfairelinux.com> | 321 | Vivien Didelot <vivien.didelot@gmail.com> <vivien.didelot@savoirfairelinux.com> |
| 312 | Vlad Dogaru <ddvlad@gmail.com> <vlad.dogaru@intel.com> | 322 | Vlad Dogaru <ddvlad@gmail.com> <vlad.dogaru@intel.com> |
| 313 | Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com> | ||
| 314 | Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com> | 323 | Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com> |
| 315 | Takashi YOSHII <takashi.yoshii.zj@renesas.com> | 324 | Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com> |
| 325 | WeiXiong Liao <gmpy.liaowx@gmail.com> <liaoweixiong@allwinnertech.com> | ||
| 316 | Will Deacon <will@kernel.org> <will.deacon@arm.com> | 326 | Will Deacon <will@kernel.org> <will.deacon@arm.com> |
| 317 | Wolfram Sang <wsa@kernel.org> <wsa@the-dreams.de> | ||
| 318 | Wolfram Sang <wsa@kernel.org> <w.sang@pengutronix.de> | 327 | Wolfram Sang <wsa@kernel.org> <w.sang@pengutronix.de> |
| 328 | Wolfram Sang <wsa@kernel.org> <wsa@the-dreams.de> | ||
| 319 | Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com> | 329 | Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com> |
| 320 | Yusuke Goda <goda.yusuke@renesas.com> | 330 | Yusuke Goda <goda.yusuke@renesas.com> |
| 321 | Gustavo Padovan <gustavo@las.ic.unicamp.br> | ||
| 322 | Gustavo Padovan <padovan@profusion.mobi> | ||
| 323 | Changbin Du <changbin.du@intel.com> <changbin.du@intel.com> | ||
| 324 | Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com> | ||
| 325 | Steve Wise <larrystevenwise@gmail.com> <swise@chelsio.com> | ||
| 326 | Steve Wise <larrystevenwise@gmail.com> <swise@opengridcomputing.com> | ||
| @@ -43,7 +43,7 @@ Description: read only · 42 unmodified lines | |||
| 43 | This sysfs interface exposes the number of cores per chip | 43 | This sysfs interface exposes the number of cores per chip |
| 44 | present in the system. | 44 | present in the system. |
| 45 | 45 | ||
| 46 | What: /sys/devices/hv_24x7/interface/cpumask | 46 | What: /sys/devices/hv_24x7/cpumask |
| 47 | Date: July 2020 | 47 | Date: July 2020 |
| 48 | Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org> | 48 | Contact: Linux on PowerPC Developer List <linuxppc-dev@lists.ozlabs.org> |
| 49 | Description: read only | 49 | Description: read only |
| @@ -489,6 +489,9 @@ Files in /sys/fs/ext4/<devname>: · 488 unmodified lines | |||
| 489 | multiple of this tuning parameter if the stripe size is not set in the | 489 | multiple of this tuning parameter if the stripe size is not set in the |
| 490 | ext4 superblock | 490 | ext4 superblock |
| 491 | 491 | ||
| 492 | mb_max_inode_prealloc | ||
| 493 | The maximum length of per-inode ext4_prealloc_space list. | ||
| 494 | |||
| 492 | mb_max_to_scan | 495 | mb_max_to_scan |
| 493 | The maximum number of extents the multiblock allocator will search to | 496 | The maximum number of extents the multiblock allocator will search to |
| 494 | find the best extent. | 497 | find the best extent. |
| @@ -529,21 +532,21 @@ Files in /sys/fs/ext4/<devname>: · 34 unmodified lines | |||
| 529 | Ioctls | 532 | Ioctls |
| 530 | ====== | 533 | ====== |
| 531 | 534 | ||
| 532 | There is some Ext4 specific functionality which can be accessed by applications | 535 | Ext4 implements various ioctls which can be used by applications to access |
| 533 | through the system call interfaces. The list of all Ext4 specific ioctls are | 536 | ext4-specific functionality. An incomplete list of these ioctls is shown in the |
| 534 | shown in the table below. | 537 | table below. This list includes truly ext4-specific ioctls (``EXT4_IOC_*``) as |
| 538 | well as ioctls that may have been ext4-specific originally but are now supported | ||
| 539 | by some other filesystem(s) too (``FS_IOC_*``). | ||
| 535 | 540 | ||
| 536 | Table of Ext4 specific ioctls | 541 | Table of Ext4 ioctls |
| 537 | 542 | ||
| 538 | EXT4_IOC_GETFLAGS | 543 | FS_IOC_GETFLAGS |
| 539 | Get additional attributes associated with inode. The ioctl argument is | 544 | Get additional attributes associated with inode. The ioctl argument is |
| 540 | an integer bitfield, with bit values described in ext4.h. This ioctl is | 545 | an integer bitfield, with bit values described in ext4.h. |
| 541 | an alias for FS_IOC_GETFLAGS. | ||
| 542 | 546 | ||
| 543 | EXT4_IOC_SETFLAGS | 547 | FS_IOC_SETFLAGS |
| 544 | Set additional attributes associated with inode. The ioctl argument is | 548 | Set additional attributes associated with inode. The ioctl argument is |
| 545 | an integer bitfield, with bit values described in ext4.h. This ioctl is | 549 | an integer bitfield, with bit values described in ext4.h. |
| 546 | an alias for FS_IOC_SETFLAGS. | ||
| 547 | 550 | ||
| 548 | EXT4_IOC_GETVERSION, EXT4_IOC_GETVERSION_OLD | 551 | EXT4_IOC_GETVERSION, EXT4_IOC_GETVERSION_OLD |
| 549 | Get the inode i_generation number stored for each inode. The | 552 | Get the inode i_generation number stored for each inode. The |
| @@ -1233,8 +1233,7 @@ · 1232 unmodified lines | |||
| 1233 | efi= [EFI] | 1233 | efi= [EFI] |
| 1234 | Format: { "debug", "disable_early_pci_dma", | 1234 | Format: { "debug", "disable_early_pci_dma", |
| 1235 | "nochunk", "noruntime", "nosoftreserve", | 1235 | "nochunk", "noruntime", "nosoftreserve", |
| 1236 | "novamap", "no_disable_early_pci_dma", | 1236 | "novamap", "no_disable_early_pci_dma" } |
| 1237 | "old_map" } | ||
| 1238 | debug: enable misc debug output. | 1237 | debug: enable misc debug output. |
| 1239 | disable_early_pci_dma: disable the busmaster bit on all | 1238 | disable_early_pci_dma: disable the busmaster bit on all |
| 1240 | PCI bridges while in the EFI boot stub. | 1239 | PCI bridges while in the EFI boot stub. |
| @@ -1251,8 +1250,6 @@ · 10 unmodified lines | |||
| 1251 | novamap: do not call SetVirtualAddressMap(). | 1250 | novamap: do not call SetVirtualAddressMap(). |
| 1252 | no_disable_early_pci_dma: Leave the busmaster bit set | 1251 | no_disable_early_pci_dma: Leave the busmaster bit set |
| 1253 | on all PCI bridges while in the EFI boot stub | 1252 | on all PCI bridges while in the EFI boot stub |
| 1254 | old_map [X86-64]: switch to the old ioremap-based EFI | ||
| 1255 | runtime services mapping. [Needs CONFIG_X86_UV=y] | ||
| 1256 | 1253 | ||
| 1257 | efi_no_storage_paranoia [EFI; X86] | 1254 | efi_no_storage_paranoia [EFI; X86] |
| 1258 | Using this parameter you can use more than 50% of | 1255 | Using this parameter you can use more than 50% of |
| @@ -564,8 +564,8 @@ Energy-Performance Preference (EPP) knob (if supported) or its · 563 unmodified lines | |||
| 564 | Energy-Performance Bias (EPB) knob. It is also possible to write a positive | 564 | Energy-Performance Bias (EPB) knob. It is also possible to write a positive |
| 565 | integer value between 0 to 255, if the EPP feature is present. If the EPP | 565 | integer value between 0 to 255, if the EPP feature is present. If the EPP |
| 566 | feature is not present, writing integer value to this attribute is not | 566 | feature is not present, writing integer value to this attribute is not |
| 567 | supported. In this case, user can use | 567 | supported. In this case, user can use the |
| 568 | "/sys/devices/system/cpu/cpu*/power/energy_perf_bias" interface. | 568 | "/sys/devices/system/cpu/cpu*/power/energy_perf_bias" interface. |
| 569 | 569 | ||
| 570 | [Note that tasks may by migrated from one CPU to another by the scheduler's | 570 | [Note that tasks may by migrated from one CPU to another by the scheduler's |
| 571 | load-balancing algorithm and if different energy vs performance hints are | 571 | load-balancing algorithm and if different energy vs performance hints are |
| @@ -36,6 +36,12 @@ Two sets of Questions and Answers (Q&A) are maintained. · 35 unmodified lines | |||
| 36 | bpf_devel_QA | 36 | bpf_devel_QA |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | Helper functions | ||
| 40 | ================ | ||
| 41 | |||
| 42 | * `bpf-helpers(7)`_ maintains a list of helpers available to eBPF programs. | ||
| 43 | |||
| 44 | |||
| 39 | Program types | 45 | Program types |
| 40 | ============= | 46 | ============= |
| 41 | 47 | ||
| @@ -79,4 +85,5 @@ Other · 37 unmodified lines | |||
| 79 | .. _networking-filter: ../networking/filter.rst | 85 | .. _networking-filter: ../networking/filter.rst |
| 80 | .. _man-pages: https://www.kernel.org/doc/man-pages/ | 86 | .. _man-pages: https://www.kernel.org/doc/man-pages/ |
| 81 | .. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html | 87 | .. _bpf(2): https://man7.org/linux/man-pages/man2/bpf.2.html |
| 88 | .. _bpf-helpers(7): https://man7.org/linux/man-pages/man7/bpf-helpers.7.html | ||
| 82 | .. _BPF and XDP Reference Guide: https://docs.cilium.io/en/latest/bpf/ | 89 | .. _BPF and XDP Reference Guide: https://docs.cilium.io/en/latest/bpf/ |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Clock bindings for Freescale i.MX23 | 7 | title: Clock bindings for Freescale i.MX23 |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | description: | | 12 | description: | |
| 13 | The clock consumer should specify the desired clock by having the clock | 13 | The clock consumer should specify the desired clock by having the clock |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Clock bindings for Freescale i.MX28 | 7 | title: Clock bindings for Freescale i.MX28 |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | description: | | 12 | description: | |
| 13 | The clock consumer should specify the desired clock by having the clock | 13 | The clock consumer should specify the desired clock by having the clock |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale MXS GPIO controller | 7 | title: Freescale MXS GPIO controller |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | - Anson Huang <Anson.Huang@nxp.com> | 11 | - Anson Huang <Anson.Huang@nxp.com> |
| 12 | 12 | ||
| 13 | description: | | 13 | description: | |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale MXS Inter IC (I2C) Controller | 7 | title: Freescale MXS Inter IC (I2C) Controller |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | properties: | 12 | properties: |
| 13 | compatible: | 13 | compatible: |
| @@ -1,66 +0,0 @@ | |||
| 1 | Texas Instruments K3 Interrupt Aggregator | ||
| 2 | ========================================= | ||
| 3 | |||
| 4 | The Interrupt Aggregator (INTA) provides a centralized machine | ||
| 5 | which handles the termination of system events to that they can | ||
| 6 | be coherently processed by the host(s) in the system. A maximum | ||
| 7 | of 64 events can be mapped to a single interrupt. | ||
| 8 | |||
| 9 | |||
| 10 | Interrupt Aggregator | ||
| 11 | +-----------------------------------------+ | ||
| 12 | | Intmap VINT | | ||
| 13 | | +--------------+ +------------+ | | ||
| 14 | m ------>| | vint | bit | | 0 |.....|63| vint0 | | ||
| 15 | . | +--------------+ +------------+ | +------+ | ||
| 16 | . | . . | | HOST | | ||
| 17 | Globalevents ------>| . . |------>| IRQ | | ||
| 18 | . | . . | | CTRL | | ||
| 19 | . | . . | +------+ | ||
| 20 | n ------>| +--------------+ +------------+ | | ||
| 21 | | | vint | bit | | 0 |.....|63| vintx | | ||
| 22 | | +--------------+ +------------+ | | ||
| 23 | | | | ||
| 24 | +-----------------------------------------+ | ||
| 25 | |||
| 26 | Configuration of these Intmap registers that maps global events to vint is done | ||
| 27 | by a system controller (like the Device Memory and Security Controller on K3 | ||
| 28 | AM654 SoC). Driver should request the system controller to get the range | ||
| 29 | of global events and vints assigned to the requesting host. Management | ||
| 30 | of these requested resources should be handled by driver and requests | ||
| 31 | system controller to map specific global event to vint, bit pair. | ||
| 32 | |||
| 33 | Communication between the host processor running an OS and the system | ||
| 34 | controller happens through a protocol called TI System Control Interface | ||
| 35 | (TISCI protocol). For more details refer: | ||
| 36 | Documentation/devicetree/bindings/arm/keystone/ti,sci.txt | ||
| 37 | |||
| 38 | TISCI Interrupt Aggregator Node: | ||
| 39 | ------------------------------- | ||
| 40 | - compatible: Must be "ti,sci-inta". | ||
| 41 | - reg: Should contain registers location and length. | ||
| 42 | - interrupt-controller: Identifies the node as an interrupt controller | ||
| 43 | - msi-controller: Identifies the node as an MSI controller. | ||
| 44 | - interrupt-parent: phandle of irq parent. | ||
| 45 | - ti,sci: Phandle to TI-SCI compatible System controller node. | ||
| 46 | - ti,sci-dev-id: TISCI device ID of the Interrupt Aggregator. | ||
| 47 | - ti,sci-rm-range-vint: Array of TISCI subtype ids representing vints(inta | ||
| 48 | outputs) range within this INTA, assigned to the | ||
| 49 | requesting host context. | ||
| 50 | - ti,sci-rm-range-global-event: Array of TISCI subtype ids representing the | ||
| 51 | global events range reaching this IA and are assigned | ||
| 52 | to the requesting host context. | ||
| 53 | |||
| 54 | Example: | ||
| 55 | -------- | ||
| 56 | main_udmass_inta: interrupt-controller@33d00000 { | ||
| 57 | compatible = "ti,sci-inta"; | ||
| 58 | reg = <0x0 0x33d00000 0x0 0x100000>; | ||
| 59 | interrupt-controller; | ||
| 60 | msi-controller; | ||
| 61 | interrupt-parent = <&main_navss_intr>; | ||
| 62 | ti,sci = <&dmsc>; | ||
| 63 | ti,sci-dev-id = <179>; | ||
| 64 | ti,sci-rm-range-vint = <0x0>; | ||
| 65 | ti,sci-rm-range-global-event = <0x1>; | ||
| 66 | }; | ||
| @@ -0,0 +1,98 @@ | |||
| 1 | # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | ||
| 2 | %YAML 1.2 | ||
| 3 | --- | ||
| 4 | $id: http://devicetree.org/schemas/interrupt-controller/ti,sci-inta.yaml# | ||
| 5 | $schema: http://devicetree.org/meta-schemas/core.yaml# | ||
| 6 | |||
| 7 | title: Texas Instruments K3 Interrupt Aggregator | ||
| 8 | |||
| 9 | maintainers: | ||
| 10 | - Lokesh Vutla <lokeshvutla@ti.com> | ||
| 11 | |||
| 12 | allOf: | ||
| 13 | - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml# | ||
| 14 | |||
| 15 | description: | | ||
| 16 | The Interrupt Aggregator (INTA) provides a centralized machine | ||
| 17 | which handles the termination of system events to that they can | ||
| 18 | be coherently processed by the host(s) in the system. A maximum | ||
| 19 | of 64 events can be mapped to a single interrupt. | ||
| 20 | |||
| 21 | Interrupt Aggregator | ||
| 22 | +-----------------------------------------+ | ||
| 23 | | Intmap VINT | | ||
| 24 | | +--------------+ +------------+ | | ||
| 25 | m ------>| | vint | bit | | 0 |.....|63| vint0 | | ||
| 26 | . | +--------------+ +------------+ | +------+ | ||
| 27 | . | . . | | HOST | | ||
| 28 | Globalevents ------>| . . |----->| IRQ | | ||
| 29 | . | . . | | CTRL | | ||
| 30 | . | . . | +------+ | ||
| 31 | n ------>| +--------------+ +------------+ | | ||
| 32 | | | vint | bit | | 0 |.....|63| vintx | | ||
| 33 | | +--------------+ +------------+ | | ||
| 34 | | | | ||
| 35 | +-----------------------------------------+ | ||
| 36 | |||
| 37 | Configuration of these Intmap registers that maps global events to vint is | ||
| 38 | done by a system controller (like the Device Memory and Security Controller | ||
| 39 | on AM654 SoC). Driver should request the system controller to get the range | ||
| 40 | of global events and vints assigned to the requesting host. Management | ||
| 41 | of these requested resources should be handled by driver and requests | ||
| 42 | system controller to map specific global event to vint, bit pair. | ||
| 43 | |||
| 44 | Communication between the host processor running an OS and the system | ||
| 45 | controller happens through a protocol called TI System Control Interface | ||
| 46 | (TISCI protocol). | ||
| 47 | |||
| 48 | properties: | ||
| 49 | compatible: | ||
| 50 | const: ti,sci-inta | ||
| 51 | |||
| 52 | reg: | ||
| 53 | maxItems: 1 | ||
| 54 | |||
| 55 | interrupt-controller: true | ||
| 56 | |||
| 57 | msi-controller: true | ||
| 58 | |||
| 59 | ti,interrupt-ranges: | ||
| 60 | $ref: /schemas/types.yaml#/definitions/uint32-matrix | ||
| 61 | description: | | ||
| 62 | Interrupt ranges that converts the INTA output hw irq numbers | ||
| 63 | to parents's input interrupt numbers. | ||
| 64 | items: | ||
| 65 | items: | ||
| 66 | - description: | | ||
| 67 | "output_irq" specifies the base for inta output irq | ||
| 68 | - description: | | ||
| 69 | "parent's input irq" specifies the base for parent irq | ||
| 70 | - description: | | ||
| 71 | "limit" specifies the limit for translation | ||
| 72 | |||
| 73 | required: | ||
| 74 | - compatible | ||
| 75 | - reg | ||
| 76 | - interrupt-controller | ||
| 77 | - msi-controller | ||
| 78 | - ti,sci | ||
| 79 | - ti,sci-dev-id | ||
| 80 | - ti,interrupt-ranges | ||
| 81 | |||
| 82 | examples: | ||
| 83 | - | | ||
| 84 | bus { | ||
| 85 | #address-cells = <2>; | ||
| 86 | #size-cells = <2>; | ||
| 87 | |||
| 88 | main_udmass_inta: msi-controller@33d00000 { | ||
| 89 | compatible = "ti,sci-inta"; | ||
| 90 | reg = <0x0 0x33d00000 0x0 0x100000>; | ||
| 91 | interrupt-controller; | ||
| 92 | msi-controller; | ||
| 93 | interrupt-parent = <&main_navss_intr>; | ||
| 94 | ti,sci = <&dmsc>; | ||
| 95 | ti,sci-dev-id = <179>; | ||
| 96 | ti,interrupt-ranges = <0 0 256>; | ||
| 97 | }; | ||
| 98 | }; | ||
| @@ -1,82 +0,0 @@ | |||
| 1 | Texas Instruments K3 Interrupt Router | ||
| 2 | ===================================== | ||
| 3 | |||
| 4 | The Interrupt Router (INTR) module provides a mechanism to mux M | ||
| 5 | interrupt inputs to N interrupt outputs, where all M inputs are selectable | ||
| 6 | to be driven per N output. An Interrupt Router can either handle edge triggered | ||
| 7 | or level triggered interrupts and that is fixed in hardware. | ||
| 8 | |||
| 9 | Interrupt Router | ||
| 10 | +----------------------+ | ||
| 11 | | Inputs Outputs | | ||
| 12 | +-------+ | +------+ +-----+ | | ||
| 13 | | GPIO |----------->| | irq0 | | 0 | | Host IRQ | ||
| 14 | +-------+ | +------+ +-----+ | controller | ||
| 15 | | . . | +-------+ | ||
| 16 | +-------+ | . . |----->| IRQ | | ||
| 17 | | INTA |----------->| . . | +-------+ | ||
| 18 | +-------+ | . +-----+ | | ||
| 19 | | +------+ | N | | | ||
| 20 | | | irqM | +-----+ | | ||
| 21 | | +------+ | | ||
| 22 | | | | ||
| 23 | +----------------------+ | ||
| 24 | |||
| 25 | There is one register per output (MUXCNTL_N) that controls the selection. | ||
| 26 | Configuration of these MUXCNTL_N registers is done by a system controller | ||
| 27 | (like the Device Memory and Security Controller on K3 AM654 SoC). System | ||
| 28 | controller will keep track of the used and unused registers within the Router. | ||
| 29 | Driver should request the system controller to get the range of GIC IRQs | ||
| 30 | assigned to the requesting hosts. It is the drivers responsibility to keep | ||
| 31 | track of Host IRQs. | ||
| 32 | |||
| 33 | Communication between the host processor running an OS and the system | ||
| 34 | controller happens through a protocol called TI System Control Interface | ||
| 35 | (TISCI protocol). For more details refer: | ||
| 36 | Documentation/devicetree/bindings/arm/keystone/ti,sci.txt | ||
| 37 | |||
| 38 | TISCI Interrupt Router Node: | ||
| 39 | ---------------------------- | ||
| 40 | Required Properties: | ||
| 41 | - compatible: Must be "ti,sci-intr". | ||
| 42 | - ti,intr-trigger-type: Should be one of the following: | ||
| 43 | 1: If intr supports edge triggered interrupts. | ||
| 44 | 4: If intr supports level triggered interrupts. | ||
| 45 | - interrupt-controller: Identifies the node as an interrupt controller | ||
| 46 | - #interrupt-cells: Specifies the number of cells needed to encode an | ||
| 47 | interrupt source. The value should be 2. | ||
| 48 | First cell should contain the TISCI device ID of source | ||
| 49 | Second cell should contain the interrupt source offset | ||
| 50 | within the device. | ||
| 51 | - ti,sci: Phandle to TI-SCI compatible System controller node. | ||
| 52 | - ti,sci-dst-id: TISCI device ID of the destination IRQ controller. | ||
| 53 | - ti,sci-rm-range-girq: Array of TISCI subtype ids representing the host irqs | ||
| 54 | assigned to this interrupt router. Each subtype id | ||
| 55 | corresponds to a range of host irqs. | ||
| 56 | |||
| 57 | For more details on TISCI IRQ resource management refer: | ||
| 58 | https://downloads.ti.com/tisci/esd/latest/2_tisci_msgs/rm/rm_irq.html | ||
| 59 | |||
| 60 | Example: | ||
| 61 | -------- | ||
| 62 | The following example demonstrates both interrupt router node and the consumer | ||
| 63 | node(main gpio) on the AM654 SoC: | ||
| 64 | |||
| 65 | main_intr: interrupt-controller0 { | ||
| 66 | compatible = "ti,sci-intr"; | ||
| 67 | ti,intr-trigger-type = <1>; | ||
| 68 | interrupt-controller; | ||
| 69 | interrupt-parent = <&gic500>; | ||
| 70 | #interrupt-cells = <2>; | ||
| 71 | ti,sci = <&dmsc>; | ||
| 72 | ti,sci-dst-id = <56>; | ||
| 73 | ti,sci-rm-range-girq = <0x1>; | ||
| 74 | }; | ||
| 75 | |||
| 76 | main_gpio0: gpio@600000 { | ||
| 77 | ... | ||
| 78 | interrupt-parent = <&main_intr>; | ||
| 79 | interrupts = <57 256>, <57 257>, <57 258>, | ||
| 80 | <57 259>, <57 260>, <57 261>; | ||
| 81 | ... | ||
| 82 | }; | ||
| @@ -0,0 +1,102 @@ | |||
| 1 | # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) | ||
| 2 | %YAML 1.2 | ||
| 3 | --- | ||
| 4 | $id: http://devicetree.org/schemas/interrupt-controller/ti,sci-intr.yaml# | ||
| 5 | $schema: http://devicetree.org/meta-schemas/core.yaml# | ||
| 6 | |||
| 7 | title: Texas Instruments K3 Interrupt Router | ||
| 8 | |||
| 9 | maintainers: | ||
| 10 | - Lokesh Vutla <lokeshvutla@ti.com> | ||
| 11 | |||
| 12 | allOf: | ||
| 13 | - $ref: /schemas/arm/keystone/ti,k3-sci-common.yaml# | ||
| 14 | |||
| 15 | description: | | ||
| 16 | The Interrupt Router (INTR) module provides a mechanism to mux M | ||
| 17 | interrupt inputs to N interrupt outputs, where all M inputs are selectable | ||
| 18 | to be driven per N output. An Interrupt Router can either handle edge | ||
| 19 | triggered or level triggered interrupts and that is fixed in hardware. | ||
| 20 | |||
| 21 | Interrupt Router | ||
| 22 | +----------------------+ | ||
| 23 | | Inputs Outputs | | ||
| 24 | +-------+ | +------+ +-----+ | | ||
| 25 | | GPIO |----------->| | irq0 | | 0 | | Host IRQ | ||
| 26 | +-------+ | +------+ +-----+ | controller | ||
| 27 | | . . | +-------+ | ||
| 28 | +-------+ | . . |----->| IRQ | | ||
| 29 | | INTA |----------->| . . | +-------+ | ||
| 30 | +-------+ | . +-----+ | | ||
| 31 | | +------+ | N | | | ||
| 32 | | | irqM | +-----+ | | ||
| 33 | | +------+ | | ||
| 34 | | | | ||
| 35 | +----------------------+ | ||
| 36 | |||
| 37 | There is one register per output (MUXCNTL_N) that controls the selection. | ||
| 38 | Configuration of these MUXCNTL_N registers is done by a system controller | ||
| 39 | (like the Device Memory and Security Controller on K3 AM654 SoC). System | ||
| 40 | controller will keep track of the used and unused registers within the Router. | ||
| 41 | Driver should request the system controller to get the range of GIC IRQs | ||
| 42 | assigned to the requesting hosts. It is the drivers responsibility to keep | ||
| 43 | track of Host IRQs. | ||
| 44 | |||
| 45 | Communication between the host processor running an OS and the system | ||
| 46 | controller happens through a protocol called TI System Control Interface | ||
| 47 | (TISCI protocol). | ||
| 48 | |||
| 49 | properties: | ||
| 50 | compatible: | ||
| 51 | const: ti,sci-intr | ||
| 52 | |||
| 53 | ti,intr-trigger-type: | ||
| 54 | $ref: /schemas/types.yaml#/definitions/uint32 | ||
| 55 | enum: [1, 4] | ||
| 56 | description: | | ||
| 57 | Should be one of the following. | ||
| 58 | 1 = If intr supports edge triggered interrupts. | ||
| 59 | 4 = If intr supports level triggered interrupts. | ||
| 60 | |||
| 61 | interrupt-controller: true | ||
| 62 | |||
| 63 | '#interrupt-cells': | ||
| 64 | const: 1 | ||
| 65 | description: | | ||
| 66 | The 1st cell should contain interrupt router input hw number. | ||
| 67 | |||
| 68 | ti,interrupt-ranges: | ||
| 69 | $ref: /schemas/types.yaml#/definitions/uint32-matrix | ||
| 70 | description: | | ||
| 71 | Interrupt ranges that converts the INTR output hw irq numbers | ||
| 72 | to parents's input interrupt numbers. | ||
| 73 | items: | ||
| 74 | items: | ||
| 75 | - description: | | ||
| 76 | "output_irq" specifies the base for intr output irq | ||
| 77 | - description: | | ||
| 78 | "parent's input irq" specifies the base for parent irq | ||
| 79 | - description: | | ||
| 80 | "limit" specifies the limit for translation | ||
| 81 | |||
| 82 | required: | ||
| 83 | - compatible | ||
| 84 | - ti,intr-trigger-type | ||
| 85 | - interrupt-controller | ||
| 86 | - '#interrupt-cells' | ||
| 87 | - ti,sci | ||
| 88 | - ti,sci-dev-id | ||
| 89 | - ti,interrupt-ranges | ||
| 90 | |||
| 91 | examples: | ||
| 92 | - | | ||
| 93 | main_gpio_intr: interrupt-controller0 { | ||
| 94 | compatible = "ti,sci-intr"; | ||
| 95 | ti,intr-trigger-type = <1>; | ||
| 96 | interrupt-controller; | ||
| 97 | interrupt-parent = <&gic500>; | ||
| 98 | #interrupt-cells = <1>; | ||
| 99 | ti,sci = <&dmsc>; | ||
| 100 | ti,sci-dev-id = <131>; | ||
| 101 | ti,interrupt-ranges = <0 360 32>; | ||
| 102 | }; | ||
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX | 7 | title: Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | allOf: | 12 | allOf: |
| 13 | - $ref: "mmc-controller.yaml" | 13 | - $ref: "mmc-controller.yaml" |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale MXS MMC controller | 7 | title: Freescale MXS MMC controller |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | description: | | 12 | description: | |
| 13 | The Freescale MXS Synchronous Serial Ports (SSP) can act as a MMC controller | 13 | The Freescale MXS Synchronous Serial Ports (SSP) can act as a MMC controller |
| @@ -54,7 +54,8 @@ properties: · 53 unmodified lines | |||
| 54 | 54 | ||
| 55 | phy-connection-type: | 55 | phy-connection-type: |
| 56 | description: | 56 | description: |
| 57 | Operation mode of the PHY interface | 57 | Specifies interface type between the Ethernet device and a physical |
| 58 | layer (PHY) device. | ||
| 58 | enum: | 59 | enum: |
| 59 | # There is not a standard bus between the MAC and the PHY, | 60 | # There is not a standard bus between the MAC and the PHY, |
| 60 | # something proprietary is being used to embed the PHY in the | 61 | # something proprietary is being used to embed the PHY in the |
| @@ -59,9 +59,15 @@ properties: · 58 unmodified lines | |||
| 59 | clocks: | 59 | clocks: |
| 60 | maxItems: 1 | 60 | maxItems: 1 |
| 61 | 61 | ||
| 62 | pinctrl-0: true | 62 | power-domains: |
| 63 | maxItems: 1 | ||
| 64 | |||
| 65 | resets: | ||
| 66 | maxItems: 1 | ||
| 63 | 67 | ||
| 64 | pinctrl-names: true | 68 | phy-mode: true |
| 69 | |||
| 70 | phy-handle: true | ||
| 65 | 71 | ||
| 66 | renesas,no-ether-link: | 72 | renesas,no-ether-link: |
| 67 | type: boolean | 73 | type: boolean |
| @@ -74,6 +80,11 @@ properties: · 6 unmodified lines | |||
| 74 | specify when the Ether LINK signal is active-low instead of normal | 80 | specify when the Ether LINK signal is active-low instead of normal |
| 75 | active-high | 81 | active-high |
| 76 | 82 | ||
| 83 | patternProperties: | ||
| 84 | "^ethernet-phy@[0-9a-f]$": | ||
| 85 | type: object | ||
| 86 | $ref: ethernet-phy.yaml# | ||
| 87 | |||
| 77 | required: | 88 | required: |
| 78 | - compatible | 89 | - compatible |
| 79 | - reg | 90 | - reg |
| @@ -83,7 +94,8 @@ required: · 3 unmodified lines | |||
| 83 | - '#address-cells' | 94 | - '#address-cells' |
| 84 | - '#size-cells' | 95 | - '#size-cells' |
| 85 | - clocks | 96 | - clocks |
| 86 | - pinctrl-0 | 97 | |
| 98 | additionalProperties: false | ||
| 87 | 99 | ||
| 88 | examples: | 100 | examples: |
| 89 | # Lager board | 101 | # Lager board |
| @@ -99,8 +111,6 @@ examples: · 9 unmodified lines | |||
| 99 | clocks = <&mstp8_clks R8A7790_CLK_ETHER>; | 111 | clocks = <&mstp8_clks R8A7790_CLK_ETHER>; |
| 100 | phy-mode = "rmii"; | 112 | phy-mode = "rmii"; |
| 101 | phy-handle = <&phy1>; | 113 | phy-handle = <&phy1>; |
| 102 | pinctrl-0 = <ðer_pins>; | ||
| 103 | pinctrl-names = "default"; | ||
| 104 | renesas,ether-link-active-low; | 114 | renesas,ether-link-active-low; |
| 105 | #address-cells = <1>; | 115 | #address-cells = <1>; |
| 106 | #size-cells = <0>; | 116 | #size-cells = <0>; |
| @@ -109,7 +119,5 @@ examples: · 2 unmodified lines | |||
| 109 | reg = <1>; | 119 | reg = <1>; |
| 110 | interrupt-parent = <&irqc0>; | 120 | interrupt-parent = <&irqc0>; |
| 111 | interrupts = <0 IRQ_TYPE_LEVEL_LOW>; | 121 | interrupts = <0 IRQ_TYPE_LEVEL_LOW>; |
| 112 | pinctrl-0 = <&phy1_pins>; | ||
| 113 | pinctrl-names = "default"; | ||
| 114 | }; | 122 | }; |
| 115 | }; | 123 | }; |
| @@ -9,6 +9,14 @@ title: PCIe RC controller on Intel Gateway SoCs · 8 unmodified lines | |||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Dilip Kota <eswara.kota@linux.intel.com> | 10 | - Dilip Kota <eswara.kota@linux.intel.com> |
| 11 | 11 | ||
| 12 | select: | ||
| 13 | properties: | ||
| 14 | compatible: | ||
| 15 | contains: | ||
| 16 | const: intel,lgm-pcie | ||
| 17 | required: | ||
| 18 | - compatible | ||
| 19 | |||
| 12 | properties: | 20 | properties: |
| 13 | compatible: | 21 | compatible: |
| 14 | items: | 22 | items: |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale MXS PWM controller | 7 | title: Freescale MXS PWM controller |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | - Anson Huang <anson.huang@nxp.com> | 11 | - Anson Huang <anson.huang@nxp.com> |
| 12 | 12 | ||
| 13 | properties: | 13 | properties: |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: Freescale (Enhanced) Configurable Serial Peripheral Interface (CSPI/eCSPI) for i.MX | 7 | title: Freescale (Enhanced) Configurable Serial Peripheral Interface (CSPI/eCSPI) for i.MX |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | 11 | ||
| 12 | allOf: | 12 | allOf: |
| 13 | - $ref: "/schemas/spi/spi-controller.yaml#" | 13 | - $ref: "/schemas/spi/spi-controller.yaml#" |
| @@ -39,6 +39,7 @@ properties: · 38 unmodified lines | |||
| 39 | spi common code does not support use of CS signals discontinuously. | 39 | spi common code does not support use of CS signals discontinuously. |
| 40 | i.MX8DXL-EVK board only uses CS1 without using CS0. Therefore, add | 40 | i.MX8DXL-EVK board only uses CS1 without using CS0. Therefore, add |
| 41 | this property to re-config the chipselect value in the LPSPI driver. | 41 | this property to re-config the chipselect value in the LPSPI driver. |
| 42 | type: boolean | ||
| 42 | 43 | ||
| 43 | required: | 44 | required: |
| 44 | - compatible | 45 | - compatible |
| @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines | |||
| 7 | title: NXP i.MX Thermal Binding | 7 | title: NXP i.MX Thermal Binding |
| 8 | 8 | ||
| 9 | maintainers: | 9 | maintainers: |
| 10 | - Shawn Guo <shawn.guo@linaro.org> | 10 | - Shawn Guo <shawnguo@kernel.org> |
| 11 | - Anson Huang <Anson.Huang@nxp.com> | 11 | - Anson Huang <Anson.Huang@nxp.com> |
| 12 | 12 | ||
| 13 | properties: | 13 | properties: |
| @@ -0,0 +1,60 @@ | |||
| 1 | # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | ||
| 2 | %YAML 1.2 | ||
| 3 | --- | ||
| 4 | $id: http://devicetree.org/schemas/timer/sifive,clint.yaml# | ||
| 5 | $schema: http://devicetree.org/meta-schemas/core.yaml# | ||
| 6 | |||
| 7 | title: SiFive Core Local Interruptor | ||
| 8 | |||
| 9 | maintainers: | ||
| 10 | - Palmer Dabbelt <palmer@dabbelt.com> | ||
| 11 | - Anup Patel <anup.patel@wdc.com> | ||
| 12 | |||
| 13 | description: | ||
| 14 | SiFive (and other RISC-V) SOCs include an implementation of the SiFive | ||
| 15 | Core Local Interruptor (CLINT) for M-mode timer and M-mode inter-processor | ||
| 16 | interrupts. It directly connects to the timer and inter-processor interrupt | ||
| 17 | lines of various HARTs (or CPUs) so RISC-V per-HART (or per-CPU) local | ||
| 18 | interrupt controller is the parent interrupt controller for CLINT device. | ||
| 19 | The clock frequency of CLINT is specified via "timebase-frequency" DT | ||
| 20 | property of "/cpus" DT node. The "timebase-frequency" DT property is | ||
| 21 | described in Documentation/devicetree/bindings/riscv/cpus.yaml | ||
| 22 | |||
| 23 | properties: | ||
| 24 | compatible: | ||
| 25 | items: | ||
| 26 | - const: sifive,fu540-c000-clint | ||
| 27 | - const: sifive,clint0 | ||
| 28 | |||
| 29 | description: | ||
| 30 | Should be "sifive,<chip>-clint" and "sifive,clint<version>". | ||
| 31 | Supported compatible strings are - | ||
| 32 | "sifive,fu540-c000-clint" for the SiFive CLINT v0 as integrated | ||
| 33 | onto the SiFive FU540 chip, and "sifive,clint0" for the SiFive | ||
| 34 | CLINT v0 IP block with no chip integration tweaks. | ||
| 35 | Please refer to sifive-blocks-ip-versioning.txt for details | ||
| 36 | |||
| 37 | reg: | ||
| 38 | maxItems: 1 | ||
| 39 | |||
| 40 | interrupts-extended: | ||
| 41 | minItems: 1 | ||
| 42 | |||
| 43 | additionalProperties: false | ||
| 44 | |||
| 45 | required: | ||
| 46 | - compatible | ||
| 47 | - reg | ||
| 48 | - interrupts-extended | ||
| 49 | |||
| 50 | examples: | ||
| 51 | - | | ||
| 52 | timer@2000000 { | ||
| 53 | compatible = "sifive,fu540-c000-clint", "sifive,clint0"; | ||
| 54 | interrupts-extended = <&cpu1intc 3 &cpu1intc 7 | ||
| 55 | &cpu2intc 3 &cpu2intc 7 | ||
| 56 | &cpu3intc 3 &cpu3intc 7 | ||
| 57 | &cpu4intc 3 &cpu4intc 7>; | ||
| 58 | reg = <0x2000000 0x10000>; | ||
| 59 | }; | ||
| 60 | ... | ||
| @@ -993,7 +993,7 @@ patternProperties: · 992 unmodified lines | |||
| 993 | "^sst,.*": | 993 | "^sst,.*": |
| 994 | description: Silicon Storage Technology, Inc. | 994 | description: Silicon Storage Technology, Inc. |
| 995 | "^sstar,.*": | 995 | "^sstar,.*": |
| 996 | description: Xiamen Xingchen(SigmaStar) Technology Co., Ltd. | 996 | description: Xiamen Xingchen(SigmaStar) Technology Co., Ltd. |
| 997 | (formerly part of MStar Semiconductor, Inc.) | 997 | (formerly part of MStar Semiconductor, Inc.) |
| 998 | "^st,.*": | 998 | "^st,.*": |
| 999 | description: STMicroelectronics | 999 | description: STMicroelectronics |
| @@ -5,7 +5,7 @@ Writing DeviceTree Bindings in json-schema · 4 unmodified lines | |||
| 5 | 5 | ||
| 6 | Devicetree bindings are written using json-schema vocabulary. Schema files are | 6 | Devicetree bindings are written using json-schema vocabulary. Schema files are |
| 7 | written in a JSON compatible subset of YAML. YAML is used instead of JSON as it | 7 | written in a JSON compatible subset of YAML. YAML is used instead of JSON as it |
| 8 | considered more human readable and has some advantages such as allowing | 8 | is considered more human readable and has some advantages such as allowing |
| 9 | comments (Prefixed with '#'). | 9 | comments (Prefixed with '#'). |
| 10 | 10 | ||
| 11 | Schema Contents | 11 | Schema Contents |
| @@ -19,7 +19,7 @@ $id · 7 unmodified lines | |||
| 19 | A json-schema unique identifier string. The string must be a valid | 19 | A json-schema unique identifier string. The string must be a valid |
| 20 | URI typically containing the binding's filename and path. For DT schema, it must | 20 | URI typically containing the binding's filename and path. For DT schema, it must |
| 21 | begin with "http://devicetree.org/schemas/". The URL is used in constructing | 21 | begin with "http://devicetree.org/schemas/". The URL is used in constructing |
| 22 | references to other files specified in schema "$ref" properties. A $ref values | 22 | references to other files specified in schema "$ref" properties. A $ref value |
| 23 | with a leading '/' will have the hostname prepended. A $ref value a relative | 23 | with a leading '/' will have the hostname prepended. A $ref value a relative |
| 24 | path or filename only will be prepended with the hostname and path components | 24 | path or filename only will be prepended with the hostname and path components |
| 25 | of the current schema file's '$id' value. A URL is used even for local files, | 25 | of the current schema file's '$id' value. A URL is used even for local files, |
| @@ -3,7 +3,7 @@ NVMe Fault Injection · 2 unmodified lines | |||
| 3 | Linux's fault injection framework provides a systematic way to support | 3 | Linux's fault injection framework provides a systematic way to support |
| 4 | error injection via debugfs in the /sys/kernel/debug directory. When | 4 | error injection via debugfs in the /sys/kernel/debug directory. When |
| 5 | enabled, the default NVME_SC_INVALID_OPCODE with no retry will be | 5 | enabled, the default NVME_SC_INVALID_OPCODE with no retry will be |
| 6 | injected into the nvme_end_request. Users can change the default status | 6 | injected into the nvme_try_complete_req. Users can change the default status |
| 7 | code and no retry flag via the debugfs. The list of Generic Command | 7 | code and no retry flag via the debugfs. The list of Generic Command |
| 8 | Status can be found in include/linux/nvme.h | 8 | Status can be found in include/linux/nvme.h |
| 9 | 9 | ||
| @@ -39,6 +39,6 @@ entry. · 38 unmodified lines | |||
| 39 | Other References | 39 | Other References |
| 40 | ---------------- | 40 | ---------------- |
| 41 | 41 | ||
| 42 | Also see http://www.nongnu.org/ext2-doc/ for quite a collection of | 42 | Also see https://www.nongnu.org/ext2-doc/ for quite a collection of |
| 43 | information about ext2/3. Here's another old reference: | 43 | information about ext2/3. Here's another old reference: |
| 44 | http://wiki.osdev.org/Ext2 | 44 | http://wiki.osdev.org/Ext2 |
| @@ -2860,17 +2860,6 @@ version of the linux kernel, found on http://kernel.org · 2859 unmodified lines | |||
| 2860 | The latest version of this document can be found in the latest kernel | 2860 | The latest version of this document can be found in the latest kernel |
| 2861 | source (named Documentation/networking/bonding.rst). | 2861 | source (named Documentation/networking/bonding.rst). |
| 2862 | 2862 | ||
| 2863 | Discussions regarding the usage of the bonding driver take place on the | ||
| 2864 | bonding-devel mailing list, hosted at sourceforge.net. If you have questions or | ||
| 2865 | problems, post them to the list. The list address is: | ||
| 2866 | |||
| 2867 | bonding-devel@lists.sourceforge.net | ||
| 2868 | |||
| 2869 | The administrative interface (to subscribe or unsubscribe) can | ||
| 2870 | be found at: | ||
| 2871 | |||
| 2872 | https://lists.sourceforge.net/lists/listinfo/bonding-devel | ||
| 2873 | |||
| 2874 | Discussions regarding the development of the bonding driver take place | 2863 | Discussions regarding the development of the bonding driver take place |
| 2875 | on the main Linux network mailing list, hosted at vger.kernel.org. The list | 2864 | on the main Linux network mailing list, hosted at vger.kernel.org. The list |
| 2876 | address is: | 2865 | address is: |
| @@ -2881,10 +2870,3 @@ The administrative interface (to subscribe or unsubscribe) can · 4 unmodified lines | |||
| 2881 | be found at: | 2870 | be found at: |
| 2882 | 2871 | ||
| 2883 | http://vger.kernel.org/vger-lists.html#netdev | 2872 | http://vger.kernel.org/vger-lists.html#netdev |
| 2884 | |||
| 2885 | Donald Becker's Ethernet Drivers and diag programs may be found at : | ||
| 2886 | |||
| 2887 | - http://web.archive.org/web/%2E/http://www.scyld.com/network/ | ||
| 2888 | |||
| 2889 | You will also find a lot of information regarding Ethernet, NWay, MII, | ||
| 2890 | etc. at www.scyld.com. | ||
| @@ -49,16 +49,18 @@ Register preservation rules · 48 unmodified lines | |||
| 49 | Register preservation rules match the ELF ABI calling sequence with the | 49 | Register preservation rules match the ELF ABI calling sequence with the |
| 50 | following differences: | 50 | following differences: |
| 51 | 51 | ||
| 52 | =========== ============= ======================================== | ||
| 53 | --- For the sc instruction, differences with the ELF ABI --- | 52 | --- For the sc instruction, differences with the ELF ABI --- |
| 53 | =========== ============= ======================================== | ||
| 54 | r0 Volatile (System call number.) | 54 | r0 Volatile (System call number.) |
| 55 | r3 Volatile (Parameter 1, and return value.) | 55 | r3 Volatile (Parameter 1, and return value.) |
| 56 | r4-r8 Volatile (Parameters 2-6.) | 56 | r4-r8 Volatile (Parameters 2-6.) |
| 57 | cr0 Volatile (cr0.SO is the return error condition.) | 57 | cr0 Volatile (cr0.SO is the return error condition.) |
| 58 | cr1, cr5-7 Nonvolatile | 58 | cr1, cr5-7 Nonvolatile |
| 59 | lr Nonvolatile | 59 | lr Nonvolatile |
| 60 | =========== ============= ======================================== | ||
| 60 | 61 | ||
| 61 | --- For the scv 0 instruction, differences with the ELF ABI --- | 62 | --- For the scv 0 instruction, differences with the ELF ABI --- |
| 63 | =========== ============= ======================================== | ||
| 62 | r0 Volatile (System call number.) | 64 | r0 Volatile (System call number.) |
| 63 | r3 Volatile (Parameter 1, and return value.) | 65 | r3 Volatile (Parameter 1, and return value.) |
| 64 | r4-r8 Volatile (Parameters 2-6.) | 66 | r4-r8 Volatile (Parameters 2-6.) |
| @@ -3205,6 +3205,7 @@ S: Maintained · 3204 unmodified lines | |||
| 3205 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git | 3205 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git |
| 3206 | F: block/ | 3206 | F: block/ |
| 3207 | F: drivers/block/ | 3207 | F: drivers/block/ |
| 3208 | F: include/linux/blk* | ||
| 3208 | F: kernel/trace/blktrace.c | 3209 | F: kernel/trace/blktrace.c |
| 3209 | F: lib/sbitmap.c | 3210 | F: lib/sbitmap.c |
| 3210 | 3211 | ||
| @@ -5050,7 +5051,7 @@ F: include/linux/dm-*.h · 1839 unmodified lines | |||
| 5050 | F: include/uapi/linux/dm-*.h | 5051 | F: include/uapi/linux/dm-*.h |
| 5051 | 5052 | ||
| 5052 | DEVLINK | 5053 | DEVLINK |
| 5053 | M: Jiri Pirko <jiri@mellanox.com> | 5054 | M: Jiri Pirko <jiri@nvidia.com> |
| 5054 | L: netdev@vger.kernel.org | 5055 | L: netdev@vger.kernel.org |
| 5055 | S: Supported | 5056 | S: Supported |
| 5056 | F: Documentation/networking/devlink | 5057 | F: Documentation/networking/devlink |
| @@ -6081,7 +6082,7 @@ F: include/linux/dynamic_debug.h · 1024 unmodified lines | |||
| 6081 | F: lib/dynamic_debug.c | 6082 | F: lib/dynamic_debug.c |
| 6082 | 6083 | ||
| 6083 | DYNAMIC INTERRUPT MODERATION | 6084 | DYNAMIC INTERRUPT MODERATION |
| 6084 | M: Tal Gilboa <talgi@mellanox.com> | 6085 | M: Tal Gilboa <talgi@nvidia.com> |
| 6085 | S: Maintained | 6086 | S: Maintained |
| 6086 | F: Documentation/networking/net_dim.rst | 6087 | F: Documentation/networking/net_dim.rst |
| 6087 | F: include/linux/dim.h | 6088 | F: include/linux/dim.h |
| @@ -6161,7 +6162,7 @@ F: Documentation/devicetree/bindings/edac/aspeed-sdram-edac.txt · 73 unmodified lines | |||
| 6161 | F: drivers/edac/aspeed_edac.c | 6162 | F: drivers/edac/aspeed_edac.c |
| 6162 | 6163 | ||
| 6163 | EDAC-BLUEFIELD | 6164 | EDAC-BLUEFIELD |
| 6164 | M: Shravan Kumar Ramani <sramani@mellanox.com> | 6165 | M: Shravan Kumar Ramani <sramani@nvidia.com> |
| 6165 | S: Supported | 6166 | S: Supported |
| 6166 | F: drivers/edac/bluefield_edac.c | 6167 | F: drivers/edac/bluefield_edac.c |
| 6167 | 6168 | ||
| @@ -6483,8 +6484,8 @@ S: Odd Fixes · 315 unmodified lines | |||
| 6483 | F: drivers/net/ethernet/agere/ | 6484 | F: drivers/net/ethernet/agere/ |
| 6484 | 6485 | ||
| 6485 | ETHERNET BRIDGE | 6486 | ETHERNET BRIDGE |
| 6486 | M: Roopa Prabhu <roopa@cumulusnetworks.com> | 6487 | M: Roopa Prabhu <roopa@nvidia.com> |
| 6487 | M: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> | 6488 | M: Nikolay Aleksandrov <nikolay@nvidia.com> |
| 6488 | L: bridge@lists.linux-foundation.org (moderated for non-subscribers) | 6489 | L: bridge@lists.linux-foundation.org (moderated for non-subscribers) |
| 6489 | L: netdev@vger.kernel.org | 6490 | L: netdev@vger.kernel.org |
| 6490 | S: Maintained | 6491 | S: Maintained |
| @@ -6599,7 +6600,7 @@ F: drivers/iommu/exynos-iommu.c · 108 unmodified lines | |||
| 6599 | 6600 | ||
| 6600 | EZchip NPS platform support | 6601 | EZchip NPS platform support |
| 6601 | M: Vineet Gupta <vgupta@synopsys.com> | 6602 | M: Vineet Gupta <vgupta@synopsys.com> |
| 6602 | M: Ofer Levi <oferle@mellanox.com> | 6603 | M: Ofer Levi <oferle@nvidia.com> |
| 6603 | S: Supported | 6604 | S: Supported |
| 6604 | F: arch/arc/boot/dts/eznps.dts | 6605 | F: arch/arc/boot/dts/eznps.dts |
| 6605 | F: arch/arc/plat-eznps | 6606 | F: arch/arc/plat-eznps |
| @@ -8563,7 +8564,7 @@ F: drivers/iio/pressure/dps310.c · 1957 unmodified lines | |||
| 8563 | 8564 | ||
| 8564 | INFINIBAND SUBSYSTEM | 8565 | INFINIBAND SUBSYSTEM |
| 8565 | M: Doug Ledford <dledford@redhat.com> | 8566 | M: Doug Ledford <dledford@redhat.com> |
| 8566 | M: Jason Gunthorpe <jgg@mellanox.com> | 8567 | M: Jason Gunthorpe <jgg@nvidia.com> |
| 8567 | L: linux-rdma@vger.kernel.org | 8568 | L: linux-rdma@vger.kernel.org |
| 8568 | S: Supported | 8569 | S: Supported |
| 8569 | W: https://github.com/linux-rdma/rdma-core | 8570 | W: https://github.com/linux-rdma/rdma-core |
| @@ -9226,7 +9227,7 @@ F: drivers/firmware/iscsi_ibft* · 656 unmodified lines | |||
| 9226 | 9227 | ||
| 9227 | ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR | 9228 | ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR |
| 9228 | M: Sagi Grimberg <sagi@grimberg.me> | 9229 | M: Sagi Grimberg <sagi@grimberg.me> |
| 9229 | M: Max Gurtovoy <maxg@mellanox.com> | 9230 | M: Max Gurtovoy <maxg@nvidia.com> |
| 9230 | L: linux-rdma@vger.kernel.org | 9231 | L: linux-rdma@vger.kernel.org |
| 9231 | S: Supported | 9232 | S: Supported |
| 9232 | W: http://www.openfabrics.org | 9233 | W: http://www.openfabrics.org |
| @@ -11072,7 +11073,7 @@ F: Documentation/devicetree/bindings/input/touchscreen/melfas_mip4.txt · 1839 unmodified lines | |||
| 11072 | F: drivers/input/touchscreen/melfas_mip4.c | 11073 | F: drivers/input/touchscreen/melfas_mip4.c |
| 11073 | 11074 | ||
| 11074 | MELLANOX ETHERNET DRIVER (mlx4_en) | 11075 | MELLANOX ETHERNET DRIVER (mlx4_en) |
| 11075 | M: Tariq Toukan <tariqt@mellanox.com> | 11076 | M: Tariq Toukan <tariqt@nvidia.com> |
| 11076 | L: netdev@vger.kernel.org | 11077 | L: netdev@vger.kernel.org |
| 11077 | S: Supported | 11078 | S: Supported |
| 11078 | W: http://www.mellanox.com | 11079 | W: http://www.mellanox.com |
| @@ -11080,7 +11081,7 @@ Q: http://patchwork.ozlabs.org/project/netdev/list/ · 1 unmodified line | |||
| 11080 | F: drivers/net/ethernet/mellanox/mlx4/en_* | 11081 | F: drivers/net/ethernet/mellanox/mlx4/en_* |
| 11081 | 11082 | ||
| 11082 | MELLANOX ETHERNET DRIVER (mlx5e) | 11083 | MELLANOX ETHERNET DRIVER (mlx5e) |
| 11083 | M: Saeed Mahameed <saeedm@mellanox.com> | 11084 | M: Saeed Mahameed <saeedm@nvidia.com> |
| 11084 | L: netdev@vger.kernel.org | 11085 | L: netdev@vger.kernel.org |
| 11085 | S: Supported | 11086 | S: Supported |
| 11086 | W: http://www.mellanox.com | 11087 | W: http://www.mellanox.com |
| @@ -11088,7 +11089,7 @@ Q: http://patchwork.ozlabs.org/project/netdev/list/ · 1 unmodified line | |||
| 11088 | F: drivers/net/ethernet/mellanox/mlx5/core/en_* | 11089 | F: drivers/net/ethernet/mellanox/mlx5/core/en_* |
| 11089 | 11090 | ||
| 11090 | MELLANOX ETHERNET INNOVA DRIVERS | 11091 | MELLANOX ETHERNET INNOVA DRIVERS |
| 11091 | R: Boris Pismenny <borisp@mellanox.com> | 11092 | R: Boris Pismenny <borisp@nvidia.com> |
| 11092 | L: netdev@vger.kernel.org | 11093 | L: netdev@vger.kernel.org |
| 11093 | S: Supported | 11094 | S: Supported |
| 11094 | W: http://www.mellanox.com | 11095 | W: http://www.mellanox.com |
| @@ -11099,8 +11100,8 @@ F: drivers/net/ethernet/mellanox/mlx5/core/fpga/* · 4 unmodified lines | |||
| 11099 | F: include/linux/mlx5/mlx5_ifc_fpga.h | 11100 | F: include/linux/mlx5/mlx5_ifc_fpga.h |
| 11100 | 11101 | ||
| 11101 | MELLANOX ETHERNET SWITCH DRIVERS | 11102 | MELLANOX ETHERNET SWITCH DRIVERS |
| 11102 | M: Jiri Pirko <jiri@mellanox.com> | 11103 | M: Jiri Pirko <jiri@nvidia.com> |
| 11103 | M: Ido Schimmel <idosch@mellanox.com> | 11104 | M: Ido Schimmel <idosch@nvidia.com> |
| 11104 | L: netdev@vger.kernel.org | 11105 | L: netdev@vger.kernel.org |
| 11105 | S: Supported | 11106 | S: Supported |
| 11106 | W: http://www.mellanox.com | 11107 | W: http://www.mellanox.com |
| @@ -11109,7 +11110,7 @@ F: drivers/net/ethernet/mellanox/mlxsw/ · 2 unmodified lines | |||
| 11109 | F: tools/testing/selftests/drivers/net/mlxsw/ | 11110 | F: tools/testing/selftests/drivers/net/mlxsw/ |
| 11110 | 11111 | ||
| 11111 | MELLANOX FIRMWARE FLASH LIBRARY (mlxfw) | 11112 | MELLANOX FIRMWARE FLASH LIBRARY (mlxfw) |
| 11112 | M: mlxsw@mellanox.com | 11113 | M: mlxsw@nvidia.com |
| 11113 | L: netdev@vger.kernel.org | 11114 | L: netdev@vger.kernel.org |
| 11114 | S: Supported | 11115 | S: Supported |
| 11115 | W: http://www.mellanox.com | 11116 | W: http://www.mellanox.com |
| @@ -11119,7 +11120,7 @@ F: drivers/net/ethernet/mellanox/mlxfw/ · 3 unmodified lines | |||
| 11119 | MELLANOX HARDWARE PLATFORM SUPPORT | 11120 | MELLANOX HARDWARE PLATFORM SUPPORT |
| 11120 | M: Andy Shevchenko <andy@infradead.org> | 11121 | M: Andy Shevchenko <andy@infradead.org> |
| 11121 | M: Darren Hart <dvhart@infradead.org> | 11122 | M: Darren Hart <dvhart@infradead.org> |
| 11122 | M: Vadim Pasternak <vadimp@mellanox.com> | 11123 | M: Vadim Pasternak <vadimp@nvidia.com> |
| 11123 | L: platform-driver-x86@vger.kernel.org | 11124 | L: platform-driver-x86@vger.kernel.org |
| 11124 | S: Supported | 11125 | S: Supported |
| 11125 | F: Documentation/ABI/testing/sysfs-platform-mellanox-bootctl | 11126 | F: Documentation/ABI/testing/sysfs-platform-mellanox-bootctl |
| @@ -11127,7 +11128,7 @@ F: drivers/platform/mellanox/ · 1 unmodified line | |||
| 11127 | F: include/linux/platform_data/mlxreg.h | 11128 | F: include/linux/platform_data/mlxreg.h |
| 11128 | 11129 | ||
| 11129 | MELLANOX MLX4 core VPI driver | 11130 | MELLANOX MLX4 core VPI driver |
| 11130 | M: Tariq Toukan <tariqt@mellanox.com> | 11131 | M: Tariq Toukan <tariqt@nvidia.com> |
| 11131 | L: netdev@vger.kernel.org | 11132 | L: netdev@vger.kernel.org |
| 11132 | L: linux-rdma@vger.kernel.org | 11133 | L: linux-rdma@vger.kernel.org |
| 11133 | S: Supported | 11134 | S: Supported |
| @@ -11137,7 +11138,7 @@ F: drivers/net/ethernet/mellanox/mlx4/ · 3 unmodified lines | |||
| 11137 | F: include/linux/mlx4/ | 11138 | F: include/linux/mlx4/ |
| 11138 | 11139 | ||
| 11139 | MELLANOX MLX4 IB driver | 11140 | MELLANOX MLX4 IB driver |
| 11140 | M: Yishai Hadas <yishaih@mellanox.com> | 11141 | M: Yishai Hadas <yishaih@nvidia.com> |
| 11141 | L: linux-rdma@vger.kernel.org | 11142 | L: linux-rdma@vger.kernel.org |
| 11142 | S: Supported | 11143 | S: Supported |
| 11143 | W: http://www.mellanox.com | 11144 | W: http://www.mellanox.com |
| @@ -11147,8 +11148,8 @@ F: include/linux/mlx4/ · 3 unmodified lines | |||
| 11147 | F: include/uapi/rdma/mlx4-abi.h | 11148 | F: include/uapi/rdma/mlx4-abi.h |
| 11148 | 11149 | ||
| 11149 | MELLANOX MLX5 core VPI driver | 11150 | MELLANOX MLX5 core VPI driver |
| 11150 | M: Saeed Mahameed <saeedm@mellanox.com> | 11151 | M: Saeed Mahameed <saeedm@nvidia.com> |
| 11151 | M: Leon Romanovsky <leonro@mellanox.com> | 11152 | M: Leon Romanovsky <leonro@nvidia.com> |
| 11152 | L: netdev@vger.kernel.org | 11153 | L: netdev@vger.kernel.org |
| 11153 | L: linux-rdma@vger.kernel.org | 11154 | L: linux-rdma@vger.kernel.org |
| 11154 | S: Supported | 11155 | S: Supported |
| @@ -11159,7 +11160,7 @@ F: drivers/net/ethernet/mellanox/mlx5/core/ · 4 unmodified lines | |||
| 11159 | F: include/linux/mlx5/ | 11160 | F: include/linux/mlx5/ |
| 11160 | 11161 | ||
| 11161 | MELLANOX MLX5 IB driver | 11162 | MELLANOX MLX5 IB driver |
| 11162 | M: Leon Romanovsky <leonro@mellanox.com> | 11163 | M: Leon Romanovsky <leonro@nvidia.com> |
| 11163 | L: linux-rdma@vger.kernel.org | 11164 | L: linux-rdma@vger.kernel.org |
| 11164 | S: Supported | 11165 | S: Supported |
| 11165 | W: http://www.mellanox.com | 11166 | W: http://www.mellanox.com |
| @@ -11169,8 +11170,8 @@ F: include/linux/mlx5/ · 3 unmodified lines | |||
| 11169 | F: include/uapi/rdma/mlx5-abi.h | 11170 | F: include/uapi/rdma/mlx5-abi.h |
| 11170 | 11171 | ||
| 11171 | MELLANOX MLXCPLD I2C AND MUX DRIVER | 11172 | MELLANOX MLXCPLD I2C AND MUX DRIVER |
| 11172 | M: Vadim Pasternak <vadimp@mellanox.com> | 11173 | M: Vadim Pasternak <vadimp@nvidia.com> |
| 11173 | M: Michael Shych <michaelsh@mellanox.com> | 11174 | M: Michael Shych <michaelsh@nvidia.com> |
| 11174 | L: linux-i2c@vger.kernel.org | 11175 | L: linux-i2c@vger.kernel.org |
| 11175 | S: Supported | 11176 | S: Supported |
| 11176 | F: Documentation/i2c/busses/i2c-mlxcpld.rst | 11177 | F: Documentation/i2c/busses/i2c-mlxcpld.rst |
| @@ -11178,7 +11179,7 @@ F: drivers/i2c/busses/i2c-mlxcpld.c · 1 unmodified line | |||
| 11178 | F: drivers/i2c/muxes/i2c-mux-mlxcpld.c | 11179 | F: drivers/i2c/muxes/i2c-mux-mlxcpld.c |
| 11179 | 11180 | ||
| 11180 | MELLANOX MLXCPLD LED DRIVER | 11181 | MELLANOX MLXCPLD LED DRIVER |
| 11181 | M: Vadim Pasternak <vadimp@mellanox.com> | 11182 | M: Vadim Pasternak <vadimp@nvidia.com> |
| 11182 | L: linux-leds@vger.kernel.org | 11183 | L: linux-leds@vger.kernel.org |
| 11183 | S: Supported | 11184 | S: Supported |
| 11184 | F: Documentation/leds/leds-mlxcpld.rst | 11185 | F: Documentation/leds/leds-mlxcpld.rst |
| @@ -11186,7 +11187,7 @@ F: drivers/leds/leds-mlxcpld.c · 1 unmodified line | |||
| 11186 | F: drivers/leds/leds-mlxreg.c | 11187 | F: drivers/leds/leds-mlxreg.c |
| 11187 | 11188 | ||
| 11188 | MELLANOX PLATFORM DRIVER | 11189 | MELLANOX PLATFORM DRIVER |
| 11189 | M: Vadim Pasternak <vadimp@mellanox.com> | 11190 | M: Vadim Pasternak <vadimp@nvidia.com> |
| 11190 | L: platform-driver-x86@vger.kernel.org | 11191 | L: platform-driver-x86@vger.kernel.org |
| 11191 | S: Supported | 11192 | S: Supported |
| 11192 | F: drivers/platform/x86/mlx-platform.c | 11193 | F: drivers/platform/x86/mlx-platform.c |
| @@ -12167,8 +12168,8 @@ F: net/ipv6/syncookies.c · 974 unmodified lines | |||
| 12167 | F: net/ipv6/tcp*.c | 12168 | F: net/ipv6/tcp*.c |
| 12168 | 12169 | ||
| 12169 | NETWORKING [TLS] | 12170 | NETWORKING [TLS] |
| 12170 | M: Boris Pismenny <borisp@mellanox.com> | 12171 | M: Boris Pismenny <borisp@nvidia.com> |
| 12171 | M: Aviad Yehezkel <aviadye@mellanox.com> | 12172 | M: Aviad Yehezkel <aviadye@nvidia.com> |
| 12172 | M: John Fastabend <john.fastabend@gmail.com> | 12173 | M: John Fastabend <john.fastabend@gmail.com> |
| 12173 | M: Daniel Borkmann <daniel@iogearbox.net> | 12174 | M: Daniel Borkmann <daniel@iogearbox.net> |
| 12174 | M: Jakub Kicinski <kuba@kernel.org> | 12175 | M: Jakub Kicinski <kuba@kernel.org> |
| @@ -12468,7 +12469,7 @@ S: Supported · 293 unmodified lines | |||
| 12468 | F: drivers/nfc/nxp-nci | 12469 | F: drivers/nfc/nxp-nci |
| 12469 | 12470 | ||
| 12470 | OBJAGG | 12471 | OBJAGG |
| 12471 | M: Jiri Pirko <jiri@mellanox.com> | 12472 | M: Jiri Pirko <jiri@nvidia.com> |
| 12472 | L: netdev@vger.kernel.org | 12473 | L: netdev@vger.kernel.org |
| 12473 | S: Supported | 12474 | S: Supported |
| 12474 | F: include/linux/objagg.h | 12475 | F: include/linux/objagg.h |
| @@ -13110,7 +13111,7 @@ F: drivers/video/logo/logo_parisc* · 635 unmodified lines | |||
| 13110 | F: include/linux/hp_sdc.h | 13111 | F: include/linux/hp_sdc.h |
| 13111 | 13112 | ||
| 13112 | PARMAN | 13113 | PARMAN |
| 13113 | M: Jiri Pirko <jiri@mellanox.com> | 13114 | M: Jiri Pirko <jiri@nvidia.com> |
| 13114 | L: netdev@vger.kernel.org | 13115 | L: netdev@vger.kernel.org |
| 13115 | S: Supported | 13116 | S: Supported |
| 13116 | F: include/linux/parman.h | 13117 | F: include/linux/parman.h |
| @@ -16034,7 +16035,7 @@ F: drivers/infiniband/sw/siw/ · 2917 unmodified lines | |||
| 16034 | F: include/uapi/rdma/siw-abi.h | 16035 | F: include/uapi/rdma/siw-abi.h |
| 16035 | 16036 | ||
| 16036 | SOFT-ROCE DRIVER (rxe) | 16037 | SOFT-ROCE DRIVER (rxe) |
| 16037 | M: Zhu Yanjun <yanjunz@mellanox.com> | 16038 | M: Zhu Yanjun <yanjunz@nvidia.com> |
| 16038 | L: linux-rdma@vger.kernel.org | 16039 | L: linux-rdma@vger.kernel.org |
| 16039 | S: Supported | 16040 | S: Supported |
| 16040 | F: drivers/infiniband/sw/rxe/ | 16041 | F: drivers/infiniband/sw/rxe/ |
| @@ -17116,8 +17117,8 @@ S: Maintained · 1075 unmodified lines | |||
| 17116 | F: Documentation/devicetree/bindings/arm/keystone/ti,k3-sci-common.yaml | 17117 | F: Documentation/devicetree/bindings/arm/keystone/ti,k3-sci-common.yaml |
| 17117 | F: Documentation/devicetree/bindings/arm/keystone/ti,sci.txt | 17118 | F: Documentation/devicetree/bindings/arm/keystone/ti,sci.txt |
| 17118 | F: Documentation/devicetree/bindings/clock/ti,sci-clk.txt | 17119 | F: Documentation/devicetree/bindings/clock/ti,sci-clk.txt |
| 17119 | F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.txt | 17120 | F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-inta.yaml |
| 17120 | F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.txt | 17121 | F: Documentation/devicetree/bindings/interrupt-controller/ti,sci-intr.yaml |
| 17121 | F: Documentation/devicetree/bindings/reset/ti,sci-reset.txt | 17122 | F: Documentation/devicetree/bindings/reset/ti,sci-reset.txt |
| 17122 | F: Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt | 17123 | F: Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt |
| 17123 | F: drivers/clk/keystone/sci-clk.c | 17124 | F: drivers/clk/keystone/sci-clk.c |
| @@ -18874,6 +18875,15 @@ S: Maintained · 1750 unmodified lines | |||
| 18874 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core | 18875 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core |
| 18875 | F: arch/x86/platform | 18876 | F: arch/x86/platform |
| 18876 | 18877 | ||
| 18878 | X86 PLATFORM UV HPE SUPERDOME FLEX | ||
| 18879 | M: Steve Wahl <steve.wahl@hpe.com> | ||
| 18880 | R: Dimitri Sivanich <dimitri.sivanich@hpe.com> | ||
| 18881 | R: Russ Anderson <russ.anderson@hpe.com> | ||
| 18882 | S: Supported | ||
| 18883 | F: arch/x86/include/asm/uv/ | ||
| 18884 | F: arch/x86/kernel/apic/x2apic_uv_x.c | ||
| 18885 | F: arch/x86/platform/uv/ | ||
| 18886 | |||
| 18877 | X86 VDSO | 18887 | X86 VDSO |
| 18878 | M: Andy Lutomirski <luto@kernel.org> | 18888 | M: Andy Lutomirski <luto@kernel.org> |
| 18879 | L: linux-kernel@vger.kernel.org | 18889 | L: linux-kernel@vger.kernel.org |
| @@ -2,7 +2,7 @@ · 1 unmodified line | |||
| 2 | VERSION = 5 | 2 | VERSION = 5 |
| 3 | PATCHLEVEL = 9 | 3 | PATCHLEVEL = 9 |
| 4 | SUBLEVEL = 0 | 4 | SUBLEVEL = 0 |
| 5 | EXTRAVERSION = -rc1 | 5 | EXTRAVERSION = -rc3 |
| 6 | NAME = Kleptomaniac Octopus | 6 | NAME = Kleptomaniac Octopus |
| 7 | 7 | ||
| 8 | # *DOCUMENTATION* | 8 | # *DOCUMENTATION* |
| @@ -265,8 +265,7 @@ no-dot-config-targets := $(clean-targets) \ · 256 unmodified lines | |||
| 265 | $(version_h) headers headers_% archheaders archscripts \ | 265 | $(version_h) headers headers_% archheaders archscripts \ |
| 266 | %asm-generic kernelversion %src-pkg dt_binding_check \ | 266 | %asm-generic kernelversion %src-pkg dt_binding_check \ |
| 267 | outputmakefile | 267 | outputmakefile |
| 268 | no-sync-config-targets := $(no-dot-config-targets) install %install \ | 268 | no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease |
| 269 | kernelrelease | ||
| 270 | single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ | 269 | single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ |
| 271 | 270 | ||
| 272 | config-build := | 271 | config-build := |
| @@ -292,7 +291,7 @@ ifneq ($(KBUILD_EXTMOD),) · 19 unmodified lines | |||
| 292 | endif | 291 | endif |
| 293 | 292 | ||
| 294 | ifeq ($(KBUILD_EXTMOD),) | 293 | ifeq ($(KBUILD_EXTMOD),) |
| 295 | ifneq ($(filter config %config,$(MAKECMDGOALS)),) | 294 | ifneq ($(filter %config,$(MAKECMDGOALS)),) |
| 296 | config-build := 1 | 295 | config-build := 1 |
| 297 | ifneq ($(words $(MAKECMDGOALS)),1) | 296 | ifneq ($(words $(MAKECMDGOALS)),1) |
| 298 | mixed-build := 1 | 297 | mixed-build := 1 |
| @@ -212,7 +212,7 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab, · 211 unmodified lines | |||
| 212 | STO_ALPHA_STD_GPLOAD) | 212 | STO_ALPHA_STD_GPLOAD) |
| 213 | /* Omit the prologue. */ | 213 | /* Omit the prologue. */ |
| 214 | value += 8; | 214 | value += 8; |
| 215 | /* FALLTHRU */ | 215 | fallthrough; |
| 216 | case R_ALPHA_BRADDR: | 216 | case R_ALPHA_BRADDR: |
| 217 | value -= (u64)location + 4; | 217 | value -= (u64)location + 4; |
| 218 | if (value & 3) | 218 | if (value & 3) |
| @@ -453,7 +453,7 @@ syscall_restart(unsigned long r0, unsigned long r19, · 452 unmodified lines | |||
| 453 | regs->r0 = EINTR; | 453 | regs->r0 = EINTR; |
| 454 | break; | 454 | break; |
| 455 | } | 455 | } |
| 456 | /* fallthrough */ | 456 | fallthrough; |
| 457 | case ERESTARTNOINTR: | 457 | case ERESTARTNOINTR: |
| 458 | regs->r0 = r0; /* reset v0 and a3 and replay syscall */ | 458 | regs->r0 = r0; /* reset v0 and a3 and replay syscall */ |
| 459 | regs->r19 = r19; | 459 | regs->r19 = r19; |
| @@ -883,7 +883,7 @@ do_entUnaUser(void __user * va, unsigned long opcode, · 882 unmodified lines | |||
| 883 | 883 | ||
| 884 | case 0x26: /* sts */ | 884 | case 0x26: /* sts */ |
| 885 | fake_reg = s_reg_to_mem(alpha_read_fp_reg(reg)); | 885 | fake_reg = s_reg_to_mem(alpha_read_fp_reg(reg)); |
| 886 | /* FALLTHRU */ | 886 | fallthrough; |
| 887 | 887 | ||
| 888 | case 0x2c: /* stl */ | 888 | case 0x2c: /* stl */ |
| 889 | __asm__ __volatile__( | 889 | __asm__ __volatile__( |
| @@ -911,7 +911,7 @@ do_entUnaUser(void __user * va, unsigned long opcode, · 21 unmodified lines | |||
| 911 | 911 | ||
| 912 | case 0x27: /* stt */ | 912 | case 0x27: /* stt */ |
| 913 | fake_reg = alpha_read_fp_reg(reg); | 913 | fake_reg = alpha_read_fp_reg(reg); |
| 914 | /* FALLTHRU */ | 914 | fallthrough; |
| 915 | 915 | ||
| 916 | case 0x2d: /* stq */ | 916 | case 0x2d: /* stq */ |
| 917 | __asm__ __volatile__( | 917 | __asm__ __volatile__( |
| @@ -339,7 +339,7 @@ void __kprobes disasm_instr(unsigned long addr, struct disasm_state *state, · 338 unmodified lines | |||
| 339 | 339 | ||
| 340 | case op_LDWX_S: /* LDWX_S c, [b, u6] */ | 340 | case op_LDWX_S: /* LDWX_S c, [b, u6] */ |
| 341 | state->x = 1; | 341 | state->x = 1; |
| 342 | /* intentional fall-through */ | 342 | fallthrough; |
| 343 | 343 | ||
| 344 | case op_LDW_S: /* LDW_S c, [b, u6] */ | 344 | case op_LDW_S: /* LDW_S c, [b, u6] */ |
| 345 | state->zz = 2; | 345 | state->zz = 2; |
| @@ -321,7 +321,7 @@ static void arc_restart_syscall(struct k_sigaction *ka, struct pt_regs *regs) · 320 unmodified lines | |||
| 321 | regs->r0 = -EINTR; | 321 | regs->r0 = -EINTR; |
| 322 | break; | 322 | break; |
| 323 | } | 323 | } |
| 324 | /* fallthrough */ | 324 | fallthrough; |
| 325 | 325 | ||
| 326 | case -ERESTARTNOINTR: | 326 | case -ERESTARTNOINTR: |
| 327 | /* | 327 | /* |
| @@ -572,7 +572,7 @@ static unsigned long read_pointer(const u8 **pLoc, const void *end, · 571 unmodified lines | |||
| 572 | #else | 572 | #else |
| 573 | BUILD_BUG_ON(sizeof(u32) != sizeof(value)); | 573 | BUILD_BUG_ON(sizeof(u32) != sizeof(value)); |
| 574 | #endif | 574 | #endif |
| 575 | /* Fall through */ | 575 | fallthrough; |
| 576 | case DW_EH_PE_native: | 576 | case DW_EH_PE_native: |
| 577 | if (end < (const void *)(ptr.pul + 1)) | 577 | if (end < (const void *)(ptr.pul + 1)) |
| 578 | return 0; | 578 | return 0; |
| @@ -827,7 +827,7 @@ static int processCFI(const u8 *start, const u8 *end, unsigned long targetLoc, · 248 unmodified lines | |||
| 827 | case DW_CFA_def_cfa: | 827 | case DW_CFA_def_cfa: |
| 828 | state->cfa.reg = get_uleb128(&ptr.p8, end); | 828 | state->cfa.reg = get_uleb128(&ptr.p8, end); |
| 829 | unw_debug("cfa_def_cfa: r%lu ", state->cfa.reg); | 829 | unw_debug("cfa_def_cfa: r%lu ", state->cfa.reg); |
| 830 | /* fall through */ | 830 | fallthrough; |
| 831 | case DW_CFA_def_cfa_offset: | 831 | case DW_CFA_def_cfa_offset: |
| 832 | state->cfa.offs = get_uleb128(&ptr.p8, end); | 832 | state->cfa.offs = get_uleb128(&ptr.p8, end); |
| 833 | unw_debug("cfa_def_cfa_offset: 0x%lx ", | 833 | unw_debug("cfa_def_cfa_offset: 0x%lx ", |
| @@ -835,7 +835,7 @@ static int processCFI(const u8 *start, const u8 *end, unsigned long targetLoc, · 1 unmodified line | |||
| 835 | break; | 835 | break; |
| 836 | case DW_CFA_def_cfa_sf: | 836 | case DW_CFA_def_cfa_sf: |
| 837 | state->cfa.reg = get_uleb128(&ptr.p8, end); | 837 | state->cfa.reg = get_uleb128(&ptr.p8, end); |
| 838 | /* fall through */ | 838 | fallthrough; |
| 839 | case DW_CFA_def_cfa_offset_sf: | 839 | case DW_CFA_def_cfa_offset_sf: |
| 840 | state->cfa.offs = get_sleb128(&ptr.p8, end) | 840 | state->cfa.offs = get_sleb128(&ptr.p8, end) |
| 841 | * state->dataAlign; | 841 | * state->dataAlign; |
| @@ -547,7 +547,7 @@ static int arch_build_bp_info(struct perf_event *bp, · 546 unmodified lines | |||
| 547 | if ((hw->ctrl.type != ARM_BREAKPOINT_EXECUTE) | 547 | if ((hw->ctrl.type != ARM_BREAKPOINT_EXECUTE) |
| 548 | && max_watchpoint_len >= 8) | 548 | && max_watchpoint_len >= 8) |
| 549 | break; | 549 | break; |
| 550 | /* Else, fall through */ | 550 | fallthrough; |
| 551 | default: | 551 | default: |
| 552 | return -EINVAL; | 552 | return -EINVAL; |
| 553 | } | 553 | } |
| @@ -612,12 +612,12 @@ int hw_breakpoint_arch_parse(struct perf_event *bp, · 58 unmodified lines | |||
| 612 | /* Allow halfword watchpoints and breakpoints. */ | 612 | /* Allow halfword watchpoints and breakpoints. */ |
| 613 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2) | 613 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2) |
| 614 | break; | 614 | break; |
| 615 | /* Else, fall through */ | 615 | fallthrough; |
| 616 | case 3: | 616 | case 3: |
| 617 | /* Allow single byte watchpoint. */ | 617 | /* Allow single byte watchpoint. */ |
| 618 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1) | 618 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1) |
| 619 | break; | 619 | break; |
| 620 | /* Else, fall through */ | 620 | fallthrough; |
| 621 | default: | 621 | default: |
| 622 | ret = -EINVAL; | 622 | ret = -EINVAL; |
| 623 | goto out; | 623 | goto out; |
| @@ -884,7 +884,7 @@ static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr, · 260 unmodified lines | |||
| 884 | break; | 884 | break; |
| 885 | case ARM_ENTRY_ASYNC_WATCHPOINT: | 885 | case ARM_ENTRY_ASYNC_WATCHPOINT: |
| 886 | WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n"); | 886 | WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n"); |
| 887 | /* Fall through */ | 887 | fallthrough; |
| 888 | case ARM_ENTRY_SYNC_WATCHPOINT: | 888 | case ARM_ENTRY_SYNC_WATCHPOINT: |
| 889 | watchpoint_handler(addr, fsr, regs); | 889 | watchpoint_handler(addr, fsr, regs); |
| 890 | break; | 890 | break; |
| @@ -933,7 +933,7 @@ static bool core_has_os_save_restore(void) · 42 unmodified lines | |||
| 933 | ARM_DBG_READ(c1, c1, 4, oslsr); | 933 | ARM_DBG_READ(c1, c1, 4, oslsr); |
| 934 | if (oslsr & ARM_OSLSR_OSLM0) | 934 | if (oslsr & ARM_OSLSR_OSLM0) |
| 935 | return true; | 935 | return true; |
| 936 | /* Else, fall through */ | 936 | fallthrough; |
| 937 | default: | 937 | default: |
| 938 | return false; | 938 | return false; |
| 939 | } | 939 | } |
| @@ -596,7 +596,7 @@ static int do_signal(struct pt_regs *regs, int syscall) · 595 unmodified lines | |||
| 596 | switch (retval) { | 596 | switch (retval) { |
| 597 | case -ERESTART_RESTARTBLOCK: | 597 | case -ERESTART_RESTARTBLOCK: |
| 598 | restart -= 2; | 598 | restart -= 2; |
| 599 | /* Fall through */ | 599 | fallthrough; |
| 600 | case -ERESTARTNOHAND: | 600 | case -ERESTARTNOHAND: |
| 601 | case -ERESTARTSYS: | 601 | case -ERESTARTSYS: |
| 602 | case -ERESTARTNOINTR: | 602 | case -ERESTARTNOINTR: |
| @@ -49,7 +49,7 @@ static int crunch_do(struct notifier_block *self, unsigned long cmd, void *t) · 48 unmodified lines | |||
| 49 | * FALLTHROUGH: Ensure we don't try to overwrite our newly | 49 | * FALLTHROUGH: Ensure we don't try to overwrite our newly |
| 50 | * initialised state information on the first fault. | 50 | * initialised state information on the first fault. |
| 51 | */ | 51 | */ |
| 52 | /* Fall through */ | 52 | fallthrough; |
| 53 | 53 | ||
| 54 | case THREAD_NOTIFY_EXIT: | 54 | case THREAD_NOTIFY_EXIT: |
| 55 | crunch_task_release(thread); | 55 | crunch_task_release(thread); |
| @@ -123,19 +123,19 @@ void mmp2_pm_enter_lowpower_mode(int state) · 122 unmodified lines | |||
| 123 | case POWER_MODE_SYS_SLEEP: | 123 | case POWER_MODE_SYS_SLEEP: |
| 124 | apcr |= MPMU_PCR_PJ_SLPEN; /* set the SLPEN bit */ | 124 | apcr |= MPMU_PCR_PJ_SLPEN; /* set the SLPEN bit */ |
| 125 | apcr |= MPMU_PCR_PJ_VCTCXOSD; /* set VCTCXOSD */ | 125 | apcr |= MPMU_PCR_PJ_VCTCXOSD; /* set VCTCXOSD */ |
| 126 | /* fall through */ | 126 | fallthrough; |
| 127 | case POWER_MODE_CHIP_SLEEP: | 127 | case POWER_MODE_CHIP_SLEEP: |
| 128 | apcr |= MPMU_PCR_PJ_SLPEN; | 128 | apcr |= MPMU_PCR_PJ_SLPEN; |
| 129 | /* fall through */ | 129 | fallthrough; |
| 130 | case POWER_MODE_APPS_SLEEP: | 130 | case POWER_MODE_APPS_SLEEP: |
| 131 | apcr |= MPMU_PCR_PJ_APBSD; /* set APBSD */ | 131 | apcr |= MPMU_PCR_PJ_APBSD; /* set APBSD */ |
| 132 | /* fall through */ | 132 | fallthrough; |
| 133 | case POWER_MODE_APPS_IDLE: | 133 | case POWER_MODE_APPS_IDLE: |
| 134 | apcr |= MPMU_PCR_PJ_AXISD; /* set AXISDD bit */ | 134 | apcr |= MPMU_PCR_PJ_AXISD; /* set AXISDD bit */ |
| 135 | apcr |= MPMU_PCR_PJ_DDRCORSD; /* set DDRCORSD bit */ | 135 | apcr |= MPMU_PCR_PJ_DDRCORSD; /* set DDRCORSD bit */ |
| 136 | idle_cfg |= APMU_PJ_IDLE_CFG_PJ_PWRDWN; /* PJ power down */ | 136 | idle_cfg |= APMU_PJ_IDLE_CFG_PJ_PWRDWN; /* PJ power down */ |
| 137 | apcr |= MPMU_PCR_PJ_SPSD; | 137 | apcr |= MPMU_PCR_PJ_SPSD; |
| 138 | /* fall through */ | 138 | fallthrough; |
| 139 | case POWER_MODE_CORE_EXTIDLE: | 139 | case POWER_MODE_CORE_EXTIDLE: |
| 140 | idle_cfg |= APMU_PJ_IDLE_CFG_PJ_IDLE; /* set the IDLE bit */ | 140 | idle_cfg |= APMU_PJ_IDLE_CFG_PJ_IDLE; /* set the IDLE bit */ |
| 141 | idle_cfg &= ~APMU_PJ_IDLE_CFG_ISO_MODE_CNTRL_MASK; | 141 | idle_cfg &= ~APMU_PJ_IDLE_CFG_ISO_MODE_CNTRL_MASK; |
| @@ -145,23 +145,23 @@ void pxa910_pm_enter_lowpower_mode(int state) · 144 unmodified lines | |||
| 145 | case POWER_MODE_UDR: | 145 | case POWER_MODE_UDR: |
| 146 | /* only shutdown APB in UDR */ | 146 | /* only shutdown APB in UDR */ |
| 147 | apcr |= MPMU_APCR_STBYEN | MPMU_APCR_APBSD; | 147 | apcr |= MPMU_APCR_STBYEN | MPMU_APCR_APBSD; |
| 148 | /* fall through */ | 148 | fallthrough; |
| 149 | case POWER_MODE_SYS_SLEEP: | 149 | case POWER_MODE_SYS_SLEEP: |
| 150 | apcr |= MPMU_APCR_SLPEN; /* set the SLPEN bit */ | 150 | apcr |= MPMU_APCR_SLPEN; /* set the SLPEN bit */ |
| 151 | apcr |= MPMU_APCR_VCTCXOSD; /* set VCTCXOSD */ | 151 | apcr |= MPMU_APCR_VCTCXOSD; /* set VCTCXOSD */ |
| 152 | /* fall through */ | 152 | fallthrough; |
| 153 | case POWER_MODE_APPS_SLEEP: | 153 | case POWER_MODE_APPS_SLEEP: |
| 154 | apcr |= MPMU_APCR_DDRCORSD; /* set DDRCORSD */ | 154 | apcr |= MPMU_APCR_DDRCORSD; /* set DDRCORSD */ |
| 155 | /* fall through */ | 155 | fallthrough; |
| 156 | case POWER_MODE_APPS_IDLE: | 156 | case POWER_MODE_APPS_IDLE: |
| 157 | apcr |= MPMU_APCR_AXISD; /* set AXISDD bit */ | 157 | apcr |= MPMU_APCR_AXISD; /* set AXISDD bit */ |
| 158 | /* fall through */ | 158 | fallthrough; |
| 159 | case POWER_MODE_CORE_EXTIDLE: | 159 | case POWER_MODE_CORE_EXTIDLE: |
| 160 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_IDLE; | 160 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_IDLE; |
| 161 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_PWRDWN; | 161 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_PWRDWN; |
| 162 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_PWR_SW(3) | 162 | idle_cfg |= APMU_MOH_IDLE_CFG_MOH_PWR_SW(3) |
| 163 | | APMU_MOH_IDLE_CFG_MOH_L2_PWR_SW(3); | 163 | | APMU_MOH_IDLE_CFG_MOH_L2_PWR_SW(3); |
| 164 | /* fall through */ | 164 | fallthrough; |
| 165 | case POWER_MODE_CORE_INTIDLE: | 165 | case POWER_MODE_CORE_INTIDLE: |
| 166 | break; | 166 | break; |
| 167 | } | 167 | } |
| @@ -396,7 +396,6 @@ void __init omap3xxx_check_revision(void) · 395 unmodified lines | |||
| 396 | cpu_rev = "3.1"; | 396 | cpu_rev = "3.1"; |
| 397 | break; | 397 | break; |
| 398 | case 7: | 398 | case 7: |
| 399 | /* FALLTHROUGH */ | ||
| 400 | default: | 399 | default: |
| 401 | /* Use the latest known revision as default */ | 400 | /* Use the latest known revision as default */ |
| 402 | omap_revision = OMAP3430_REV_ES3_1_2; | 401 | omap_revision = OMAP3430_REV_ES3_1_2; |
| @@ -416,7 +415,6 @@ void __init omap3xxx_check_revision(void) · 13 unmodified lines | |||
| 416 | cpu_rev = "1.0"; | 415 | cpu_rev = "1.0"; |
| 417 | break; | 416 | break; |
| 418 | case 1: | 417 | case 1: |
| 419 | /* FALLTHROUGH */ | ||
| 420 | default: | 418 | default: |
| 421 | omap_revision = AM35XX_REV_ES1_1; | 419 | omap_revision = AM35XX_REV_ES1_1; |
| 422 | cpu_rev = "1.1"; | 420 | cpu_rev = "1.1"; |
| @@ -435,7 +433,6 @@ void __init omap3xxx_check_revision(void) · 12 unmodified lines | |||
| 435 | cpu_rev = "1.1"; | 433 | cpu_rev = "1.1"; |
| 436 | break; | 434 | break; |
| 437 | case 2: | 435 | case 2: |
| 438 | /* FALLTHROUGH */ | ||
| 439 | default: | 436 | default: |
| 440 | omap_revision = OMAP3630_REV_ES1_2; | 437 | omap_revision = OMAP3630_REV_ES1_2; |
| 441 | cpu_rev = "1.2"; | 438 | cpu_rev = "1.2"; |
| @@ -456,7 +453,6 @@ void __init omap3xxx_check_revision(void) · 14 unmodified lines | |||
| 456 | cpu_rev = "2.0"; | 453 | cpu_rev = "2.0"; |
| 457 | break; | 454 | break; |
| 458 | case 3: | 455 | case 3: |
| 459 | /* FALLTHROUGH */ | ||
| 460 | default: | 456 | default: |
| 461 | omap_revision = TI8168_REV_ES2_1; | 457 | omap_revision = TI8168_REV_ES2_1; |
| 462 | cpu_rev = "2.1"; | 458 | cpu_rev = "2.1"; |
| @@ -473,7 +469,6 @@ void __init omap3xxx_check_revision(void) · 10 unmodified lines | |||
| 473 | cpu_rev = "2.0"; | 469 | cpu_rev = "2.0"; |
| 474 | break; | 470 | break; |
| 475 | case 2: | 471 | case 2: |
| 476 | /* FALLTHROUGH */ | ||
| 477 | default: | 472 | default: |
| 478 | omap_revision = AM335X_REV_ES2_1; | 473 | omap_revision = AM335X_REV_ES2_1; |
| 479 | cpu_rev = "2.1"; | 474 | cpu_rev = "2.1"; |
| @@ -491,7 +486,6 @@ void __init omap3xxx_check_revision(void) · 11 unmodified lines | |||
| 491 | cpu_rev = "1.1"; | 486 | cpu_rev = "1.1"; |
| 492 | break; | 487 | break; |
| 493 | case 2: | 488 | case 2: |
| 494 | /* FALLTHROUGH */ | ||
| 495 | default: | 489 | default: |
| 496 | omap_revision = AM437X_REV_ES1_2; | 490 | omap_revision = AM437X_REV_ES1_2; |
| 497 | cpu_rev = "1.2"; | 491 | cpu_rev = "1.2"; |
| @@ -502,7 +496,6 @@ void __init omap3xxx_check_revision(void) · 4 unmodified lines | |||
| 502 | case 0xb968: | 496 | case 0xb968: |
| 503 | switch (rev) { | 497 | switch (rev) { |
| 504 | case 0: | 498 | case 0: |
| 505 | /* FALLTHROUGH */ | ||
| 506 | case 1: | 499 | case 1: |
| 507 | omap_revision = TI8148_REV_ES1_0; | 500 | omap_revision = TI8148_REV_ES1_0; |
| 508 | cpu_rev = "1.0"; | 501 | cpu_rev = "1.0"; |
| @@ -512,7 +505,6 @@ void __init omap3xxx_check_revision(void) · 3 unmodified lines | |||
| 512 | cpu_rev = "2.0"; | 505 | cpu_rev = "2.0"; |
| 513 | break; | 506 | break; |
| 514 | case 3: | 507 | case 3: |
| 515 | /* FALLTHROUGH */ | ||
| 516 | default: | 508 | default: |
| 517 | omap_revision = TI8148_REV_ES2_1; | 509 | omap_revision = TI8148_REV_ES2_1; |
| 518 | cpu_rev = "2.1"; | 510 | cpu_rev = "2.1"; |
| @@ -240,7 +240,7 @@ static int _omap_device_notifier_call(struct notifier_block *nb, · 239 unmodified lines | |||
| 240 | if (pdev->dev.of_node) | 240 | if (pdev->dev.of_node) |
| 241 | omap_device_build_from_dt(pdev); | 241 | omap_device_build_from_dt(pdev); |
| 242 | omap_auxdata_legacy_init(dev); | 242 | omap_auxdata_legacy_init(dev); |
| 243 | /* fall through */ | 243 | fallthrough; |
| 244 | default: | 244 | default: |
| 245 | od = to_omap_device(pdev); | 245 | od = to_omap_device(pdev); |
| 246 | if (od) | 246 | if (od) |
| @@ -298,11 +298,7 @@ static void omap3_pm_idle(void) · 297 unmodified lines | |||
| 298 | if (omap_irq_pending()) | 298 | if (omap_irq_pending()) |
| 299 | return; | 299 | return; |
| 300 | 300 | ||
| 301 | trace_cpu_idle_rcuidle(1, smp_processor_id()); | ||
| 302 | |||
| 303 | omap_sram_idle(); | 301 | omap_sram_idle(); |
| 304 | |||
| 305 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); | ||
| 306 | } | 302 | } |
| 307 | 303 | ||
| 308 | #ifdef CONFIG_SUSPEND | 304 | #ifdef CONFIG_SUSPEND |
| @@ -624,7 +624,7 @@ static void __init dns323_init(void) · 623 unmodified lines | |||
| 624 | dns323ab_leds[0].active_low = 1; | 624 | dns323ab_leds[0].active_low = 1; |
| 625 | gpio_request(DNS323_GPIO_LED_POWER1, "Power Led Enable"); | 625 | gpio_request(DNS323_GPIO_LED_POWER1, "Power Led Enable"); |
| 626 | gpio_direction_output(DNS323_GPIO_LED_POWER1, 0); | 626 | gpio_direction_output(DNS323_GPIO_LED_POWER1, 0); |
| 627 | /* Fall through */ | 627 | fallthrough; |
| 628 | case DNS323_REV_B1: | 628 | case DNS323_REV_B1: |
| 629 | i2c_register_board_info(0, dns323ab_i2c_devices, | 629 | i2c_register_board_info(0, dns323ab_i2c_devices, |
| 630 | ARRAY_SIZE(dns323ab_i2c_devices)); | 630 | ARRAY_SIZE(dns323ab_i2c_devices)); |
| @@ -46,7 +46,7 @@ static int __init parse_tag_acorn(const struct tag *tag) · 45 unmodified lines | |||
| 46 | switch (tag->u.acorn.vram_pages) { | 46 | switch (tag->u.acorn.vram_pages) { |
| 47 | case 512: | 47 | case 512: |
| 48 | vram_size += PAGE_SIZE * 256; | 48 | vram_size += PAGE_SIZE * 256; |
| 49 | /* Fall through - ??? */ | 49 | fallthrough; /* ??? */ |
| 50 | case 256: | 50 | case 256: |
| 51 | vram_size += PAGE_SIZE * 256; | 51 | vram_size += PAGE_SIZE * 256; |
| 52 | default: | 52 | default: |
| @@ -70,7 +70,7 @@ static void __init tegra_cpu_reset_handler_enable(void) · 69 unmodified lines | |||
| 70 | switch (err) { | 70 | switch (err) { |
| 71 | case -ENOSYS: | 71 | case -ENOSYS: |
| 72 | tegra_cpu_reset_handler_set(reset_address); | 72 | tegra_cpu_reset_handler_set(reset_address); |
| 73 | /* fall through */ | 73 | fallthrough; |
| 74 | case 0: | 74 | case 0: |
| 75 | is_enabled = true; | 75 | is_enabled = true; |
| 76 | break; | 76 | break; |
| @@ -694,7 +694,7 @@ thumb2arm(u16 tinstr) · 693 unmodified lines | |||
| 694 | return subset[(L<<1) | ((tinstr & (1<<8)) >> 8)] | | 694 | return subset[(L<<1) | ((tinstr & (1<<8)) >> 8)] | |
| 695 | (tinstr & 255); /* register_list */ | 695 | (tinstr & 255); /* register_list */ |
| 696 | } | 696 | } |
| 697 | /* Else, fall through - for illegal instruction case */ | 697 | fallthrough; /* for illegal instruction case */ |
| 698 | 698 | ||
| 699 | default: | 699 | default: |
| 700 | return BAD_INSTR; | 700 | return BAD_INSTR; |
| @@ -750,7 +750,7 @@ do_alignment_t32_to_handler(u32 *pinstr, struct pt_regs *regs, · 49 unmodified lines | |||
| 750 | case 0xe8e0: | 750 | case 0xe8e0: |
| 751 | case 0xe9e0: | 751 | case 0xe9e0: |
| 752 | poffset->un = (tinst2 & 0xff) << 2; | 752 | poffset->un = (tinst2 & 0xff) << 2; |
| 753 | /* Fall through */ | 753 | fallthrough; |
| 754 | 754 | ||
| 755 | case 0xe940: | 755 | case 0xe940: |
| 756 | case 0xe9c0: | 756 | case 0xe9c0: |
| @@ -71,7 +71,7 @@ static void cpu_v7_spectre_init(void) · 70 unmodified lines | |||
| 71 | /* Other ARM CPUs require no workaround */ | 71 | /* Other ARM CPUs require no workaround */ |
| 72 | if (read_cpuid_implementor() == ARM_CPU_IMP_ARM) | 72 | if (read_cpuid_implementor() == ARM_CPU_IMP_ARM) |
| 73 | break; | 73 | break; |
| 74 | /* fallthrough */ | 74 | fallthrough; |
| 75 | /* Cortex A57/A72 require firmware workaround */ | 75 | /* Cortex A57/A72 require firmware workaround */ |
| 76 | case ARM_CPU_PART_CORTEX_A57: | 76 | case ARM_CPU_PART_CORTEX_A57: |
| 77 | case ARM_CPU_PART_CORTEX_A72: { | 77 | case ARM_CPU_PART_CORTEX_A72: { |
| @@ -309,14 +309,14 @@ void omap_set_dma_src_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) · 308 unmodified lines | |||
| 309 | * not supported by current hardware on OMAP1 | 309 | * not supported by current hardware on OMAP1 |
| 310 | * w |= (0x03 << 7); | 310 | * w |= (0x03 << 7); |
| 311 | */ | 311 | */ |
| 312 | /* fall through */ | 312 | fallthrough; |
| 313 | case OMAP_DMA_DATA_BURST_16: | 313 | case OMAP_DMA_DATA_BURST_16: |
| 314 | if (dma_omap2plus()) { | 314 | if (dma_omap2plus()) { |
| 315 | burst = 0x3; | 315 | burst = 0x3; |
| 316 | break; | 316 | break; |
| 317 | } | 317 | } |
| 318 | /* OMAP1 don't support burst 16 */ | 318 | /* OMAP1 don't support burst 16 */ |
| 319 | /* fall through */ | 319 | fallthrough; |
| 320 | default: | 320 | default: |
| 321 | BUG(); | 321 | BUG(); |
| 322 | } | 322 | } |
| @@ -393,7 +393,7 @@ void omap_set_dma_dest_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) · 70 unmodified lines | |||
| 393 | break; | 393 | break; |
| 394 | } | 394 | } |
| 395 | /* OMAP1 don't support burst 16 */ | 395 | /* OMAP1 don't support burst 16 */ |
| 396 | /* fall through */ | 396 | fallthrough; |
| 397 | default: | 397 | default: |
| 398 | printk(KERN_ERR "Invalid DMA burst mode\n"); | 398 | printk(KERN_ERR "Invalid DMA burst mode\n"); |
| 399 | BUG(); | 399 | BUG(); |
| @@ -307,7 +307,7 @@ static bool __kprobes decode_regs(probes_opcode_t *pinsn, u32 regs, bool modify) · 306 unmodified lines | |||
| 307 | case REG_TYPE_NOPCWB: | 307 | case REG_TYPE_NOPCWB: |
| 308 | if (!is_writeback(insn)) | 308 | if (!is_writeback(insn)) |
| 309 | break; /* No writeback, so any register is OK */ | 309 | break; /* No writeback, so any register is OK */ |
| 310 | /* fall through... */ | 310 | fallthrough; |
| 311 | case REG_TYPE_NOPC: | 311 | case REG_TYPE_NOPC: |
| 312 | case REG_TYPE_NOPCX: | 312 | case REG_TYPE_NOPCX: |
| 313 | /* Reject PC (R15) */ | 313 | /* Reject PC (R15) */ |
| @@ -280,7 +280,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs) · 279 unmodified lines | |||
| 280 | /* A nested probe was hit in FIQ, it is a BUG */ | 280 | /* A nested probe was hit in FIQ, it is a BUG */ |
| 281 | pr_warn("Unrecoverable kprobe detected.\n"); | 281 | pr_warn("Unrecoverable kprobe detected.\n"); |
| 282 | dump_kprobe(p); | 282 | dump_kprobe(p); |
| 283 | /* fall through */ | 283 | fallthrough; |
| 284 | default: | 284 | default: |
| 285 | /* impossible cases */ | 285 | /* impossible cases */ |
| 286 | BUG(); | 286 | BUG(); |
| @@ -82,8 +82,8 @@ endif · 81 unmodified lines | |||
| 82 | # compiler to generate them and consequently to break the single image contract | 82 | # compiler to generate them and consequently to break the single image contract |
| 83 | # we pass it only to the assembler. This option is utilized only in case of non | 83 | # we pass it only to the assembler. This option is utilized only in case of non |
| 84 | # integrated assemblers. | 84 | # integrated assemblers. |
| 85 | ifneq ($(CONFIG_AS_HAS_ARMV8_4), y) | 85 | ifeq ($(CONFIG_AS_HAS_PAC), y) |
| 86 | branch-prot-flags-$(CONFIG_AS_HAS_PAC) += -Wa,-march=armv8.3-a | 86 | asm-arch := armv8.3-a |
| 87 | endif | 87 | endif |
| 88 | endif | 88 | endif |
| 89 | 89 | ||
| @@ -91,7 +91,12 @@ KBUILD_CFLAGS += $(branch-prot-flags-y) · 1 unmodified line | |||
| 91 | 91 | ||
| 92 | ifeq ($(CONFIG_AS_HAS_ARMV8_4), y) | 92 | ifeq ($(CONFIG_AS_HAS_ARMV8_4), y) |
| 93 | # make sure to pass the newest target architecture to -march. | 93 | # make sure to pass the newest target architecture to -march. |
| 94 | KBUILD_CFLAGS += -Wa,-march=armv8.4-a | 94 | asm-arch := armv8.4-a |
| 95 | endif | ||
| 96 | |||
| 97 | ifdef asm-arch | ||
| 98 | KBUILD_CFLAGS += -Wa,-march=$(asm-arch) \ | ||
| 99 | -DARM64_ASM_ARCH='"$(asm-arch)"' | ||
| 95 | endif | 100 | endif |
| 96 | 101 | ||
| 97 | ifeq ($(CONFIG_SHADOW_CALL_STACK), y) | 102 | ifeq ($(CONFIG_SHADOW_CALL_STACK), y) |
| @@ -165,6 +170,8 @@ zinstall install: · 67 unmodified lines | |||
| 165 | PHONY += vdso_install | 170 | PHONY += vdso_install |
| 166 | vdso_install: | 171 | vdso_install: |
| 167 | $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ | 172 | $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ |
| 173 | $(if $(CONFIG_COMPAT_VDSO), \ | ||
| 174 | $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@) | ||
| 168 | 175 | ||
| 169 | # We use MRPROPER_FILES and CLEAN_FILES now | 176 | # We use MRPROPER_FILES and CLEAN_FILES now |
| 170 | archclean: | 177 | archclean: |
| @@ -417,10 +417,10 @@ · 416 unmodified lines | |||
| 417 | ti,intr-trigger-type = <1>; | 417 | ti,intr-trigger-type = <1>; |
| 418 | interrupt-controller; | 418 | interrupt-controller; |
| 419 | interrupt-parent = <&gic500>; | 419 | interrupt-parent = <&gic500>; |
| 420 | #interrupt-cells = <2>; | 420 | #interrupt-cells = <1>; |
| 421 | ti,sci = <&dmsc>; | 421 | ti,sci = <&dmsc>; |
| 422 | ti,sci-dst-id = <56>; | 422 | ti,sci-dev-id = <100>; |
| 423 | ti,sci-rm-range-girq = <0x1>; | 423 | ti,interrupt-ranges = <0 392 32>; |
| 424 | }; | 424 | }; |
| 425 | 425 | ||
| 426 | main_navss { | 426 | main_navss { |
| @@ -438,10 +438,11 @@ · 11 unmodified lines | |||
| 438 | ti,intr-trigger-type = <4>; | 438 | ti,intr-trigger-type = <4>; |
| 439 | interrupt-controller; | 439 | interrupt-controller; |
| 440 | interrupt-parent = <&gic500>; | 440 | interrupt-parent = <&gic500>; |
| 441 | #interrupt-cells = <2>; | 441 | #interrupt-cells = <1>; |
| 442 | ti,sci = <&dmsc>; | 442 | ti,sci = <&dmsc>; |
| 443 | ti,sci-dst-id = <56>; | 443 | ti,sci-dev-id = <182>; |
| 444 | ti,sci-rm-range-girq = <0x0>, <0x2>; | 444 | ti,interrupt-ranges = <0 64 64>, |
| 445 | <64 448 64>; | ||
| 445 | }; | 446 | }; |
| 446 | 447 | ||
| 447 | inta_main_udmass: interrupt-controller@33d00000 { | 448 | inta_main_udmass: interrupt-controller@33d00000 { |
| @@ -452,8 +453,7 @@ · 4 unmodified lines | |||
| 452 | msi-controller; | 453 | msi-controller; |
| 453 | ti,sci = <&dmsc>; | 454 | ti,sci = <&dmsc>; |
| 454 | ti,sci-dev-id = <179>; | 455 | ti,sci-dev-id = <179>; |
| 455 | ti,sci-rm-range-vint = <0x0>; | 456 | ti,interrupt-ranges = <0 0 256>; |
| 456 | ti,sci-rm-range-global-event = <0x1>; | ||
| 457 | }; | 457 | }; |
| 458 | 458 | ||
| 459 | secure_proxy_main: mailbox@32c00000 { | 459 | secure_proxy_main: mailbox@32c00000 { |
| @@ -589,7 +589,7 @@ · 129 unmodified lines | |||
| 589 | <0x0 0x33000000 0x0 0x40000>; | 589 | <0x0 0x33000000 0x0 0x40000>; |
| 590 | reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target"; | 590 | reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target"; |
| 591 | ti,num-rings = <818>; | 591 | ti,num-rings = <818>; |
| 592 | ti,sci-rm-range-gp-rings = <0x2>; /* GP ring range */ | 592 | ti,sci-rm-range-gp-rings = <0x1>; /* GP ring range */ |
| 593 | ti,dma-ring-reset-quirk; | 593 | ti,dma-ring-reset-quirk; |
| 594 | ti,sci = <&dmsc>; | 594 | ti,sci = <&dmsc>; |
| 595 | ti,sci-dev-id = <187>; | 595 | ti,sci-dev-id = <187>; |
| @@ -609,11 +609,11 @@ · 13 unmodified lines | |||
| 609 | ti,sci-dev-id = <188>; | 609 | ti,sci-dev-id = <188>; |
| 610 | ti,ringacc = <&ringacc>; | 610 | ti,ringacc = <&ringacc>; |
| 611 | 611 | ||
| 612 | ti,sci-rm-range-tchan = <0x1>, /* TX_HCHAN */ | 612 | ti,sci-rm-range-tchan = <0xf>, /* TX_HCHAN */ |
| 613 | <0x2>; /* TX_CHAN */ | 613 | <0xd>; /* TX_CHAN */ |
| 614 | ti,sci-rm-range-rchan = <0x4>, /* RX_HCHAN */ | 614 | ti,sci-rm-range-rchan = <0xb>, /* RX_HCHAN */ |
| 615 | <0x5>; /* RX_CHAN */ | 615 | <0xa>; /* RX_CHAN */ |
| 616 | ti,sci-rm-range-rflow = <0x6>; /* GP RFLOW */ | 616 | ti,sci-rm-range-rflow = <0x0>; /* GP RFLOW */ |
| 617 | }; | 617 | }; |
| 618 | 618 | ||
| 619 | cpts@310d0000 { | 619 | cpts@310d0000 { |
| @@ -622,7 +622,7 @@ · 2 unmodified lines | |||
| 622 | reg-names = "cpts"; | 622 | reg-names = "cpts"; |
| 623 | clocks = <&main_cpts_mux>; | 623 | clocks = <&main_cpts_mux>; |
| 624 | clock-names = "cpts"; | 624 | clock-names = "cpts"; |
| 625 | interrupts-extended = <&intr_main_navss 163 0>; | 625 | interrupts-extended = <&intr_main_navss 391>; |
| 626 | interrupt-names = "cpts"; | 626 | interrupt-names = "cpts"; |
| 627 | ti,cpts-periodic-outputs = <6>; | 627 | ti,cpts-periodic-outputs = <6>; |
| 628 | ti,cpts-ext-ts-inputs = <8>; | 628 | ti,cpts-ext-ts-inputs = <8>; |
| @@ -645,8 +645,7 @@ · 16 unmodified lines | |||
| 645 | gpio-controller; | 645 | gpio-controller; |
| 646 | #gpio-cells = <2>; | 646 | #gpio-cells = <2>; |
| 647 | interrupt-parent = <&intr_main_gpio>; | 647 | interrupt-parent = <&intr_main_gpio>; |
| 648 | interrupts = <57 256>, <57 257>, <57 258>, <57 259>, <57 260>, | 648 | interrupts = <192>, <193>, <194>, <195>, <196>, <197>; |
| 649 | <57 261>; | ||
| 650 | interrupt-controller; | 649 | interrupt-controller; |
| 651 | #interrupt-cells = <2>; | 650 | #interrupt-cells = <2>; |
| 652 | ti,ngpio = <96>; | 651 | ti,ngpio = <96>; |
| @@ -661,8 +660,7 @@ · 8 unmodified lines | |||
| 661 | gpio-controller; | 660 | gpio-controller; |
| 662 | #gpio-cells = <2>; | 661 | #gpio-cells = <2>; |
| 663 | interrupt-parent = <&intr_main_gpio>; | 662 | interrupt-parent = <&intr_main_gpio>; |
| 664 | interrupts = <58 256>, <58 257>, <58 258>, <58 259>, <58 260>, | 663 | interrupts = <200>, <201>, <202>, <203>, <204>, <205>; |
| 665 | <58 261>; | ||
| 666 | interrupt-controller; | 664 | interrupt-controller; |
| 667 | #interrupt-cells = <2>; | 665 | #interrupt-cells = <2>; |
| 668 | ti,ngpio = <90>; | 666 | ti,ngpio = <90>; |
| @@ -134,7 +134,7 @@ · 133 unmodified lines | |||
| 134 | <0x0 0x2a500000 0x0 0x40000>; | 134 | <0x0 0x2a500000 0x0 0x40000>; |
| 135 | reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target"; | 135 | reg-names = "rt", "fifos", "proxy_gcfg", "proxy_target"; |
| 136 | ti,num-rings = <286>; | 136 | ti,num-rings = <286>; |
| 137 | ti,sci-rm-range-gp-rings = <0x2>; /* GP ring range */ | 137 | ti,sci-rm-range-gp-rings = <0x1>; /* GP ring range */ |
| 138 | ti,dma-ring-reset-quirk; | 138 | ti,dma-ring-reset-quirk; |
| 139 | ti,sci = <&dmsc>; | 139 | ti,sci = <&dmsc>; |
| 140 | ti,sci-dev-id = <195>; | 140 | ti,sci-dev-id = <195>; |
| @@ -154,11 +154,11 @@ · 13 unmodified lines | |||
| 154 | ti,sci-dev-id = <194>; | 154 | ti,sci-dev-id = <194>; |
| 155 | ti,ringacc = <&mcu_ringacc>; | 155 | ti,ringacc = <&mcu_ringacc>; |
| 156 | 156 | ||
| 157 | ti,sci-rm-range-tchan = <0x1>, /* TX_HCHAN */ | 157 | ti,sci-rm-range-tchan = <0xf>, /* TX_HCHAN */ |
| 158 | <0x2>; /* TX_CHAN */ | 158 | <0xd>; /* TX_CHAN */ |
| 159 | ti,sci-rm-range-rchan = <0x3>, /* RX_HCHAN */ | 159 | ti,sci-rm-range-rchan = <0xb>, /* RX_HCHAN */ |
| 160 | <0x4>; /* RX_CHAN */ | 160 | <0xa>; /* RX_CHAN */ |
| 161 | ti,sci-rm-range-rflow = <0x5>; /* GP RFLOW */ | 161 | ti,sci-rm-range-rflow = <0x0>; /* GP RFLOW */ |
| 162 | }; | 162 | }; |
| 163 | }; | 163 | }; |
| 164 | 164 | ||
| @@ -74,10 +74,10 @@ · 73 unmodified lines | |||
| 74 | ti,intr-trigger-type = <1>; | 74 | ti,intr-trigger-type = <1>; |
| 75 | interrupt-controller; | 75 | interrupt-controller; |
| 76 | interrupt-parent = <&gic500>; | 76 | interrupt-parent = <&gic500>; |
| 77 | #interrupt-cells = <2>; | 77 | #interrupt-cells = <1>; |
| 78 | ti,sci = <&dmsc>; | 78 | ti,sci = <&dmsc>; |
| 79 | ti,sci-dst-id = <56>; | 79 | ti,sci-dev-id = <156>; |
| 80 | ti,sci-rm-range-girq = <0x4>; | 80 | ti,interrupt-ranges = <0 712 16>; |
| 81 | }; | 81 | }; |
| 82 | 82 | ||
| 83 | wkup_gpio0: wkup_gpio0@42110000 { | 83 | wkup_gpio0: wkup_gpio0@42110000 { |
| @@ -86,7 +86,7 @@ · 2 unmodified lines | |||
| 86 | gpio-controller; | 86 | gpio-controller; |
| 87 | #gpio-cells = <2>; | 87 | #gpio-cells = <2>; |
| 88 | interrupt-parent = <&intr_wkup_gpio>; | 88 | interrupt-parent = <&intr_wkup_gpio>; |
| 89 | interrupts = <59 128>, <59 129>, <59 130>, <59 131>; | 89 | interrupts = <60>, <61>, <62>, <63>; |
| 90 | interrupt-controller; | 90 | interrupt-controller; |
| 91 | #interrupt-cells = <2>; | 91 | #interrupt-cells = <2>; |
| 92 | ti,ngpio = <56>; | 92 | ti,ngpio = <56>; |
| @@ -384,7 +384,7 @@ · 383 unmodified lines | |||
| 384 | }; | 384 | }; |
| 385 | 385 | ||
| 386 | &mailbox0_cluster0 { | 386 | &mailbox0_cluster0 { |
| 387 | interrupts = <164 0>; | 387 | interrupts = <436>; |
| 388 | 388 | ||
| 389 | mbox_mcu_r5fss0_core0: mbox-mcu-r5fss0-core0 { | 389 | mbox_mcu_r5fss0_core0: mbox-mcu-r5fss0-core0 { |
| 390 | ti,mbox-tx = <1 0 0>; | 390 | ti,mbox-tx = <1 0 0>; |
| @@ -393,7 +393,7 @@ · 2 unmodified lines | |||
| 393 | }; | 393 | }; |
| 394 | 394 | ||
| 395 | &mailbox0_cluster1 { | 395 | &mailbox0_cluster1 { |
| 396 | interrupts = <165 0>; | 396 | interrupts = <432>; |
| 397 | 397 | ||
| 398 | mbox_mcu_r5fss0_core1: mbox-mcu-r5fss0-core1 { | 398 | mbox_mcu_r5fss0_core1: mbox-mcu-r5fss0-core1 { |
| 399 | ti,mbox-tx = <1 0 0>; | 399 | ti,mbox-tx = <1 0 0>; |
| @@ -287,7 +287,7 @@ · 286 unmodified lines | |||
| 287 | }; | 287 | }; |
| 288 | 288 | ||
| 289 | &mailbox0_cluster0 { | 289 | &mailbox0_cluster0 { |
| 290 | interrupts = <214 0>; | 290 | interrupts = <436>; |
| 291 | 291 | ||
| 292 | mbox_mcu_r5fss0_core0: mbox-mcu-r5fss0-core0 { | 292 | mbox_mcu_r5fss0_core0: mbox-mcu-r5fss0-core0 { |
| 293 | ti,mbox-rx = <0 0 0>; | 293 | ti,mbox-rx = <0 0 0>; |
| @@ -301,7 +301,7 @@ · 7 unmodified lines | |||
| 301 | }; | 301 | }; |
| 302 | 302 | ||
| 303 | &mailbox0_cluster1 { | 303 | &mailbox0_cluster1 { |
| 304 | interrupts = <215 0>; | 304 | interrupts = <432>; |
| 305 | 305 | ||
| 306 | mbox_main_r5fss0_core0: mbox-main-r5fss0-core0 { | 306 | mbox_main_r5fss0_core0: mbox-main-r5fss0-core0 { |
| 307 | ti,mbox-rx = <0 0 0>; | 307 | ti,mbox-rx = <0 0 0>; |
| @@ -315,7 +315,7 @@ · 7 unmodified lines | |||
| 315 | }; | 315 | }; |
| 316 | 316 | ||
| 317 | &mailbox0_cluster2 { | 317 | &mailbox0_cluster2 { |
| 318 | interrupts = <216 0>; | 318 | interrupts = <428>; |
| 319 | 319 | ||
| 320 | mbox_main_r5fss1_core0: mbox-main-r5fss1-core0 { | 320 | mbox_main_r5fss1_core0: mbox-main-r5fss1-core0 { |
| 321 | ti,mbox-rx = <0 0 0>; | 321 | ti,mbox-rx = <0 0 0>; |
| @@ -329,7 +329,7 @@ · 7 unmodified lines | |||
| 329 | }; | 329 | }; |
| 330 | 330 | ||
| 331 | &mailbox0_cluster3 { | 331 | &mailbox0_cluster3 { |
| 332 | interrupts = <217 0>; | 332 | interrupts = <424>; |
| 333 | 333 | ||
| 334 | mbox_c66_0: mbox-c66-0 { | 334 | mbox_c66_0: mbox-c66-0 { |
| 335 | ti,mbox-rx = <0 0 0>; | 335 | ti,mbox-rx = <0 0 0>; |
| @@ -343,7 +343,7 @@ · 7 unmodified lines | |||
| 343 | }; | 343 | }; |
| 344 | 344 | ||
| 345 | &mailbox0_cluster4 { | 345 | &mailbox0_cluster4 { |
| 346 | interrupts = <218 0>; | 346 | interrupts = <420>; |
| 347 | 347 | ||
| 348 | mbox_c71_0: mbox-c71-0 { | 348 | mbox_c71_0: mbox-c71-0 { |
| 349 | ti,mbox-rx = <0 0 0>; | 349 | ti,mbox-rx = <0 0 0>; |
| @@ -80,10 +80,10 @@ · 79 unmodified lines | |||
| 80 | ti,intr-trigger-type = <1>; | 80 | ti,intr-trigger-type = <1>; |
| 81 | interrupt-controller; | 81 | interrupt-controller; |
| 82 | interrupt-parent = <&gic500>; | 82 | interrupt-parent = <&gic500>; |
| 83 | #interrupt-cells = <2>; | 83 | #interrupt-cells = <1>; |
| 84 | ti,sci = <&dmsc>; | 84 | ti,sci = <&dmsc>; |
| 85 | ti,sci-dst-id = <14>; | 85 | ti,sci-dev-id = <131>; |
| 86 | ti,sci-rm-range-girq = <0x1>; | 86 | ti,interrupt-ranges = <8 392 56>; |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
| 89 | main_navss { | 89 | main_navss { |
| @@ -101,10 +101,12 @@ · 11 unmodified lines | |||
| 101 | ti,intr-trigger-type = <4>; | 101 | ti,intr-trigger-type = <4>; |
| 102 | interrupt-controller; | 102 | interrupt-controller; |
| 103 | interrupt-parent = <&gic500>; | 103 | interrupt-parent = <&gic500>; |
| 104 | #interrupt-cells = <2>; | 104 | #interrupt-cells = <1>; |
| 105 | ti,sci = <&dmsc>; | 105 | ti,sci = <&dmsc>; |
| 106 | ti,sci-dst-id = <14>; | 106 | ti,sci-dev-id = <213>; |
| 107 | ti,sci-rm-range-girq = <0>, <2>; | 107 | ti,interrupt-ranges = <0 64 64>, |
| 108 | <64 448 64>, | ||
| 109 | <128 672 64>; | ||
| 108 | }; | 110 | }; |
| 109 | 111 | ||
| 110 | main_udmass_inta: interrupt-controller@33d00000 { | 112 | main_udmass_inta: interrupt-controller@33d00000 { |
| @@ -115,8 +117,7 @@ · 4 unmodified lines | |||
| 115 | msi-controller; | 117 | msi-controller; |
| 116 | ti,sci = <&dmsc>; | 118 | ti,sci = <&dmsc>; |
| 117 | ti,sci-dev-id = <209>; | 119 | ti,sci-dev-id = <209>; |
| 118 | ti,sci-rm-range-vint = <0xa>; | 120 | ti,interrupt-ranges = <0 0 256>; |
| 119 | ti,sci-rm-range-global-event = <0xd>; | ||
| 120 | }; | 121 | }; |
| 121 | 122 | ||
| 122 | secure_proxy_main: mailbox@32c00000 { | 123 | secure_proxy_main: mailbox@32c00000 { |
| @@ -296,7 +297,7 @@ · 173 unmodified lines | |||
| 296 | reg-names = "cpts"; | 297 | reg-names = "cpts"; |
| 297 | clocks = <&k3_clks 201 1>; | 298 | clocks = <&k3_clks 201 1>; |
| 298 | clock-names = "cpts"; | 299 | clock-names = "cpts"; |
| 299 | interrupts-extended = <&main_navss_intr 201 0>; | 300 | interrupts-extended = <&main_navss_intr 391>; |
| 300 | interrupt-names = "cpts"; | 301 | interrupt-names = "cpts"; |
| 301 | ti,cpts-periodic-outputs = <6>; | 302 | ti,cpts-periodic-outputs = <6>; |
| 302 | ti,cpts-ext-ts-inputs = <8>; | 303 | ti,cpts-ext-ts-inputs = <8>; |
| @@ -688,8 +689,8 @@ · 385 unmodified lines | |||
| 688 | gpio-controller; | 689 | gpio-controller; |
| 689 | #gpio-cells = <2>; | 690 | #gpio-cells = <2>; |
| 690 | interrupt-parent = <&main_gpio_intr>; | 691 | interrupt-parent = <&main_gpio_intr>; |
| 691 | interrupts = <105 0>, <105 1>, <105 2>, <105 3>, | 692 | interrupts = <256>, <257>, <258>, <259>, |
| 692 | <105 4>, <105 5>, <105 6>, <105 7>; | 693 | <260>, <261>, <262>, <263>; |
| 693 | interrupt-controller; | 694 | interrupt-controller; |
| 694 | #interrupt-cells = <2>; | 695 | #interrupt-cells = <2>; |
| 695 | ti,ngpio = <128>; | 696 | ti,ngpio = <128>; |
| @@ -705,7 +706,7 @@ · 9 unmodified lines | |||
| 705 | gpio-controller; | 706 | gpio-controller; |
| 706 | #gpio-cells = <2>; | 707 | #gpio-cells = <2>; |
| 707 | interrupt-parent = <&main_gpio_intr>; | 708 | interrupt-parent = <&main_gpio_intr>; |
| 708 | interrupts = <106 0>, <106 1>, <106 2>; | 709 | interrupts = <288>, <289>, <290>; |
| 709 | interrupt-controller; | 710 | interrupt-controller; |
| 710 | #interrupt-cells = <2>; | 711 | #interrupt-cells = <2>; |
| 711 | ti,ngpio = <36>; | 712 | ti,ngpio = <36>; |
| @@ -721,8 +722,8 @@ · 9 unmodified lines | |||
| 721 | gpio-controller; | 722 | gpio-controller; |
| 722 | #gpio-cells = <2>; | 723 | #gpio-cells = <2>; |
| 723 | interrupt-parent = <&main_gpio_intr>; | 724 | interrupt-parent = <&main_gpio_intr>; |
| 724 | interrupts = <107 0>, <107 1>, <107 2>, <107 3>, | 725 | interrupts = <264>, <265>, <266>, <267>, |
| 725 | <107 4>, <107 5>, <107 6>, <107 7>; | 726 | <268>, <269>, <270>, <271>; |
| 726 | interrupt-controller; | 727 | interrupt-controller; |
| 727 | #interrupt-cells = <2>; | 728 | #interrupt-cells = <2>; |
| 728 | ti,ngpio = <128>; | 729 | ti,ngpio = <128>; |
| @@ -738,7 +739,7 @@ · 9 unmodified lines | |||
| 738 | gpio-controller; | 739 | gpio-controller; |
| 739 | #gpio-cells = <2>; | 740 | #gpio-cells = <2>; |
| 740 | interrupt-parent = <&main_gpio_intr>; | 741 | interrupt-parent = <&main_gpio_intr>; |
| 741 | interrupts = <108 0>, <108 1>, <108 2>; | 742 | interrupts = <292>, <293>, <294>; |
| 742 | interrupt-controller; | 743 | interrupt-controller; |
| 743 | #interrupt-cells = <2>; | 744 | #interrupt-cells = <2>; |
| 744 | ti,ngpio = <36>; | 745 | ti,ngpio = <36>; |
| @@ -754,8 +755,8 @@ · 9 unmodified lines | |||
| 754 | gpio-controller; | 755 | gpio-controller; |
| 755 | #gpio-cells = <2>; | 756 | #gpio-cells = <2>; |
| 756 | interrupt-parent = <&main_gpio_intr>; | 757 | interrupt-parent = <&main_gpio_intr>; |
| 757 | interrupts = <109 0>, <109 1>, <109 2>, <109 3>, | 758 | interrupts = <272>, <273>, <274>, <275>, |
| 758 | <109 4>, <109 5>, <109 6>, <109 7>; | 759 | <276>, <277>, <278>, <279>; |
| 759 | interrupt-controller; | 760 | interrupt-controller; |
| 760 | #interrupt-cells = <2>; | 761 | #interrupt-cells = <2>; |
| 761 | ti,ngpio = <128>; | 762 | ti,ngpio = <128>; |
| @@ -771,7 +772,7 @@ · 9 unmodified lines | |||
| 771 | gpio-controller; | 772 | gpio-controller; |
| 772 | #gpio-cells = <2>; | 773 | #gpio-cells = <2>; |
| 773 | interrupt-parent = <&main_gpio_intr>; | 774 | interrupt-parent = <&main_gpio_intr>; |
| 774 | interrupts = <110 0>, <110 1>, <110 2>; | 775 | interrupts = <296>, <297>, <298>; |
| 775 | interrupt-controller; | 776 | interrupt-controller; |
| 776 | #interrupt-cells = <2>; | 777 | #interrupt-cells = <2>; |
| 777 | ti,ngpio = <36>; | 778 | ti,ngpio = <36>; |
| @@ -787,8 +788,8 @@ · 9 unmodified lines | |||
| 787 | gpio-controller; | 788 | gpio-controller; |
| 788 | #gpio-cells = <2>; | 789 | #gpio-cells = <2>; |
| 789 | interrupt-parent = <&main_gpio_intr>; | 790 | interrupt-parent = <&main_gpio_intr>; |
| 790 | interrupts = <111 0>, <111 1>, <111 2>, <111 3>, | 791 | interrupts = <280>, <281>, <282>, <283>, |
| 791 | <111 4>, <111 5>, <111 6>, <111 7>; | 792 | <284>, <285>, <286>, <287>; |
| 792 | interrupt-controller; | 793 | interrupt-controller; |
| 793 | #interrupt-cells = <2>; | 794 | #interrupt-cells = <2>; |
| 794 | ti,ngpio = <128>; | 795 | ti,ngpio = <128>; |
| @@ -804,7 +805,7 @@ · 9 unmodified lines | |||
| 804 | gpio-controller; | 805 | gpio-controller; |
| 805 | #gpio-cells = <2>; | 806 | #gpio-cells = <2>; |
| 806 | interrupt-parent = <&main_gpio_intr>; | 807 | interrupt-parent = <&main_gpio_intr>; |
| 807 | interrupts = <112 0>, <112 1>, <112 2>; | 808 | interrupts = <300>, <301>, <302>; |
| 808 | interrupt-controller; | 809 | interrupt-controller; |
| 809 | #interrupt-cells = <2>; | 810 | #interrupt-cells = <2>; |
| 810 | ti,ngpio = <36>; | 811 | ti,ngpio = <36>; |
| @@ -101,10 +101,10 @@ · 100 unmodified lines | |||
| 101 | ti,intr-trigger-type = <1>; | 101 | ti,intr-trigger-type = <1>; |
| 102 | interrupt-controller; | 102 | interrupt-controller; |
| 103 | interrupt-parent = <&gic500>; | 103 | interrupt-parent = <&gic500>; |
| 104 | #interrupt-cells = <2>; | 104 | #interrupt-cells = <1>; |
| 105 | ti,sci = <&dmsc>; | 105 | ti,sci = <&dmsc>; |
| 106 | ti,sci-dst-id = <14>; | 106 | ti,sci-dev-id = <137>; |
| 107 | ti,sci-rm-range-girq = <0x5>; | 107 | ti,interrupt-ranges = <16 960 16>; |
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | wkup_gpio0: gpio@42110000 { | 110 | wkup_gpio0: gpio@42110000 { |
| @@ -113,8 +113,7 @@ · 2 unmodified lines | |||
| 113 | gpio-controller; | 113 | gpio-controller; |
| 114 | #gpio-cells = <2>; | 114 | #gpio-cells = <2>; |
| 115 | interrupt-parent = <&wkup_gpio_intr>; | 115 | interrupt-parent = <&wkup_gpio_intr>; |
| 116 | interrupts = <113 0>, <113 1>, <113 2>, | 116 | interrupts = <103>, <104>, <105>, <106>, <107>, <108>; |
| 117 | <113 3>, <113 4>, <113 5>; | ||
| 118 | interrupt-controller; | 117 | interrupt-controller; |
| 119 | #interrupt-cells = <2>; | 118 | #interrupt-cells = <2>; |
| 120 | ti,ngpio = <84>; | 119 | ti,ngpio = <84>; |
| @@ -130,8 +129,7 @@ · 9 unmodified lines | |||
| 130 | gpio-controller; | 129 | gpio-controller; |
| 131 | #gpio-cells = <2>; | 130 | #gpio-cells = <2>; |
| 132 | interrupt-parent = <&wkup_gpio_intr>; | 131 | interrupt-parent = <&wkup_gpio_intr>; |
| 133 | interrupts = <114 0>, <114 1>, <114 2>, | 132 | interrupts = <112>, <113>, <114>, <115>, <116>, <117>; |
| 134 | <114 3>, <114 4>, <114 5>; | ||
| 135 | interrupt-controller; | 133 | interrupt-controller; |
| 136 | #interrupt-cells = <2>; | 134 | #interrupt-cells = <2>; |
| 137 | ti,ngpio = <84>; | 135 | ti,ngpio = <84>; |
| @@ -2,6 +2,12 @@ · 1 unmodified line | |||
| 2 | #ifndef __ASM_COMPILER_H | 2 | #ifndef __ASM_COMPILER_H |
| 3 | #define __ASM_COMPILER_H | 3 | #define __ASM_COMPILER_H |
| 4 | 4 | ||
| 5 | #ifdef ARM64_ASM_ARCH | ||
| 6 | #define ARM64_ASM_PREAMBLE ".arch " ARM64_ASM_ARCH "\n" | ||
| 7 | #else | ||
| 8 | #define ARM64_ASM_PREAMBLE | ||
| 9 | #endif | ||
| 10 | |||
| 5 | /* | 11 | /* |
| 6 | * The EL0/EL1 pointer bits used by a pointer authentication code. | 12 | * The EL0/EL1 pointer bits used by a pointer authentication code. |
| 7 | * This is dependent on TBI0/TBI1 being enabled, or bits 63:56 would also apply. | 13 | * This is dependent on TBI0/TBI1 being enabled, or bits 63:56 would also apply. |
| @@ -95,6 +95,11 @@ static inline int arch_irqs_disabled_flags(unsigned long flags) · 94 unmodified lines | |||
| 95 | return res; | 95 | return res; |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | static inline int arch_irqs_disabled(void) | ||
| 99 | { | ||
| 100 | return arch_irqs_disabled_flags(arch_local_save_flags()); | ||
| 101 | } | ||
| 102 | |||
| 98 | static inline unsigned long arch_local_irq_save(void) | 103 | static inline unsigned long arch_local_irq_save(void) |
| 99 | { | 104 | { |
| 100 | unsigned long flags; | 105 | unsigned long flags; |
| @@ -71,11 +71,12 @@ · 70 unmodified lines | |||
| 71 | * IMO: Override CPSR.I and enable signaling with VI | 71 | * IMO: Override CPSR.I and enable signaling with VI |
| 72 | * FMO: Override CPSR.F and enable signaling with VF | 72 | * FMO: Override CPSR.F and enable signaling with VF |
| 73 | * SWIO: Turn set/way invalidates into set/way clean+invalidate | 73 | * SWIO: Turn set/way invalidates into set/way clean+invalidate |
| 74 | * PTW: Take a stage2 fault if a stage1 walk steps in device memory | ||
| 74 | */ | 75 | */ |
| 75 | #define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \ | 76 | #define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \ |
| 76 | HCR_BSU_IS | HCR_FB | HCR_TAC | \ | 77 | HCR_BSU_IS | HCR_FB | HCR_TAC | \ |
| 77 | HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \ | 78 | HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \ |
| 78 | HCR_FMO | HCR_IMO) | 79 | HCR_FMO | HCR_IMO | HCR_PTW ) |
| 79 | #define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF) | 80 | #define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF) |
| 80 | #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK) | 81 | #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK) |
| 81 | #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H) | 82 | #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H) |
| @@ -169,6 +169,34 @@ extern char __smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ]; · 168 unmodified lines | |||
| 169 | *__hyp_this_cpu_ptr(sym); \ | 169 | *__hyp_this_cpu_ptr(sym); \ |
| 170 | }) | 170 | }) |
| 171 | 171 | ||
| 172 | #define __KVM_EXTABLE(from, to) \ | ||
| 173 | " .pushsection __kvm_ex_table, \"a\"\n" \ | ||
| 174 | " .align 3\n" \ | ||
| 175 | " .long (" #from " - .), (" #to " - .)\n" \ | ||
| 176 | " .popsection\n" | ||
| 177 | |||
| 178 | |||
| 179 | #define __kvm_at(at_op, addr) \ | ||
| 180 | ( { \ | ||
| 181 | int __kvm_at_err = 0; \ | ||
| 182 | u64 spsr, elr; \ | ||
| 183 | asm volatile( \ | ||
| 184 | " mrs %1, spsr_el2\n" \ | ||
| 185 | " mrs %2, elr_el2\n" \ | ||
| 186 | "1: at "at_op", %3\n" \ | ||
| 187 | " isb\n" \ | ||
| 188 | " b 9f\n" \ | ||
| 189 | "2: msr spsr_el2, %1\n" \ | ||
| 190 | " msr elr_el2, %2\n" \ | ||
| 191 | " mov %w0, %4\n" \ | ||
| 192 | "9:\n" \ | ||
| 193 | __KVM_EXTABLE(1b, 2b) \ | ||
| 194 | : "+r" (__kvm_at_err), "=&r" (spsr), "=&r" (elr) \ | ||
| 195 | : "r" (addr), "i" (-EFAULT)); \ | ||
| 196 | __kvm_at_err; \ | ||
| 197 | } ) | ||
| 198 | |||
| 199 | |||
| 172 | #else /* __ASSEMBLY__ */ | 200 | #else /* __ASSEMBLY__ */ |
| 173 | 201 | ||
| 174 | .macro hyp_adr_this_cpu reg, sym, tmp | 202 | .macro hyp_adr_this_cpu reg, sym, tmp |
| @@ -193,6 +221,21 @@ extern char __smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ]; · 18 unmodified lines | |||
| 193 | ldr \vcpu, [\ctxt, #HOST_CONTEXT_VCPU] | 221 | ldr \vcpu, [\ctxt, #HOST_CONTEXT_VCPU] |
| 194 | .endm | 222 | .endm |
| 195 | 223 | ||
| 224 | /* | ||
| 225 | * KVM extable for unexpected exceptions. | ||
| 226 | * In the same format _asm_extable, but output to a different section so that | ||
| 227 | * it can be mapped to EL2. The KVM version is not sorted. The caller must | ||
| 228 | * ensure: | ||
| 229 | * x18 has the hypervisor value to allow any Shadow-Call-Stack instrumented | ||
| 230 | * code to write to it, and that SPSR_EL2 and ELR_EL2 are restored by the fixup. | ||
| 231 | */ | ||
| 232 | .macro _kvm_extable, from, to | ||
| 233 | .pushsection __kvm_ex_table, "a" | ||
| 234 | .align 3 | ||
| 235 | .long (\from - .), (\to - .) | ||
| 236 | .popsection | ||
| 237 | .endm | ||
| 238 | |||
| 196 | #endif | 239 | #endif |
| 197 | 240 | ||
| 198 | #endif /* __ARM_KVM_ASM_H__ */ | 241 | #endif /* __ARM_KVM_ASM_H__ */ |
| @@ -473,7 +473,7 @@ int __kvm_arm_vcpu_set_events(struct kvm_vcpu *vcpu, · 472 unmodified lines | |||
| 473 | 473 | ||
| 474 | #define KVM_ARCH_WANT_MMU_NOTIFIER | 474 | #define KVM_ARCH_WANT_MMU_NOTIFIER |
| 475 | int kvm_unmap_hva_range(struct kvm *kvm, | 475 | int kvm_unmap_hva_range(struct kvm *kvm, |
| 476 | unsigned long start, unsigned long end); | 476 | unsigned long start, unsigned long end, unsigned flags); |
| 477 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | 477 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); |
| 478 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); | 478 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); |
| 479 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); | 479 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); |
| @@ -28,14 +28,16 @@ · 27 unmodified lines | |||
| 28 | * not. The macros handles invoking the asm with or without the | 28 | * not. The macros handles invoking the asm with or without the |
| 29 | * register argument as appropriate. | 29 | * register argument as appropriate. |
| 30 | */ | 30 | */ |
| 31 | #define __TLBI_0(op, arg) asm ("tlbi " #op "\n" \ | 31 | #define __TLBI_0(op, arg) asm (ARM64_ASM_PREAMBLE \ |
| 32 | "tlbi " #op "\n" \ | ||
| 32 | ALTERNATIVE("nop\n nop", \ | 33 | ALTERNATIVE("nop\n nop", \ |
| 33 | "dsb ish\n tlbi " #op, \ | 34 | "dsb ish\n tlbi " #op, \ |
| 34 | ARM64_WORKAROUND_REPEAT_TLBI, \ | 35 | ARM64_WORKAROUND_REPEAT_TLBI, \ |
| 35 | CONFIG_ARM64_WORKAROUND_REPEAT_TLBI) \ | 36 | CONFIG_ARM64_WORKAROUND_REPEAT_TLBI) \ |
| 36 | : : ) | 37 | : : ) |
| 37 | 38 | ||
| 38 | #define __TLBI_1(op, arg) asm ("tlbi " #op ", %0\n" \ | 39 | #define __TLBI_1(op, arg) asm (ARM64_ASM_PREAMBLE \ |
| 40 | "tlbi " #op ", %0\n" \ | ||
| 39 | ALTERNATIVE("nop\n nop", \ | 41 | ALTERNATIVE("nop\n nop", \ |
| 40 | "dsb ish\n tlbi " #op ", %0", \ | 42 | "dsb ish\n tlbi " #op ", %0", \ |
| 41 | ARM64_WORKAROUND_REPEAT_TLBI, \ | 43 | ARM64_WORKAROUND_REPEAT_TLBI, \ |
| @@ -322,7 +322,7 @@ void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size) · 321 unmodified lines | |||
| 322 | */ | 322 | */ |
| 323 | if (memblock_is_map_memory(phys)) | 323 | if (memblock_is_map_memory(phys)) |
| 324 | return (void __iomem *)__phys_to_virt(phys); | 324 | return (void __iomem *)__phys_to_virt(phys); |
| 325 | /* fall through */ | 325 | fallthrough; |
| 326 | 326 | ||
| 327 | default: | 327 | default: |
| 328 | if (region->attribute & EFI_MEMORY_WB) | 328 | if (region->attribute & EFI_MEMORY_WB) |
| @@ -910,6 +910,8 @@ const struct arm64_cpu_capabilities arm64_errata[] = { · 909 unmodified lines | |||
| 910 | .desc = "ARM erratum 1418040", | 910 | .desc = "ARM erratum 1418040", |
| 911 | .capability = ARM64_WORKAROUND_1418040, | 911 | .capability = ARM64_WORKAROUND_1418040, |
| 912 | ERRATA_MIDR_RANGE_LIST(erratum_1418040_list), | 912 | ERRATA_MIDR_RANGE_LIST(erratum_1418040_list), |
| 913 | .type = (ARM64_CPUCAP_SCOPE_LOCAL_CPU | | ||
| 914 | ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU), | ||
| 913 | }, | 915 | }, |
| 914 | #endif | 916 | #endif |
| 915 | #ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT | 917 | #ifdef CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT |
| @@ -686,7 +686,7 @@ static s64 arm64_ftr_safe_value(const struct arm64_ftr_bits *ftrp, s64 new, · 685 unmodified lines | |||
| 686 | case FTR_HIGHER_OR_ZERO_SAFE: | 686 | case FTR_HIGHER_OR_ZERO_SAFE: |
| 687 | if (!cur || !new) | 687 | if (!cur || !new) |
| 688 | break; | 688 | break; |
| 689 | /* Fallthrough */ | 689 | fallthrough; |
| 690 | case FTR_HIGHER_SAFE: | 690 | case FTR_HIGHER_SAFE: |
| 691 | ret = new > cur ? new : cur; | 691 | ret = new > cur ? new : cur; |
| 692 | break; | 692 | break; |
| @@ -327,7 +327,6 @@ static void cpuinfo_detect_icache_policy(struct cpuinfo_arm64 *info) · 326 unmodified lines | |||
| 327 | set_bit(ICACHEF_VPIPT, &__icache_flags); | 327 | set_bit(ICACHEF_VPIPT, &__icache_flags); |
| 328 | break; | 328 | break; |
| 329 | default: | 329 | default: |
| 330 | /* Fallthrough */ | ||
| 331 | case ICACHE_POLICY_VIPT: | 330 | case ICACHE_POLICY_VIPT: |
| 332 | /* Assume aliasing */ | 331 | /* Assume aliasing */ |
| 333 | set_bit(ICACHEF_ALIASING, &__icache_flags); | 332 | set_bit(ICACHEF_ALIASING, &__icache_flags); |
| @@ -170,19 +170,6 @@ alternative_cb_end · 169 unmodified lines | |||
| 170 | stp x28, x29, [sp, #16 * 14] | 170 | stp x28, x29, [sp, #16 * 14] |
| 171 | 171 | ||
| 172 | .if \el == 0 | 172 | .if \el == 0 |
| 173 | .if \regsize == 32 | ||
| 174 | /* | ||
| 175 | * If we're returning from a 32-bit task on a system affected by | ||
| 176 | * 1418040 then re-enable userspace access to the virtual counter. | ||
| 177 | */ | ||
| 178 | #ifdef CONFIG_ARM64_ERRATUM_1418040 | ||
| 179 | alternative_if ARM64_WORKAROUND_1418040 | ||
| 180 | mrs x0, cntkctl_el1 | ||
| 181 | orr x0, x0, #2 // ARCH_TIMER_USR_VCT_ACCESS_EN | ||
| 182 | msr cntkctl_el1, x0 | ||
| 183 | alternative_else_nop_endif | ||
| 184 | #endif | ||
| 185 | .endif | ||
| 186 | clear_gp_regs | 173 | clear_gp_regs |
| 187 | mrs x21, sp_el0 | 174 | mrs x21, sp_el0 |
| 188 | ldr_this_cpu tsk, __entry_task, x20 | 175 | ldr_this_cpu tsk, __entry_task, x20 |
| @@ -294,14 +281,6 @@ alternative_else_nop_endif · 105 unmodified lines | |||
| 294 | tst x22, #PSR_MODE32_BIT // native task? | 281 | tst x22, #PSR_MODE32_BIT // native task? |
| 295 | b.eq 3f | 282 | b.eq 3f |
| 296 | 283 | ||
| 297 | #ifdef CONFIG_ARM64_ERRATUM_1418040 | ||
| 298 | alternative_if ARM64_WORKAROUND_1418040 | ||
| 299 | mrs x0, cntkctl_el1 | ||
| 300 | bic x0, x0, #2 // ARCH_TIMER_USR_VCT_ACCESS_EN | ||
| 301 | msr cntkctl_el1, x0 | ||
| 302 | alternative_else_nop_endif | ||
| 303 | #endif | ||
| 304 | |||
| 305 | #ifdef CONFIG_ARM64_ERRATUM_845719 | 284 | #ifdef CONFIG_ARM64_ERRATUM_845719 |
| 306 | alternative_if ARM64_WORKAROUND_845719 | 285 | alternative_if ARM64_WORKAROUND_845719 |
| 307 | #ifdef CONFIG_PID_IN_CONTEXTIDR | 286 | #ifdef CONFIG_PID_IN_CONTEXTIDR |
| @@ -257,7 +257,7 @@ static int hw_breakpoint_control(struct perf_event *bp, · 256 unmodified lines | |||
| 257 | * level. | 257 | * level. |
| 258 | */ | 258 | */ |
| 259 | enable_debug_monitors(dbg_el); | 259 | enable_debug_monitors(dbg_el); |
| 260 | /* Fall through */ | 260 | fallthrough; |
| 261 | case HW_BREAKPOINT_RESTORE: | 261 | case HW_BREAKPOINT_RESTORE: |
| 262 | /* Setup the address register. */ | 262 | /* Setup the address register. */ |
| 263 | write_wb_reg(val_reg, i, info->address); | 263 | write_wb_reg(val_reg, i, info->address); |
| @@ -541,13 +541,13 @@ int hw_breakpoint_arch_parse(struct perf_event *bp, · 277 unmodified lines | |||
| 541 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2) | 541 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_2) |
| 542 | break; | 542 | break; |
| 543 | 543 | ||
| 544 | /* Fallthrough */ | 544 | fallthrough; |
| 545 | case 3: | 545 | case 3: |
| 546 | /* Allow single byte watchpoint. */ | 546 | /* Allow single byte watchpoint. */ |
| 547 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1) | 547 | if (hw->ctrl.len == ARM_BREAKPOINT_LEN_1) |
| 548 | break; | 548 | break; |
| 549 | 549 | ||
| 550 | /* Fallthrough */ | 550 | fallthrough; |
| 551 | default: | 551 | default: |
| 552 | return -EINVAL; | 552 | return -EINVAL; |
| 553 | } | 553 | } |
| @@ -103,6 +103,10 @@ KVM_NVHE_ALIAS(vgic_v3_cpuif_trap); · 102 unmodified lines | |||
| 103 | KVM_NVHE_ALIAS(gic_pmr_sync); | 103 | KVM_NVHE_ALIAS(gic_pmr_sync); |
| 104 | #endif | 104 | #endif |
| 105 | 105 | ||
| 106 | /* EL2 exception handling */ | ||
| 107 | KVM_NVHE_ALIAS(__start___kvm_ex_table); | ||
| 108 | KVM_NVHE_ALIAS(__stop___kvm_ex_table); | ||
| 109 | |||
| 106 | #endif /* CONFIG_KVM */ | 110 | #endif /* CONFIG_KVM */ |
| 107 | 111 | ||
| 108 | #endif /* __ARM64_KERNEL_IMAGE_VARS_H */ | 112 | #endif /* __ARM64_KERNEL_IMAGE_VARS_H */ |
| @@ -315,21 +315,21 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, · 314 unmodified lines | |||
| 315 | /* MOVW instruction relocations. */ | 315 | /* MOVW instruction relocations. */ |
| 316 | case R_AARCH64_MOVW_UABS_G0_NC: | 316 | case R_AARCH64_MOVW_UABS_G0_NC: |
| 317 | overflow_check = false; | 317 | overflow_check = false; |
| 318 | /* Fall through */ | 318 | fallthrough; |
| 319 | case R_AARCH64_MOVW_UABS_G0: | 319 | case R_AARCH64_MOVW_UABS_G0: |
| 320 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 0, | 320 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 0, |
| 321 | AARCH64_INSN_IMM_MOVKZ); | 321 | AARCH64_INSN_IMM_MOVKZ); |
| 322 | break; | 322 | break; |
| 323 | case R_AARCH64_MOVW_UABS_G1_NC: | 323 | case R_AARCH64_MOVW_UABS_G1_NC: |
| 324 | overflow_check = false; | 324 | overflow_check = false; |
| 325 | /* Fall through */ | 325 | fallthrough; |
| 326 | case R_AARCH64_MOVW_UABS_G1: | 326 | case R_AARCH64_MOVW_UABS_G1: |
| 327 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 16, | 327 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 16, |
| 328 | AARCH64_INSN_IMM_MOVKZ); | 328 | AARCH64_INSN_IMM_MOVKZ); |
| 329 | break; | 329 | break; |
| 330 | case R_AARCH64_MOVW_UABS_G2_NC: | 330 | case R_AARCH64_MOVW_UABS_G2_NC: |
| 331 | overflow_check = false; | 331 | overflow_check = false; |
| 332 | /* Fall through */ | 332 | fallthrough; |
| 333 | case R_AARCH64_MOVW_UABS_G2: | 333 | case R_AARCH64_MOVW_UABS_G2: |
| 334 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 32, | 334 | ovf = reloc_insn_movw(RELOC_OP_ABS, loc, val, 32, |
| 335 | AARCH64_INSN_IMM_MOVKZ); | 335 | AARCH64_INSN_IMM_MOVKZ); |
| @@ -397,7 +397,7 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, · 61 unmodified lines | |||
| 397 | break; | 397 | break; |
| 398 | case R_AARCH64_ADR_PREL_PG_HI21_NC: | 398 | case R_AARCH64_ADR_PREL_PG_HI21_NC: |
| 399 | overflow_check = false; | 399 | overflow_check = false; |
| 400 | /* Fall through */ | 400 | fallthrough; |
| 401 | case R_AARCH64_ADR_PREL_PG_HI21: | 401 | case R_AARCH64_ADR_PREL_PG_HI21: |
| 402 | ovf = reloc_insn_adrp(me, sechdrs, loc, val); | 402 | ovf = reloc_insn_adrp(me, sechdrs, loc, val); |
| 403 | if (ovf && ovf != -ERANGE) | 403 | if (ovf && ovf != -ERANGE) |
| @@ -123,10 +123,8 @@ void arch_cpu_idle(void) · 122 unmodified lines | |||
| 123 | * This should do all the clock switching and wait for interrupt | 123 | * This should do all the clock switching and wait for interrupt |
| 124 | * tricks | 124 | * tricks |
| 125 | */ | 125 | */ |
| 126 | trace_cpu_idle_rcuidle(1, smp_processor_id()); | ||
| 127 | cpu_do_idle(); | 126 | cpu_do_idle(); |
| 128 | local_irq_enable(); | 127 | local_irq_enable(); |
| 129 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); | ||
| 130 | } | 128 | } |
| 131 | 129 | ||
| 132 | #ifdef CONFIG_HOTPLUG_CPU | 130 | #ifdef CONFIG_HOTPLUG_CPU |
| @@ -515,6 +513,39 @@ static void entry_task_switch(struct task_struct *next) · 382 unmodified lines | |||
| 515 | __this_cpu_write(__entry_task, next); | 513 | __this_cpu_write(__entry_task, next); |
| 516 | } | 514 | } |
| 517 | 515 | ||
| 516 | /* | ||
| 517 | * ARM erratum 1418040 handling, affecting the 32bit view of CNTVCT. | ||
| 518 | * Assuming the virtual counter is enabled at the beginning of times: | ||
| 519 | * | ||
| 520 | * - disable access when switching from a 64bit task to a 32bit task | ||
| 521 | * - enable access when switching from a 32bit task to a 64bit task | ||
| 522 | */ | ||
| 523 | static void erratum_1418040_thread_switch(struct task_struct *prev, | ||
| 524 | struct task_struct *next) | ||
| 525 | { | ||
| 526 | bool prev32, next32; | ||
| 527 | u64 val; | ||
| 528 | |||
| 529 | if (!(IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040) && | ||
| 530 | cpus_have_const_cap(ARM64_WORKAROUND_1418040))) | ||
| 531 | return; | ||
| 532 | |||
| 533 | prev32 = is_compat_thread(task_thread_info(prev)); | ||
| 534 | next32 = is_compat_thread(task_thread_info(next)); | ||
| 535 | |||
| 536 | if (prev32 == next32) | ||
| 537 | return; | ||
| 538 | |||
| 539 | val = read_sysreg(cntkctl_el1); | ||
| 540 | |||
| 541 | if (!next32) | ||
| 542 | val |= ARCH_TIMER_USR_VCT_ACCESS_EN; | ||
| 543 | else | ||
| 544 | val &= ~ARCH_TIMER_USR_VCT_ACCESS_EN; | ||
| 545 | |||
| 546 | write_sysreg(val, cntkctl_el1); | ||
| 547 | } | ||
| 548 | |||
| 518 | /* | 549 | /* |
| 519 | * Thread switching. | 550 | * Thread switching. |
| 520 | */ | 551 | */ |
| @@ -530,6 +561,7 @@ __notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev, · 9 unmodified lines | |||
| 530 | entry_task_switch(next); | 561 | entry_task_switch(next); |
| 531 | uao_thread_switch(next); | 562 | uao_thread_switch(next); |
| 532 | ssbs_thread_switch(next); | 563 | ssbs_thread_switch(next); |
| 564 | erratum_1418040_thread_switch(prev, next); | ||
| 533 | 565 | ||
| 534 | /* | 566 | /* |
| 535 | * Complete any pending TLB or cache maintenance on this CPU in case | 567 | * Complete any pending TLB or cache maintenance on this CPU in case |
| @@ -151,7 +151,7 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle) · 150 unmodified lines | |||
| 151 | break; | 151 | break; |
| 152 | } | 152 | } |
| 153 | pr_crit("CPU%u: may not have shut down cleanly\n", cpu); | 153 | pr_crit("CPU%u: may not have shut down cleanly\n", cpu); |
| 154 | /* Fall through */ | 154 | fallthrough; |
| 155 | case CPU_STUCK_IN_KERNEL: | 155 | case CPU_STUCK_IN_KERNEL: |
| 156 | pr_crit("CPU%u: is stuck in kernel\n", cpu); | 156 | pr_crit("CPU%u: is stuck in kernel\n", cpu); |
| 157 | if (status & CPU_STUCK_REASON_52_BIT_VA) | 157 | if (status & CPU_STUCK_REASON_52_BIT_VA) |
| @@ -208,7 +208,7 @@ quiet_cmd_vdsosym = VDSOSYM $@ · 207 unmodified lines | |||
| 208 | cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ | 208 | cmd_vdsosym = $(NM) $< | $(gen-vdsosym) | LC_ALL=C sort > $@ |
| 209 | 209 | ||
| 210 | # Install commands for the unstripped file | 210 | # Install commands for the unstripped file |
| 211 | quiet_cmd_vdso_install = INSTALL $@ | 211 | quiet_cmd_vdso_install = INSTALL32 $@ |
| 212 | cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/vdso32.so | 212 | cmd_vdso_install = cp $(obj)/$@.dbg $(MODLIB)/vdso/vdso32.so |
| 213 | 213 | ||
| 214 | vdso.so: $(obj)/vdso.so.dbg | 214 | vdso.so: $(obj)/vdso.so.dbg |
| @@ -20,6 +20,13 @@ ENTRY(_text) · 19 unmodified lines | |||
| 20 | 20 | ||
| 21 | jiffies = jiffies_64; | 21 | jiffies = jiffies_64; |
| 22 | 22 | ||
| 23 | |||
| 24 | #define HYPERVISOR_EXTABLE \ | ||
| 25 | . = ALIGN(SZ_8); \ | ||
| 26 | __start___kvm_ex_table = .; \ | ||
| 27 | *(__kvm_ex_table) \ | ||
| 28 | __stop___kvm_ex_table = .; | ||
| 29 | |||
| 23 | #define HYPERVISOR_TEXT \ | 30 | #define HYPERVISOR_TEXT \ |
| 24 | /* \ | 31 | /* \ |
| 25 | * Align to 4 KB so that \ | 32 | * Align to 4 KB so that \ |
| @@ -35,6 +42,7 @@ jiffies = jiffies_64; · 9 unmodified lines | |||
| 35 | __hyp_idmap_text_end = .; \ | 42 | __hyp_idmap_text_end = .; \ |
| 36 | __hyp_text_start = .; \ | 43 | __hyp_text_start = .; \ |
| 37 | *(.hyp.text) \ | 44 | *(.hyp.text) \ |
| 45 | HYPERVISOR_EXTABLE \ | ||
| 38 | __hyp_text_end = .; | 46 | __hyp_text_end = .; |
| 39 | 47 | ||
| 40 | #define IDMAP_TEXT \ | 48 | #define IDMAP_TEXT \ |
| @@ -1640,6 +1640,10 @@ int kvm_arch_init(void *opaque) · 1639 unmodified lines | |||
| 1640 | return -ENODEV; | 1640 | return -ENODEV; |
| 1641 | } | 1641 | } |
| 1642 | 1642 | ||
| 1643 | if (cpus_have_final_cap(ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE)) | ||
| 1644 | kvm_info("Guests without required CPU erratum workarounds can deadlock system!\n" \ | ||
| 1645 | "Only trusted guests should be used on this system.\n"); | ||
| 1646 | |||
| 1643 | for_each_online_cpu(cpu) { | 1647 | for_each_online_cpu(cpu) { |
| 1644 | smp_call_function_single(cpu, check_kvm_target_cpu, &ret, 1); | 1648 | smp_call_function_single(cpu, check_kvm_target_cpu, &ret, 1); |
| 1645 | if (ret < 0) { | 1649 | if (ret < 0) { |
| @@ -128,7 +128,7 @@ static int kvm_handle_guest_debug(struct kvm_vcpu *vcpu) · 127 unmodified lines | |||
| 128 | switch (ESR_ELx_EC(esr)) { | 128 | switch (ESR_ELx_EC(esr)) { |
| 129 | case ESR_ELx_EC_WATCHPT_LOW: | 129 | case ESR_ELx_EC_WATCHPT_LOW: |
| 130 | run->debug.arch.far = vcpu->arch.fault.far_el2; | 130 | run->debug.arch.far = vcpu->arch.fault.far_el2; |
| 131 | /* fall through */ | 131 | fallthrough; |
| 132 | case ESR_ELx_EC_SOFTSTP_LOW: | 132 | case ESR_ELx_EC_SOFTSTP_LOW: |
| 133 | case ESR_ELx_EC_BREAKPT_LOW: | 133 | case ESR_ELx_EC_BREAKPT_LOW: |
| 134 | case ESR_ELx_EC_BKPT32: | 134 | case ESR_ELx_EC_BKPT32: |
| @@ -196,20 +196,23 @@ alternative_endif · 195 unmodified lines | |||
| 196 | // This is our single instruction exception window. A pending | 196 | // This is our single instruction exception window. A pending |
| 197 | // SError is guaranteed to occur at the earliest when we unmask | 197 | // SError is guaranteed to occur at the earliest when we unmask |
| 198 | // it, and at the latest just after the ISB. | 198 | // it, and at the latest just after the ISB. |
| 199 | .global abort_guest_exit_start | ||
| 200 | abort_guest_exit_start: | 199 | abort_guest_exit_start: |
| 201 | 200 | ||
| 202 | isb | 201 | isb |
| 203 | 202 | ||
| 204 | .global abort_guest_exit_end | ||
| 205 | abort_guest_exit_end: | 203 | abort_guest_exit_end: |
| 206 | 204 | ||
| 207 | msr daifset, #4 // Mask aborts | 205 | msr daifset, #4 // Mask aborts |
| 206 | ret | ||
| 207 | |||
| 208 | _kvm_extable abort_guest_exit_start, 9997f | ||
| 209 | _kvm_extable abort_guest_exit_end, 9997f | ||
| 210 | 9997: | ||
| 211 | msr daifset, #4 // Mask aborts | ||
| 212 | mov x0, #(1 << ARM_EXIT_WITH_SERROR_BIT) | ||
| 208 | 213 | ||
| 209 | // If the exception took place, restore the EL1 exception | 214 | // restore the EL1 exception context so that we can report some |
| 210 | // context so that we can report some information. | 215 | // information. Merge the exception code with the SError pending bit. |
| 211 | // Merge the exception code with the SError pending bit. | ||
| 212 | tbz x0, #ARM_EXIT_WITH_SERROR_BIT, 1f | ||
| 213 | msr elr_el2, x2 | 216 | msr elr_el2, x2 |
| 214 | msr esr_el2, x3 | 217 | msr esr_el2, x3 |
| 215 | msr spsr_el2, x4 | 218 | msr spsr_el2, x4 |
| @@ -15,6 +15,30 @@ · 14 unmodified lines | |||
| 15 | #include <asm/kvm_mmu.h> | 15 | #include <asm/kvm_mmu.h> |
| 16 | #include <asm/mmu.h> | 16 | #include <asm/mmu.h> |
| 17 | 17 | ||
| 18 | .macro save_caller_saved_regs_vect | ||
| 19 | /* x0 and x1 were saved in the vector entry */ | ||
| 20 | stp x2, x3, [sp, #-16]! | ||
| 21 | stp x4, x5, [sp, #-16]! | ||
| 22 | stp x6, x7, [sp, #-16]! | ||
| 23 | stp x8, x9, [sp, #-16]! | ||
| 24 | stp x10, x11, [sp, #-16]! | ||
| 25 | stp x12, x13, [sp, #-16]! | ||
| 26 | stp x14, x15, [sp, #-16]! | ||
| 27 | stp x16, x17, [sp, #-16]! | ||
| 28 | .endm | ||
| 29 | |||
| 30 | .macro restore_caller_saved_regs_vect | ||
| 31 | ldp x16, x17, [sp], #16 | ||
| 32 | ldp x14, x15, [sp], #16 | ||
| 33 | ldp x12, x13, [sp], #16 | ||
| 34 | ldp x10, x11, [sp], #16 | ||
| 35 | ldp x8, x9, [sp], #16 | ||
| 36 | ldp x6, x7, [sp], #16 | ||
| 37 | ldp x4, x5, [sp], #16 | ||
| 38 | ldp x2, x3, [sp], #16 | ||
| 39 | ldp x0, x1, [sp], #16 | ||
| 40 | .endm | ||
| 41 | |||
| 18 | .text | 42 | .text |
| 19 | 43 | ||
| 20 | .macro do_el2_call | 44 | .macro do_el2_call |
| @@ -143,13 +167,19 @@ el1_error: · 122 unmodified lines | |||
| 143 | b __guest_exit | 167 | b __guest_exit |
| 144 | 168 | ||
| 145 | el2_sync: | 169 | el2_sync: |
| 146 | /* Check for illegal exception return, otherwise panic */ | 170 | /* Check for illegal exception return */ |
| 147 | mrs x0, spsr_el2 | 171 | mrs x0, spsr_el2 |
| 172 | tbnz x0, #20, 1f | ||
| 148 | 173 | ||
| 149 | /* if this was something else, then panic! */ | 174 | save_caller_saved_regs_vect |
| 150 | tst x0, #PSR_IL_BIT | 175 | stp x29, x30, [sp, #-16]! |
| 151 | b.eq __hyp_panic | 176 | bl kvm_unexpected_el2_exception |
| 177 | ldp x29, x30, [sp], #16 | ||
| 178 | restore_caller_saved_regs_vect | ||
| 152 | 179 | ||
| 180 | eret | ||
| 181 | |||
| 182 | 1: | ||
| 153 | /* Let's attempt a recovery from the illegal exception return */ | 183 | /* Let's attempt a recovery from the illegal exception return */ |
| 154 | get_vcpu_ptr x1, x0 | 184 | get_vcpu_ptr x1, x0 |
| 155 | mov x0, #ARM_EXCEPTION_IL | 185 | mov x0, #ARM_EXCEPTION_IL |
| @@ -157,27 +187,14 @@ el2_sync: · 1 unmodified line | |||
| 157 | 187 | ||
| 158 | 188 | ||
| 159 | el2_error: | 189 | el2_error: |
| 160 | ldp x0, x1, [sp], #16 | 190 | save_caller_saved_regs_vect |
| 191 | stp x29, x30, [sp, #-16]! | ||
| 192 | |||
| 193 | bl kvm_unexpected_el2_exception | ||
| 194 | |||
| 195 | ldp x29, x30, [sp], #16 | ||
| 196 | restore_caller_saved_regs_vect | ||
| 161 | 197 | ||
| 162 | /* | ||
| 163 | * Only two possibilities: | ||
| 164 | * 1) Either we come from the exit path, having just unmasked | ||
| 165 | * PSTATE.A: change the return code to an EL2 fault, and | ||
| 166 | * carry on, as we're already in a sane state to handle it. | ||
| 167 | * 2) Or we come from anywhere else, and that's a bug: we panic. | ||
| 168 | * | ||
| 169 | * For (1), x0 contains the original return code and x1 doesn't | ||
| 170 | * contain anything meaningful at that stage. We can reuse them | ||
| 171 | * as temp registers. | ||
| 172 | * For (2), who cares? | ||
| 173 | */ | ||
| 174 | mrs x0, elr_el2 | ||
| 175 | adr x1, abort_guest_exit_start | ||
| 176 | cmp x0, x1 | ||
| 177 | adr x1, abort_guest_exit_end | ||
| 178 | ccmp x0, x1, #4, ne | ||
| 179 | b.ne __hyp_panic | ||
| 180 | mov x0, #(1 << ARM_EXIT_WITH_SERROR_BIT) | ||
| 181 | eret | 198 | eret |
| 182 | sb | 199 | sb |
| 183 | 200 | ||
| @@ -21,70 +21,70 @@ · 20 unmodified lines | |||
| 21 | #define save_debug(ptr,reg,nr) \ | 21 | #define save_debug(ptr,reg,nr) \ |
| 22 | switch (nr) { \ | 22 | switch (nr) { \ |
| 23 | case 15: ptr[15] = read_debug(reg, 15); \ | 23 | case 15: ptr[15] = read_debug(reg, 15); \ |
| 24 | /* Fall through */ \ | 24 | fallthrough; \ |
| 25 | case 14: ptr[14] = read_debug(reg, 14); \ | 25 | case 14: ptr[14] = read_debug(reg, 14); \ |
| 26 | /* Fall through */ \ | 26 | fallthrough; \ |
| 27 | case 13: ptr[13] = read_debug(reg, 13); \ | 27 | case 13: ptr[13] = read_debug(reg, 13); \ |
| 28 | /* Fall through */ \ | 28 | fallthrough; \ |
| 29 | case 12: ptr[12] = read_debug(reg, 12); \ | 29 | case 12: ptr[12] = read_debug(reg, 12); \ |
| 30 | /* Fall through */ \ | 30 | fallthrough; \ |
| 31 | case 11: ptr[11] = read_debug(reg, 11); \ | 31 | case 11: ptr[11] = read_debug(reg, 11); \ |
| 32 | /* Fall through */ \ | 32 | fallthrough; \ |
| 33 | case 10: ptr[10] = read_debug(reg, 10); \ | 33 | case 10: ptr[10] = read_debug(reg, 10); \ |
| 34 | /* Fall through */ \ | 34 | fallthrough; \ |
| 35 | case 9: ptr[9] = read_debug(reg, 9); \ | 35 | case 9: ptr[9] = read_debug(reg, 9); \ |
| 36 | /* Fall through */ \ | 36 | fallthrough; \ |
| 37 | case 8: ptr[8] = read_debug(reg, 8); \ | 37 | case 8: ptr[8] = read_debug(reg, 8); \ |
| 38 | /* Fall through */ \ | 38 | fallthrough; \ |
| 39 | case 7: ptr[7] = read_debug(reg, 7); \ | 39 | case 7: ptr[7] = read_debug(reg, 7); \ |
| 40 | /* Fall through */ \ | 40 | fallthrough; \ |
| 41 | case 6: ptr[6] = read_debug(reg, 6); \ | 41 | case 6: ptr[6] = read_debug(reg, 6); \ |
| 42 | /* Fall through */ \ | 42 | fallthrough; \ |
| 43 | case 5: ptr[5] = read_debug(reg, 5); \ | 43 | case 5: ptr[5] = read_debug(reg, 5); \ |
| 44 | /* Fall through */ \ | 44 | fallthrough; \ |
| 45 | case 4: ptr[4] = read_debug(reg, 4); \ | 45 | case 4: ptr[4] = read_debug(reg, 4); \ |
| 46 | /* Fall through */ \ | 46 | fallthrough; \ |
| 47 | case 3: ptr[3] = read_debug(reg, 3); \ | 47 | case 3: ptr[3] = read_debug(reg, 3); \ |
| 48 | /* Fall through */ \ | 48 | fallthrough; \ |
| 49 | case 2: ptr[2] = read_debug(reg, 2); \ | 49 | case 2: ptr[2] = read_debug(reg, 2); \ |
| 50 | /* Fall through */ \ | 50 | fallthrough; \ |
| 51 | case 1: ptr[1] = read_debug(reg, 1); \ | 51 | case 1: ptr[1] = read_debug(reg, 1); \ |
| 52 | /* Fall through */ \ | 52 | fallthrough; \ |
| 53 | default: ptr[0] = read_debug(reg, 0); \ | 53 | default: ptr[0] = read_debug(reg, 0); \ |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | #define restore_debug(ptr,reg,nr) \ | 56 | #define restore_debug(ptr,reg,nr) \ |
| 57 | switch (nr) { \ | 57 | switch (nr) { \ |
| 58 | case 15: write_debug(ptr[15], reg, 15); \ | 58 | case 15: write_debug(ptr[15], reg, 15); \ |
| 59 | /* Fall through */ \ | 59 | fallthrough; \ |
| 60 | case 14: write_debug(ptr[14], reg, 14); \ | 60 | case 14: write_debug(ptr[14], reg, 14); \ |
| 61 | /* Fall through */ \ | 61 | fallthrough; \ |
| 62 | case 13: write_debug(ptr[13], reg, 13); \ | 62 | case 13: write_debug(ptr[13], reg, 13); \ |
| 63 | /* Fall through */ \ | 63 | fallthrough; \ |
| 64 | case 12: write_debug(ptr[12], reg, 12); \ | 64 | case 12: write_debug(ptr[12], reg, 12); \ |
| 65 | /* Fall through */ \ | 65 | fallthrough; \ |
| 66 | case 11: write_debug(ptr[11], reg, 11); \ | 66 | case 11: write_debug(ptr[11], reg, 11); \ |
| 67 | /* Fall through */ \ | 67 | fallthrough; \ |
| 68 | case 10: write_debug(ptr[10], reg, 10); \ | 68 | case 10: write_debug(ptr[10], reg, 10); \ |
| 69 | /* Fall through */ \ | 69 | fallthrough; \ |
| 70 | case 9: write_debug(ptr[9], reg, 9); \ | 70 | case 9: write_debug(ptr[9], reg, 9); \ |
| 71 | /* Fall through */ \ | 71 | fallthrough; \ |
| 72 | case 8: write_debug(ptr[8], reg, 8); \ | 72 | case 8: write_debug(ptr[8], reg, 8); \ |
| 73 | /* Fall through */ \ | 73 | fallthrough; \ |
| 74 | case 7: write_debug(ptr[7], reg, 7); \ | 74 | case 7: write_debug(ptr[7], reg, 7); \ |
| 75 | /* Fall through */ \ | 75 | fallthrough; \ |
| 76 | case 6: write_debug(ptr[6], reg, 6); \ | 76 | case 6: write_debug(ptr[6], reg, 6); \ |
| 77 | /* Fall through */ \ | 77 | fallthrough; \ |
| 78 | case 5: write_debug(ptr[5], reg, 5); \ | 78 | case 5: write_debug(ptr[5], reg, 5); \ |
| 79 | /* Fall through */ \ | 79 | fallthrough; \ |
| 80 | case 4: write_debug(ptr[4], reg, 4); \ | 80 | case 4: write_debug(ptr[4], reg, 4); \ |
| 81 | /* Fall through */ \ | 81 | fallthrough; \ |
| 82 | case 3: write_debug(ptr[3], reg, 3); \ | 82 | case 3: write_debug(ptr[3], reg, 3); \ |
| 83 | /* Fall through */ \ | 83 | fallthrough; \ |
| 84 | case 2: write_debug(ptr[2], reg, 2); \ | 84 | case 2: write_debug(ptr[2], reg, 2); \ |
| 85 | /* Fall through */ \ | 85 | fallthrough; \ |
| 86 | case 1: write_debug(ptr[1], reg, 1); \ | 86 | case 1: write_debug(ptr[1], reg, 1); \ |
| 87 | /* Fall through */ \ | 87 | fallthrough; \ |
| 88 | default: write_debug(ptr[0], reg, 0); \ | 88 | default: write_debug(ptr[0], reg, 0); \ |
| 89 | } | 89 | } |
| 90 | 90 | ||
| @@ -17,6 +17,7 @@ · 16 unmodified lines | |||
| 17 | 17 | ||
| 18 | #include <asm/barrier.h> | 18 | #include <asm/barrier.h> |
| 19 | #include <asm/cpufeature.h> | 19 | #include <asm/cpufeature.h> |
| 20 | #include <asm/extable.h> | ||
| 20 | #include <asm/kprobes.h> | 21 | #include <asm/kprobes.h> |
| 21 | #include <asm/kvm_asm.h> | 22 | #include <asm/kvm_asm.h> |
| 22 | #include <asm/kvm_emulate.h> | 23 | #include <asm/kvm_emulate.h> |
| @@ -29,6 +30,9 @@ · 6 unmodified lines | |||
| 29 | 30 | ||
| 30 | extern const char __hyp_panic_string[]; | 31 | extern const char __hyp_panic_string[]; |
| 31 | 32 | ||
| 33 | extern struct exception_table_entry __start___kvm_ex_table; | ||
| 34 | extern struct exception_table_entry __stop___kvm_ex_table; | ||
| 35 | |||
| 32 | /* Check whether the FP regs were dirtied while in the host-side run loop: */ | 36 | /* Check whether the FP regs were dirtied while in the host-side run loop: */ |
| 33 | static inline bool update_fp_enabled(struct kvm_vcpu *vcpu) | 37 | static inline bool update_fp_enabled(struct kvm_vcpu *vcpu) |
| 34 | { | 38 | { |
| @@ -142,10 +146,10 @@ static inline bool __translate_far_to_hpfar(u64 far, u64 *hpfar) · 107 unmodified lines | |||
| 142 | * saved the guest context yet, and we may return early... | 146 | * saved the guest context yet, and we may return early... |
| 143 | */ | 147 | */ |
| 144 | par = read_sysreg(par_el1); | 148 | par = read_sysreg(par_el1); |
| 145 | asm volatile("at s1e1r, %0" : : "r" (far)); | 149 | if (!__kvm_at("s1e1r", far)) |
| 146 | isb(); | 150 | tmp = read_sysreg(par_el1); |
| 147 | 151 | else | |
| 148 | tmp = read_sysreg(par_el1); | 152 | tmp = SYS_PAR_EL1_F; /* back to the guest */ |
| 149 | write_sysreg(par, par_el1); | 153 | write_sysreg(par, par_el1); |
| 150 | 154 | ||
| 151 | if (unlikely(tmp & SYS_PAR_EL1_F)) | 155 | if (unlikely(tmp & SYS_PAR_EL1_F)) |
| @@ -508,4 +512,31 @@ static inline void __set_host_arch_workaround_state(struct kvm_vcpu *vcpu) · 356 unmodified lines | |||
| 508 | #endif | 512 | #endif |
| 509 | } | 513 | } |
| 510 | 514 | ||
| 515 | static inline void __kvm_unexpected_el2_exception(void) | ||
| 516 | { | ||
| 517 | unsigned long addr, fixup; | ||
| 518 | struct kvm_cpu_context *host_ctxt; | ||
| 519 | struct exception_table_entry *entry, *end; | ||
| 520 | unsigned long elr_el2 = read_sysreg(elr_el2); | ||
| 521 | |||
| 522 | entry = hyp_symbol_addr(__start___kvm_ex_table); | ||
| 523 | end = hyp_symbol_addr(__stop___kvm_ex_table); | ||
| 524 | host_ctxt = &__hyp_this_cpu_ptr(kvm_host_data)->host_ctxt; | ||
| 525 | |||
| 526 | while (entry < end) { | ||
| 527 | addr = (unsigned long)&entry->insn + entry->insn; | ||
| 528 | fixup = (unsigned long)&entry->fixup + entry->fixup; | ||
| 529 | |||
| 530 | if (addr != elr_el2) { | ||
| 531 | entry++; | ||
| 532 | continue; | ||
| 533 | } | ||
| 534 | |||
| 535 | write_sysreg(fixup, elr_el2); | ||
| 536 | return; | ||
| 537 | } | ||
| 538 | |||
| 539 | hyp_panic(host_ctxt); | ||
| 540 | } | ||
| 541 | |||
| 511 | #endif /* __ARM64_KVM_HYP_SWITCH_H__ */ | 542 | #endif /* __ARM64_KVM_HYP_SWITCH_H__ */ |
| @@ -270,3 +270,8 @@ void __noreturn hyp_panic(struct kvm_cpu_context *host_ctxt) · 269 unmodified lines | |||
| 270 | read_sysreg(hpfar_el2), par, vcpu); | 270 | read_sysreg(hpfar_el2), par, vcpu); |
| 271 | unreachable(); | 271 | unreachable(); |
| 272 | } | 272 | } |
| 273 | |||
| 274 | asmlinkage void kvm_unexpected_el2_exception(void) | ||
| 275 | { | ||
| 276 | return __kvm_unexpected_el2_exception(); | ||
| 277 | } | ||
| @@ -340,10 +340,10 @@ void __vgic_v3_save_aprs(struct vgic_v3_cpu_if *cpu_if) · 339 unmodified lines | |||
| 340 | case 7: | 340 | case 7: |
| 341 | cpu_if->vgic_ap0r[3] = __vgic_v3_read_ap0rn(3); | 341 | cpu_if->vgic_ap0r[3] = __vgic_v3_read_ap0rn(3); |
| 342 | cpu_if->vgic_ap0r[2] = __vgic_v3_read_ap0rn(2); | 342 | cpu_if->vgic_ap0r[2] = __vgic_v3_read_ap0rn(2); |
| 343 | /* Fall through */ | 343 | fallthrough; |
| 344 | case 6: | 344 | case 6: |
| 345 | cpu_if->vgic_ap0r[1] = __vgic_v3_read_ap0rn(1); | 345 | cpu_if->vgic_ap0r[1] = __vgic_v3_read_ap0rn(1); |
| 346 | /* Fall through */ | 346 | fallthrough; |
| 347 | default: | 347 | default: |
| 348 | cpu_if->vgic_ap0r[0] = __vgic_v3_read_ap0rn(0); | 348 | cpu_if->vgic_ap0r[0] = __vgic_v3_read_ap0rn(0); |
| 349 | } | 349 | } |
| @@ -352,10 +352,10 @@ void __vgic_v3_save_aprs(struct vgic_v3_cpu_if *cpu_if) · 2 unmodified lines | |||
| 352 | case 7: | 352 | case 7: |
| 353 | cpu_if->vgic_ap1r[3] = __vgic_v3_read_ap1rn(3); | 353 | cpu_if->vgic_ap1r[3] = __vgic_v3_read_ap1rn(3); |
| 354 | cpu_if->vgic_ap1r[2] = __vgic_v3_read_ap1rn(2); | 354 | cpu_if->vgic_ap1r[2] = __vgic_v3_read_ap1rn(2); |
| 355 | /* Fall through */ | 355 | fallthrough; |
| 356 | case 6: | 356 | case 6: |
| 357 | cpu_if->vgic_ap1r[1] = __vgic_v3_read_ap1rn(1); | 357 | cpu_if->vgic_ap1r[1] = __vgic_v3_read_ap1rn(1); |
| 358 | /* Fall through */ | 358 | fallthrough; |
| 359 | default: | 359 | default: |
| 360 | cpu_if->vgic_ap1r[0] = __vgic_v3_read_ap1rn(0); | 360 | cpu_if->vgic_ap1r[0] = __vgic_v3_read_ap1rn(0); |
| 361 | } | 361 | } |
| @@ -373,10 +373,10 @@ void __vgic_v3_restore_aprs(struct vgic_v3_cpu_if *cpu_if) · 11 unmodified lines | |||
| 373 | case 7: | 373 | case 7: |
| 374 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[3], 3); | 374 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[3], 3); |
| 375 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[2], 2); | 375 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[2], 2); |
| 376 | /* Fall through */ | 376 | fallthrough; |
| 377 | case 6: | 377 | case 6: |
| 378 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[1], 1); | 378 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[1], 1); |
| 379 | /* Fall through */ | 379 | fallthrough; |
| 380 | default: | 380 | default: |
| 381 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[0], 0); | 381 | __vgic_v3_write_ap0rn(cpu_if->vgic_ap0r[0], 0); |
| 382 | } | 382 | } |
| @@ -385,10 +385,10 @@ void __vgic_v3_restore_aprs(struct vgic_v3_cpu_if *cpu_if) · 2 unmodified lines | |||
| 385 | case 7: | 385 | case 7: |
| 386 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[3], 3); | 386 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[3], 3); |
| 387 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[2], 2); | 387 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[2], 2); |
| 388 | /* Fall through */ | 388 | fallthrough; |
| 389 | case 6: | 389 | case 6: |
| 390 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[1], 1); | 390 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[1], 1); |
| 391 | /* Fall through */ | 391 | fallthrough; |
| 392 | default: | 392 | default: |
| 393 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[0], 0); | 393 | __vgic_v3_write_ap1rn(cpu_if->vgic_ap1r[0], 0); |
| 394 | } | 394 | } |
| @@ -217,3 +217,8 @@ void __noreturn hyp_panic(struct kvm_cpu_context *host_ctxt) · 216 unmodified lines | |||
| 217 | __hyp_call_panic(spsr, elr, par, host_ctxt); | 217 | __hyp_call_panic(spsr, elr, par, host_ctxt); |
| 218 | unreachable(); | 218 | unreachable(); |
| 219 | } | 219 | } |
| 220 | |||
| 221 | asmlinkage void kvm_unexpected_el2_exception(void) | ||
| 222 | { | ||
| 223 | return __kvm_unexpected_el2_exception(); | ||
| 224 | } | ||
| @@ -343,7 +343,8 @@ static void unmap_stage2_p4ds(struct kvm_s2_mmu *mmu, pgd_t *pgd, · 342 unmodified lines | |||
| 343 | * destroying the VM), otherwise another faulting VCPU may come in and mess | 343 | * destroying the VM), otherwise another faulting VCPU may come in and mess |
| 344 | * with things behind our backs. | 344 | * with things behind our backs. |
| 345 | */ | 345 | */ |
| 346 | static void unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64 size) | 346 | static void __unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64 size, |
| 347 | bool may_block) | ||
| 347 | { | 348 | { |
| 348 | struct kvm *kvm = mmu->kvm; | 349 | struct kvm *kvm = mmu->kvm; |
| 349 | pgd_t *pgd; | 350 | pgd_t *pgd; |
| @@ -369,11 +370,16 @@ static void unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64 si · 19 unmodified lines | |||
| 369 | * If the range is too large, release the kvm->mmu_lock | 370 | * If the range is too large, release the kvm->mmu_lock |
| 370 | * to prevent starvation and lockup detector warnings. | 371 | * to prevent starvation and lockup detector warnings. |
| 371 | */ | 372 | */ |
| 372 | if (next != end) | 373 | if (may_block && next != end) |
| 373 | cond_resched_lock(&kvm->mmu_lock); | 374 | cond_resched_lock(&kvm->mmu_lock); |
| 374 | } while (pgd++, addr = next, addr != end); | 375 | } while (pgd++, addr = next, addr != end); |
| 375 | } | 376 | } |
| 376 | 377 | ||
| 378 | static void unmap_stage2_range(struct kvm_s2_mmu *mmu, phys_addr_t start, u64 size) | ||
| 379 | { | ||
| 380 | __unmap_stage2_range(mmu, start, size, true); | ||
| 381 | } | ||
| 382 | |||
| 377 | static void stage2_flush_ptes(struct kvm_s2_mmu *mmu, pmd_t *pmd, | 383 | static void stage2_flush_ptes(struct kvm_s2_mmu *mmu, pmd_t *pmd, |
| 378 | phys_addr_t addr, phys_addr_t end) | 384 | phys_addr_t addr, phys_addr_t end) |
| 379 | { | 385 | { |
| @@ -2208,18 +2214,21 @@ static int handle_hva_to_gpa(struct kvm *kvm, · 1828 unmodified lines | |||
| 2208 | 2214 | ||
| 2209 | static int kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, u64 size, void *data) | 2215 | static int kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, u64 size, void *data) |
| 2210 | { | 2216 | { |
| 2211 | unmap_stage2_range(&kvm->arch.mmu, gpa, size); | 2217 | unsigned flags = *(unsigned *)data; |
| 2218 | bool may_block = flags & MMU_NOTIFIER_RANGE_BLOCKABLE; | ||
| 2219 | |||
| 2220 | __unmap_stage2_range(&kvm->arch.mmu, gpa, size, may_block); | ||
| 2212 | return 0; | 2221 | return 0; |
| 2213 | } | 2222 | } |
| 2214 | 2223 | ||
| 2215 | int kvm_unmap_hva_range(struct kvm *kvm, | 2224 | int kvm_unmap_hva_range(struct kvm *kvm, |
| 2216 | unsigned long start, unsigned long end) | 2225 | unsigned long start, unsigned long end, unsigned flags) |
| 2217 | { | 2226 | { |
| 2218 | if (!kvm->arch.mmu.pgd) | 2227 | if (!kvm->arch.mmu.pgd) |
| 2219 | return 0; | 2228 | return 0; |
| 2220 | 2229 | ||
| 2221 | trace_kvm_unmap_hva_range(start, end); | 2230 | trace_kvm_unmap_hva_range(start, end); |
| 2222 | handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL); | 2231 | handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, &flags); |
| 2223 | return 0; | 2232 | return 0; |
| 2224 | } | 2233 | } |
| 2225 | 2234 | ||
| @@ -45,7 +45,7 @@ static u32 get_cpu_asid_bits(void) · 44 unmodified lines | |||
| 45 | default: | 45 | default: |
| 46 | pr_warn("CPU%d: Unknown ASID size (%d); assuming 8-bit\n", | 46 | pr_warn("CPU%d: Unknown ASID size (%d); assuming 8-bit\n", |
| 47 | smp_processor_id(), fld); | 47 | smp_processor_id(), fld); |
| 48 | /* Fallthrough */ | 48 | fallthrough; |
| 49 | case 0: | 49 | case 0: |
| 50 | asid = 8; | 50 | asid = 8; |
| 51 | break; | 51 | break; |
| @@ -220,7 +220,7 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) · 219 unmodified lines | |||
| 220 | regs->a4 = -EINTR; | 220 | regs->a4 = -EINTR; |
| 221 | break; | 221 | break; |
| 222 | } | 222 | } |
| 223 | /* fallthrough */ | 223 | fallthrough; |
| 224 | case -ERESTARTNOINTR: | 224 | case -ERESTARTNOINTR: |
| 225 | do_restart: | 225 | do_restart: |
| 226 | regs->a4 = regs->orig_a4; | 226 | regs->a4 = regs->orig_a4; |
| @@ -252,7 +252,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs, · 25 unmodified lines | |||
| 252 | break; | 252 | break; |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | /* fallthrough */ | 255 | fallthrough; |
| 256 | case -ERESTARTNOINTR: | 256 | case -ERESTARTNOINTR: |
| 257 | regs->a4 = regs->orig_a4; | 257 | regs->a4 = regs->orig_a4; |
| 258 | regs->pc -= 4; | 258 | regs->pc -= 4; |
| @@ -194,7 +194,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 193 unmodified lines | |||
| 194 | regs->a0 = -EINTR; | 194 | regs->a0 = -EINTR; |
| 195 | break; | 195 | break; |
| 196 | } | 196 | } |
| 197 | /* fallthrough */ | 197 | fallthrough; |
| 198 | case -ERESTARTNOINTR: | 198 | case -ERESTARTNOINTR: |
| 199 | regs->a0 = regs->orig_a0; | 199 | regs->a0 = regs->orig_a0; |
| 200 | regs->pc -= TRAP0_SIZE; | 200 | regs->pc -= TRAP0_SIZE; |
| @@ -227,7 +227,7 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka) · 226 unmodified lines | |||
| 227 | regs->er0 = -EINTR; | 227 | regs->er0 = -EINTR; |
| 228 | break; | 228 | break; |
| 229 | } | 229 | } |
| 230 | /* fallthrough */ | 230 | fallthrough; |
| 231 | case -ERESTARTNOINTR: | 231 | case -ERESTARTNOINTR: |
| 232 | do_restart: | 232 | do_restart: |
| 233 | regs->er0 = regs->orig_er0; | 233 | regs->er0 = regs->orig_er0; |
| @@ -120,7 +120,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab, · 119 unmodified lines | |||
| 120 | } | 120 | } |
| 121 | case R_HEXAGON_HI16: | 121 | case R_HEXAGON_HI16: |
| 122 | value = (value>>16) & 0xffff; | 122 | value = (value>>16) & 0xffff; |
| 123 | /* fallthrough */ | 123 | fallthrough; |
| 124 | case R_HEXAGON_LO16: | 124 | case R_HEXAGON_LO16: |
| 125 | *location &= ~0x00c03fff; | 125 | *location &= ~0x00c03fff; |
| 126 | *location |= value & 0x3fff; | 126 | *location |= value & 0x3fff; |
| @@ -155,7 +155,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 154 unmodified lines | |||
| 155 | regs->r00 = -EINTR; | 155 | regs->r00 = -EINTR; |
| 156 | break; | 156 | break; |
| 157 | } | 157 | } |
| 158 | /* Fall through */ | 158 | fallthrough; |
| 159 | case -ERESTARTNOINTR: | 159 | case -ERESTARTNOINTR: |
| 160 | regs->r06 = regs->syscall_nr; | 160 | regs->r06 = regs->syscall_nr; |
| 161 | pt_set_elr(regs, pt_elr(regs) - 4); | 161 | pt_set_elr(regs, pt_elr(regs) - 4); |
| @@ -366,6 +366,15 @@ pgd_index (unsigned long address) · 365 unmodified lines | |||
| 366 | } | 366 | } |
| 367 | #define pgd_index pgd_index | 367 | #define pgd_index pgd_index |
| 368 | 368 | ||
| 369 | /* | ||
| 370 | * In the kernel's mapped region we know everything is in region number 5, so | ||
| 371 | * as an optimisation its PGD already points to the area for that region. | ||
| 372 | * However, this also means that we cannot use pgd_index() and we must | ||
| 373 | * never add the region here. | ||
| 374 | */ | ||
| 375 | #define pgd_offset_k(addr) \ | ||
| 376 | (init_mm.pgd + (((addr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))) | ||
| 377 | |||
| 369 | /* Look up a pgd entry in the gate area. On IA-64, the gate-area | 378 | /* Look up a pgd entry in the gate area. On IA-64, the gate-area |
| 370 | resides in the kernel-mapped segment, hence we use pgd_offset_k() | 379 | resides in the kernel-mapped segment, hence we use pgd_offset_k() |
| 371 | here. */ | 380 | here. */ |
| @@ -163,7 +163,7 @@ kdump_init_notifier(struct notifier_block *self, unsigned long val, void *data) · 162 unmodified lines | |||
| 163 | case DIE_INIT_MONARCH_LEAVE: | 163 | case DIE_INIT_MONARCH_LEAVE: |
| 164 | if (!kdump_freeze_monarch) | 164 | if (!kdump_freeze_monarch) |
| 165 | break; | 165 | break; |
| 166 | /* fall through */ | 166 | fallthrough; |
| 167 | case DIE_INIT_SLAVE_LEAVE: | 167 | case DIE_INIT_SLAVE_LEAVE: |
| 168 | case DIE_INIT_MONARCH_ENTER: | 168 | case DIE_INIT_MONARCH_ENTER: |
| 169 | case DIE_MCA_RENDZVOUS_LEAVE: | 169 | case DIE_MCA_RENDZVOUS_LEAVE: |
| @@ -654,7 +654,7 @@ do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend, · 653 unmodified lines | |||
| 654 | } | 654 | } |
| 655 | } else if (!is_internal(mod, val)) | 655 | } else if (!is_internal(mod, val)) |
| 656 | val = get_plt(mod, location, val, &ok); | 656 | val = get_plt(mod, location, val, &ok); |
| 657 | /* FALL THROUGH */ | 657 | fallthrough; |
| 658 | default: | 658 | default: |
| 659 | val -= bundle(location); | 659 | val -= bundle(location); |
| 660 | break; | 660 | break; |
| @@ -3472,7 +3472,7 @@ pfm_restart(pfm_context_t *ctx, void *arg, int count, struct pt_regs *regs) · 3471 unmodified lines | |||
| 3472 | break; | 3472 | break; |
| 3473 | case PFM_CTX_LOADED: | 3473 | case PFM_CTX_LOADED: |
| 3474 | if (CTX_HAS_SMPL(ctx) && fmt->fmt_restart_active) break; | 3474 | if (CTX_HAS_SMPL(ctx) && fmt->fmt_restart_active) break; |
| 3475 | /* fall through */ | 3475 | fallthrough; |
| 3476 | case PFM_CTX_UNLOADED: | 3476 | case PFM_CTX_UNLOADED: |
| 3477 | case PFM_CTX_ZOMBIE: | 3477 | case PFM_CTX_ZOMBIE: |
| 3478 | DPRINT(("invalid state=%d\n", state)); | 3478 | DPRINT(("invalid state=%d\n", state)); |
| @@ -374,7 +374,7 @@ ia64_do_signal (struct sigscratch *scr, long in_syscall) · 373 unmodified lines | |||
| 374 | /* note: scr->pt.r10 is already -1 */ | 374 | /* note: scr->pt.r10 is already -1 */ |
| 375 | break; | 375 | break; |
| 376 | } | 376 | } |
| 377 | /*FALLTHRU*/ | 377 | fallthrough; |
| 378 | case ERESTARTNOINTR: | 378 | case ERESTARTNOINTR: |
| 379 | ia64_decrement_ip(&scr->pt); | 379 | ia64_decrement_ip(&scr->pt); |
| 380 | restart = 0; /* don't restart twice if handle_signal() fails... */ | 380 | restart = 0; /* don't restart twice if handle_signal() fails... */ |
| @@ -1431,7 +1431,7 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) · 1430 unmodified lines | |||
| 1431 | if (u.insn.x) | 1431 | if (u.insn.x) |
| 1432 | /* oops, really a semaphore op (cmpxchg, etc) */ | 1432 | /* oops, really a semaphore op (cmpxchg, etc) */ |
| 1433 | goto failure; | 1433 | goto failure; |
| 1434 | /*FALLTHRU*/ | 1434 | fallthrough; |
| 1435 | case LDS_IMM_OP: | 1435 | case LDS_IMM_OP: |
| 1436 | case LDSA_IMM_OP: | 1436 | case LDSA_IMM_OP: |
| 1437 | case LDFS_OP: | 1437 | case LDFS_OP: |
| @@ -1459,7 +1459,7 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) · 21 unmodified lines | |||
| 1459 | if (u.insn.x) | 1459 | if (u.insn.x) |
| 1460 | /* oops, really a semaphore op (cmpxchg, etc) */ | 1460 | /* oops, really a semaphore op (cmpxchg, etc) */ |
| 1461 | goto failure; | 1461 | goto failure; |
| 1462 | /*FALLTHRU*/ | 1462 | fallthrough; |
| 1463 | case LD_IMM_OP: | 1463 | case LD_IMM_OP: |
| 1464 | case LDA_IMM_OP: | 1464 | case LDA_IMM_OP: |
| 1465 | case LDBIAS_IMM_OP: | 1465 | case LDBIAS_IMM_OP: |
| @@ -1475,7 +1475,7 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) · 9 unmodified lines | |||
| 1475 | if (u.insn.x) | 1475 | if (u.insn.x) |
| 1476 | /* oops, really a semaphore op (cmpxchg, etc) */ | 1476 | /* oops, really a semaphore op (cmpxchg, etc) */ |
| 1477 | goto failure; | 1477 | goto failure; |
| 1478 | /*FALLTHRU*/ | 1478 | fallthrough; |
| 1479 | case ST_IMM_OP: | 1479 | case ST_IMM_OP: |
| 1480 | case STREL_IMM_OP: | 1480 | case STREL_IMM_OP: |
| 1481 | ret = emulate_store_int(ifa, u.insn, regs); | 1481 | ret = emulate_store_int(ifa, u.insn, regs); |
| @@ -324,7 +324,7 @@ unw_access_gr (struct unw_frame_info *info, int regnum, unsigned long *val, char · 323 unmodified lines | |||
| 324 | return 0; | 324 | return 0; |
| 325 | } | 325 | } |
| 326 | } | 326 | } |
| 327 | /* fall through */ | 327 | fallthrough; |
| 328 | case UNW_NAT_NONE: | 328 | case UNW_NAT_NONE: |
| 329 | dummy_nat = 0; | 329 | dummy_nat = 0; |
| 330 | nat_addr = &dummy_nat; | 330 | nat_addr = &dummy_nat; |
| @@ -207,7 +207,7 @@ repeat: · 206 unmodified lines | |||
| 207 | self_test_last_rcv = jiffies; | 207 | self_test_last_rcv = jiffies; |
| 208 | break; | 208 | break; |
| 209 | } | 209 | } |
| 210 | /* FALL THROUGH */ | 210 | fallthrough; |
| 211 | 211 | ||
| 212 | default: | 212 | default: |
| 213 | break_flag = scancode & BREAK_MASK; | 213 | break_flag = scancode & BREAK_MASK; |
| @@ -1067,7 +1067,7 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) · 1066 unmodified lines | |||
| 1067 | regs->d0 = -EINTR; | 1067 | regs->d0 = -EINTR; |
| 1068 | break; | 1068 | break; |
| 1069 | } | 1069 | } |
| 1070 | /* fallthrough */ | 1070 | fallthrough; |
| 1071 | case -ERESTARTNOINTR: | 1071 | case -ERESTARTNOINTR: |
| 1072 | do_restart: | 1072 | do_restart: |
| 1073 | regs->d0 = regs->orig_d0; | 1073 | regs->d0 = regs->orig_d0; |
| @@ -1018,7 +1018,7 @@ int __init mac_platform_init(void) · 1017 unmodified lines | |||
| 1018 | */ | 1018 | */ |
| 1019 | platform_device_register_simple("mac_scsi", 1, | 1019 | platform_device_register_simple("mac_scsi", 1, |
| 1020 | mac_scsi_duo_rsrc, ARRAY_SIZE(mac_scsi_duo_rsrc)); | 1020 | mac_scsi_duo_rsrc, ARRAY_SIZE(mac_scsi_duo_rsrc)); |
| 1021 | /* fall through */ | 1021 | fallthrough; |
| 1022 | case MAC_SCSI_OLD: | 1022 | case MAC_SCSI_OLD: |
| 1023 | /* Addresses from Developer Notes for Duo System, | 1023 | /* Addresses from Developer Notes for Duo System, |
| 1024 | * PowerBook 180 & 160, 140 & 170, Macintosh IIsi | 1024 | * PowerBook 180 & 160, 140 & 170, Macintosh IIsi |
| @@ -370,7 +370,7 @@ void via_nubus_irq_startup(int irq) · 369 unmodified lines | |||
| 370 | /* Allow NuBus slots 9 through F. */ | 370 | /* Allow NuBus slots 9 through F. */ |
| 371 | via2[vDirA] &= 0x80 | ~(1 << irq_idx); | 371 | via2[vDirA] &= 0x80 | ~(1 << irq_idx); |
| 372 | } | 372 | } |
| 373 | /* fall through */ | 373 | fallthrough; |
| 374 | case MAC_VIA_IICI: | 374 | case MAC_VIA_IICI: |
| 375 | via_irq_enable(irq); | 375 | via_irq_enable(irq); |
| 376 | break; | 376 | break; |
| @@ -118,7 +118,7 @@ good_area: · 117 unmodified lines | |||
| 118 | pr_debug("do_page_fault: good_area\n"); | 118 | pr_debug("do_page_fault: good_area\n"); |
| 119 | switch (error_code & 3) { | 119 | switch (error_code & 3) { |
| 120 | default: /* 3: write, present */ | 120 | default: /* 3: write, present */ |
| 121 | /* fall through */ | 121 | fallthrough; |
| 122 | case 2: /* write, not present */ | 122 | case 2: /* write, not present */ |
| 123 | if (!(vma->vm_flags & VM_WRITE)) | 123 | if (!(vma->vm_flags & VM_WRITE)) |
| 124 | goto acc_err; | 124 | goto acc_err; |
| @@ -249,7 +249,7 @@ handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) · 248 unmodified lines | |||
| 249 | regs->r3 = -EINTR; | 249 | regs->r3 = -EINTR; |
| 250 | break; | 250 | break; |
| 251 | } | 251 | } |
| 252 | /* fallthrough */ | 252 | fallthrough; |
| 253 | case -ERESTARTNOINTR: | 253 | case -ERESTARTNOINTR: |
| 254 | do_restart: | 254 | do_restart: |
| 255 | /* offset of 4 bytes to re-execute trap (brki) instruction */ | 255 | /* offset of 4 bytes to re-execute trap (brki) instruction */ |
| @@ -137,6 +137,11 @@ static inline int arch_irqs_disabled_flags(unsigned long flags) · 136 unmodified lines | |||
| 137 | return !(flags & 1); | 137 | return !(flags & 1); |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | static inline int arch_irqs_disabled(void) | ||
| 141 | { | ||
| 142 | return arch_irqs_disabled_flags(arch_local_save_flags()); | ||
| 143 | } | ||
| 144 | |||
| 140 | #endif /* #ifndef __ASSEMBLY__ */ | 145 | #endif /* #ifndef __ASSEMBLY__ */ |
| 141 | 146 | ||
| 142 | /* | 147 | /* |
| @@ -969,7 +969,7 @@ enum kvm_mips_fault_result kvm_trap_emul_gva_fault(struct kvm_vcpu *vcpu, · 968 unmodified lines | |||
| 969 | 969 | ||
| 970 | #define KVM_ARCH_WANT_MMU_NOTIFIER | 970 | #define KVM_ARCH_WANT_MMU_NOTIFIER |
| 971 | int kvm_unmap_hva_range(struct kvm *kvm, | 971 | int kvm_unmap_hva_range(struct kvm *kvm, |
| 972 | unsigned long start, unsigned long end); | 972 | unsigned long start, unsigned long end, unsigned flags); |
| 973 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | 973 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); |
| 974 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); | 974 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); |
| 975 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); | 975 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); |
| @@ -28,38 +28,38 @@ · 27 unmodified lines | |||
| 28 | BUILD_BUG_ON(!__builtin_constant_p(times)); \ | 28 | BUILD_BUG_ON(!__builtin_constant_p(times)); \ |
| 29 | \ | 29 | \ |
| 30 | switch (times) { \ | 30 | switch (times) { \ |
| 31 | case 32: fn(__VA_ARGS__); /* fall through */ \ | 31 | case 32: fn(__VA_ARGS__); fallthrough; \ |
| 32 | case 31: fn(__VA_ARGS__); /* fall through */ \ | 32 | case 31: fn(__VA_ARGS__); fallthrough; \ |
| 33 | case 30: fn(__VA_ARGS__); /* fall through */ \ | 33 | case 30: fn(__VA_ARGS__); fallthrough; \ |
| 34 | case 29: fn(__VA_ARGS__); /* fall through */ \ | 34 | case 29: fn(__VA_ARGS__); fallthrough; \ |
| 35 | case 28: fn(__VA_ARGS__); /* fall through */ \ | 35 | case 28: fn(__VA_ARGS__); fallthrough; \ |
| 36 | case 27: fn(__VA_ARGS__); /* fall through */ \ | 36 | case 27: fn(__VA_ARGS__); fallthrough; \ |
| 37 | case 26: fn(__VA_ARGS__); /* fall through */ \ | 37 | case 26: fn(__VA_ARGS__); fallthrough; \ |
| 38 | case 25: fn(__VA_ARGS__); /* fall through */ \ | 38 | case 25: fn(__VA_ARGS__); fallthrough; \ |
| 39 | case 24: fn(__VA_ARGS__); /* fall through */ \ | 39 | case 24: fn(__VA_ARGS__); fallthrough; \ |
| 40 | case 23: fn(__VA_ARGS__); /* fall through */ \ | 40 | case 23: fn(__VA_ARGS__); fallthrough; \ |
| 41 | case 22: fn(__VA_ARGS__); /* fall through */ \ | 41 | case 22: fn(__VA_ARGS__); fallthrough; \ |
| 42 | case 21: fn(__VA_ARGS__); /* fall through */ \ | 42 | case 21: fn(__VA_ARGS__); fallthrough; \ |
| 43 | case 20: fn(__VA_ARGS__); /* fall through */ \ | 43 | case 20: fn(__VA_ARGS__); fallthrough; \ |
| 44 | case 19: fn(__VA_ARGS__); /* fall through */ \ | 44 | case 19: fn(__VA_ARGS__); fallthrough; \ |
| 45 | case 18: fn(__VA_ARGS__); /* fall through */ \ | 45 | case 18: fn(__VA_ARGS__); fallthrough; \ |
| 46 | case 17: fn(__VA_ARGS__); /* fall through */ \ | 46 | case 17: fn(__VA_ARGS__); fallthrough; \ |
| 47 | case 16: fn(__VA_ARGS__); /* fall through */ \ | 47 | case 16: fn(__VA_ARGS__); fallthrough; \ |
| 48 | case 15: fn(__VA_ARGS__); /* fall through */ \ | 48 | case 15: fn(__VA_ARGS__); fallthrough; \ |
| 49 | case 14: fn(__VA_ARGS__); /* fall through */ \ | 49 | case 14: fn(__VA_ARGS__); fallthrough; \ |
| 50 | case 13: fn(__VA_ARGS__); /* fall through */ \ | 50 | case 13: fn(__VA_ARGS__); fallthrough; \ |
| 51 | case 12: fn(__VA_ARGS__); /* fall through */ \ | 51 | case 12: fn(__VA_ARGS__); fallthrough; \ |
| 52 | case 11: fn(__VA_ARGS__); /* fall through */ \ | 52 | case 11: fn(__VA_ARGS__); fallthrough; \ |
| 53 | case 10: fn(__VA_ARGS__); /* fall through */ \ | 53 | case 10: fn(__VA_ARGS__); fallthrough; \ |
| 54 | case 9: fn(__VA_ARGS__); /* fall through */ \ | 54 | case 9: fn(__VA_ARGS__); fallthrough; \ |
| 55 | case 8: fn(__VA_ARGS__); /* fall through */ \ | 55 | case 8: fn(__VA_ARGS__); fallthrough; \ |
| 56 | case 7: fn(__VA_ARGS__); /* fall through */ \ | 56 | case 7: fn(__VA_ARGS__); fallthrough; \ |
| 57 | case 6: fn(__VA_ARGS__); /* fall through */ \ | 57 | case 6: fn(__VA_ARGS__); fallthrough; \ |
| 58 | case 5: fn(__VA_ARGS__); /* fall through */ \ | 58 | case 5: fn(__VA_ARGS__); fallthrough; \ |
| 59 | case 4: fn(__VA_ARGS__); /* fall through */ \ | 59 | case 4: fn(__VA_ARGS__); fallthrough; \ |
| 60 | case 3: fn(__VA_ARGS__); /* fall through */ \ | 60 | case 3: fn(__VA_ARGS__); fallthrough; \ |
| 61 | case 2: fn(__VA_ARGS__); /* fall through */ \ | 61 | case 2: fn(__VA_ARGS__); fallthrough; \ |
| 62 | case 1: fn(__VA_ARGS__); /* fall through */ \ | 62 | case 1: fn(__VA_ARGS__); fallthrough; \ |
| 63 | case 0: break; \ | 63 | case 0: break; \ |
| 64 | \ | 64 | \ |
| 65 | default: \ | 65 | default: \ |
| @@ -486,7 +486,8 @@ static int kvm_unmap_hva_handler(struct kvm *kvm, gfn_t gfn, gfn_t gfn_end, · 485 unmodified lines | |||
| 486 | return 1; | 486 | return 1; |
| 487 | } | 487 | } |
| 488 | 488 | ||
| 489 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) | 489 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
| 490 | unsigned flags) | ||
| 490 | { | 491 | { |
| 491 | handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL); | 492 | handle_hva_to_gpa(kvm, start, end, &kvm_unmap_hva_handler, NULL); |
| 492 | 493 | ||
| @@ -34,3 +34,8 @@ static inline int arch_irqs_disabled_flags(unsigned long flags) · 33 unmodified lines | |||
| 34 | { | 34 | { |
| 35 | return !flags; | 35 | return !flags; |
| 36 | } | 36 | } |
| 37 | |||
| 38 | static inline int arch_irqs_disabled(void) | ||
| 39 | { | ||
| 40 | return arch_irqs_disabled_flags(arch_local_save_flags()); | ||
| 41 | } | ||
| @@ -45,7 +45,7 @@ void save_fpu(struct task_struct *tsk) · 44 unmodified lines | |||
| 45 | : /* no output */ | 45 | : /* no output */ |
| 46 | : "r" (&tsk->thread.fpu) | 46 | : "r" (&tsk->thread.fpu) |
| 47 | : "memory"); | 47 | : "memory"); |
| 48 | /* fall through */ | 48 | fallthrough; |
| 49 | case SP32_DP16_reg: | 49 | case SP32_DP16_reg: |
| 50 | asm volatile ("fsdi $fd15, [%0+0x78]\n\t" | 50 | asm volatile ("fsdi $fd15, [%0+0x78]\n\t" |
| 51 | "fsdi $fd14, [%0+0x70]\n\t" | 51 | "fsdi $fd14, [%0+0x70]\n\t" |
| @@ -58,7 +58,7 @@ void save_fpu(struct task_struct *tsk) · 6 unmodified lines | |||
| 58 | : /* no output */ | 58 | : /* no output */ |
| 59 | : "r" (&tsk->thread.fpu) | 59 | : "r" (&tsk->thread.fpu) |
| 60 | : "memory"); | 60 | : "memory"); |
| 61 | /* fall through */ | 61 | fallthrough; |
| 62 | case SP16_DP8_reg: | 62 | case SP16_DP8_reg: |
| 63 | asm volatile ("fsdi $fd7, [%0+0x38]\n\t" | 63 | asm volatile ("fsdi $fd7, [%0+0x38]\n\t" |
| 64 | "fsdi $fd6, [%0+0x30]\n\t" | 64 | "fsdi $fd6, [%0+0x30]\n\t" |
| @@ -67,7 +67,7 @@ void save_fpu(struct task_struct *tsk) · 2 unmodified lines | |||
| 67 | : /* no output */ | 67 | : /* no output */ |
| 68 | : "r" (&tsk->thread.fpu) | 68 | : "r" (&tsk->thread.fpu) |
| 69 | : "memory"); | 69 | : "memory"); |
| 70 | /* fall through */ | 70 | fallthrough; |
| 71 | case SP8_DP4_reg: | 71 | case SP8_DP4_reg: |
| 72 | asm volatile ("fsdi $fd3, [%1+0x18]\n\t" | 72 | asm volatile ("fsdi $fd3, [%1+0x18]\n\t" |
| 73 | "fsdi $fd2, [%1+0x10]\n\t" | 73 | "fsdi $fd2, [%1+0x10]\n\t" |
| @@ -108,7 +108,7 @@ void load_fpu(const struct fpu_struct *fpregs) · 34 unmodified lines | |||
| 108 | "fldi $fd16, [%0+0x80]\n\t" | 108 | "fldi $fd16, [%0+0x80]\n\t" |
| 109 | : /* no output */ | 109 | : /* no output */ |
| 110 | : "r" (fpregs)); | 110 | : "r" (fpregs)); |
| 111 | /* fall through */ | 111 | fallthrough; |
| 112 | case SP32_DP16_reg: | 112 | case SP32_DP16_reg: |
| 113 | asm volatile ("fldi $fd15, [%0+0x78]\n\t" | 113 | asm volatile ("fldi $fd15, [%0+0x78]\n\t" |
| 114 | "fldi $fd14, [%0+0x70]\n\t" | 114 | "fldi $fd14, [%0+0x70]\n\t" |
| @@ -120,7 +120,7 @@ void load_fpu(const struct fpu_struct *fpregs) · 5 unmodified lines | |||
| 120 | "fldi $fd8, [%0+0x40]\n\t" | 120 | "fldi $fd8, [%0+0x40]\n\t" |
| 121 | : /* no output */ | 121 | : /* no output */ |
| 122 | : "r" (fpregs)); | 122 | : "r" (fpregs)); |
| 123 | /* fall through */ | 123 | fallthrough; |
| 124 | case SP16_DP8_reg: | 124 | case SP16_DP8_reg: |
| 125 | asm volatile ("fldi $fd7, [%0+0x38]\n\t" | 125 | asm volatile ("fldi $fd7, [%0+0x38]\n\t" |
| 126 | "fldi $fd6, [%0+0x30]\n\t" | 126 | "fldi $fd6, [%0+0x30]\n\t" |
| @@ -128,7 +128,7 @@ void load_fpu(const struct fpu_struct *fpregs) · 1 unmodified line | |||
| 128 | "fldi $fd4, [%0+0x20]\n\t" | 128 | "fldi $fd4, [%0+0x20]\n\t" |
| 129 | : /* no output */ | 129 | : /* no output */ |
| 130 | : "r" (fpregs)); | 130 | : "r" (fpregs)); |
| 131 | /* fall through */ | 131 | fallthrough; |
| 132 | case SP8_DP4_reg: | 132 | case SP8_DP4_reg: |
| 133 | asm volatile ("fldi $fd3, [%1+0x18]\n\t" | 133 | asm volatile ("fldi $fd3, [%1+0x18]\n\t" |
| 134 | "fldi $fd2, [%1+0x10]\n\t" | 134 | "fldi $fd2, [%1+0x10]\n\t" |
| @@ -316,7 +316,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 315 unmodified lines | |||
| 316 | regs->uregs[0] = -EINTR; | 316 | regs->uregs[0] = -EINTR; |
| 317 | break; | 317 | break; |
| 318 | } | 318 | } |
| 319 | /* Else, fall through */ | 319 | fallthrough; |
| 320 | case -ERESTARTNOINTR: | 320 | case -ERESTARTNOINTR: |
| 321 | regs->uregs[0] = regs->orig_r0; | 321 | regs->uregs[0] = regs->orig_r0; |
| 322 | regs->ipc -= 4; | 322 | regs->ipc -= 4; |
| @@ -361,7 +361,7 @@ static void do_signal(struct pt_regs *regs) · 38 unmodified lines | |||
| 361 | switch (regs->uregs[0]) { | 361 | switch (regs->uregs[0]) { |
| 362 | case -ERESTART_RESTARTBLOCK: | 362 | case -ERESTART_RESTARTBLOCK: |
| 363 | regs->uregs[15] = __NR_restart_syscall; | 363 | regs->uregs[15] = __NR_restart_syscall; |
| 364 | /* Fall through */ | 364 | fallthrough; |
| 365 | case -ERESTARTNOHAND: | 365 | case -ERESTARTNOHAND: |
| 366 | case -ERESTARTSYS: | 366 | case -ERESTARTSYS: |
| 367 | case -ERESTARTNOINTR: | 367 | case -ERESTARTNOINTR: |
| @@ -244,7 +244,7 @@ int do_signal(struct pt_regs *regs, int syscall) · 243 unmodified lines | |||
| 244 | switch (retval) { | 244 | switch (retval) { |
| 245 | case -ERESTART_RESTARTBLOCK: | 245 | case -ERESTART_RESTARTBLOCK: |
| 246 | restart = -2; | 246 | restart = -2; |
| 247 | /* Fall through */ | 247 | fallthrough; |
| 248 | case -ERESTARTNOHAND: | 248 | case -ERESTARTNOHAND: |
| 249 | case -ERESTARTSYS: | 249 | case -ERESTARTSYS: |
| 250 | case -ERESTARTNOINTR: | 250 | case -ERESTARTNOINTR: |
| @@ -502,7 +502,7 @@ syscall_restart(struct pt_regs *regs, struct k_sigaction *ka) · 501 unmodified lines | |||
| 502 | regs->gr[28] = -EINTR; | 502 | regs->gr[28] = -EINTR; |
| 503 | break; | 503 | break; |
| 504 | } | 504 | } |
| 505 | /* fallthrough */ | 505 | fallthrough; |
| 506 | case -ERESTARTNOINTR: | 506 | case -ERESTARTNOINTR: |
| 507 | check_syscallno_in_delay_branch(regs); | 507 | check_syscallno_in_delay_branch(regs); |
| 508 | break; | 508 | break; |
| @@ -437,7 +437,6 @@ void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long o · 436 unmodified lines | |||
| 437 | break; | 437 | break; |
| 438 | 438 | ||
| 439 | default: | 439 | default: |
| 440 | /* Fall through */ | ||
| 441 | break; | 440 | break; |
| 442 | 441 | ||
| 443 | } | 442 | } |
| @@ -644,12 +643,12 @@ void notrace handle_interruption(int code, struct pt_regs *regs) · 200 unmodified lines | |||
| 644 | 643 | ||
| 645 | case 15: | 644 | case 15: |
| 646 | /* Data TLB miss fault/Data page fault */ | 645 | /* Data TLB miss fault/Data page fault */ |
| 647 | /* Fall through */ | 646 | fallthrough; |
| 648 | case 16: | 647 | case 16: |
| 649 | /* Non-access instruction TLB miss fault */ | 648 | /* Non-access instruction TLB miss fault */ |
| 650 | /* The instruction TLB entry needed for the target address of the FIC | 649 | /* The instruction TLB entry needed for the target address of the FIC |
| 651 | is absent, and hardware can't find it, so we get to cleanup */ | 650 | is absent, and hardware can't find it, so we get to cleanup */ |
| 652 | /* Fall through */ | 651 | fallthrough; |
| 653 | case 17: | 652 | case 17: |
| 654 | /* Non-access data TLB miss fault/Non-access data page fault */ | 653 | /* Non-access data TLB miss fault/Non-access data page fault */ |
| 655 | /* FIXME: | 654 | /* FIXME: |
| @@ -673,7 +672,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) · 17 unmodified lines | |||
| 673 | handle_unaligned(regs); | 672 | handle_unaligned(regs); |
| 674 | return; | 673 | return; |
| 675 | } | 674 | } |
| 676 | /* Fall Through */ | 675 | fallthrough; |
| 677 | case 26: | 676 | case 26: |
| 678 | /* PCXL: Data memory access rights trap */ | 677 | /* PCXL: Data memory access rights trap */ |
| 679 | fault_address = regs->ior; | 678 | fault_address = regs->ior; |
| @@ -683,7 +682,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) · 3 unmodified lines | |||
| 683 | case 19: | 682 | case 19: |
| 684 | /* Data memory break trap */ | 683 | /* Data memory break trap */ |
| 685 | regs->gr[0] |= PSW_X; /* So we can single-step over the trap */ | 684 | regs->gr[0] |= PSW_X; /* So we can single-step over the trap */ |
| 686 | /* fall thru */ | 685 | fallthrough; |
| 687 | case 21: | 686 | case 21: |
| 688 | /* Page reference trap */ | 687 | /* Page reference trap */ |
| 689 | handle_gdb_break(regs, TRAP_HWBKPT); | 688 | handle_gdb_break(regs, TRAP_HWBKPT); |
| @@ -730,7 +729,7 @@ void notrace handle_interruption(int code, struct pt_regs *regs) · 40 unmodified lines | |||
| 730 | } | 729 | } |
| 731 | mmap_read_unlock(current->mm); | 730 | mmap_read_unlock(current->mm); |
| 732 | } | 731 | } |
| 733 | /* Fall Through */ | 732 | fallthrough; |
| 734 | case 27: | 733 | case 27: |
| 735 | /* Data memory protection ID trap */ | 734 | /* Data memory protection ID trap */ |
| 736 | if (code == 27 && !user_mode(regs) && | 735 | if (code == 27 && !user_mode(regs) && |
| @@ -67,7 +67,7 @@ parisc_acctyp(unsigned long code, unsigned int inst) · 66 unmodified lines | |||
| 67 | case 0x30000000: /* coproc2 */ | 67 | case 0x30000000: /* coproc2 */ |
| 68 | if (bit22set(inst)) | 68 | if (bit22set(inst)) |
| 69 | return VM_WRITE; | 69 | return VM_WRITE; |
| 70 | /* fall through */ | 70 | fallthrough; |
| 71 | 71 | ||
| 72 | case 0x0: /* indexed/memory management */ | 72 | case 0x0: /* indexed/memory management */ |
| 73 | if (bit22set(inst)) { | 73 | if (bit22set(inst)) { |
| @@ -370,7 +370,7 @@ bad_area: · 296 unmodified lines | |||
| 370 | } | 370 | } |
| 371 | 371 | ||
| 372 | /* probably address is outside of mapped file */ | 372 | /* probably address is outside of mapped file */ |
| 373 | /* fall through */ | 373 | fallthrough; |
| 374 | case 17: /* NA data TLB miss / page fault */ | 374 | case 17: /* NA data TLB miss / page fault */ |
| 375 | case 18: /* Unaligned access - PCXS only */ | 375 | case 18: /* Unaligned access - PCXS only */ |
| 376 | signo = SIGBUS; | 376 | signo = SIGBUS; |
| @@ -860,6 +860,18 @@ config PPC_SUBPAGE_PROT · 859 unmodified lines | |||
| 860 | 860 | ||
| 861 | If unsure, say N here. | 861 | If unsure, say N here. |
| 862 | 862 | ||
| 863 | config PPC_PROT_SAO_LPAR | ||
| 864 | bool "Support PROT_SAO mappings in LPARs" | ||
| 865 | depends on PPC_BOOK3S_64 | ||
| 866 | help | ||
| 867 | This option adds support for PROT_SAO mappings from userspace | ||
| 868 | inside LPARs on supported CPUs. | ||
| 869 | |||
| 870 | This may cause issues when performing guest migration from | ||
| 871 | a CPU that supports SAO to one that does not. | ||
| 872 | |||
| 873 | If unsure, say N here. | ||
| 874 | |||
| 863 | config PPC_COPRO_BASE | 875 | config PPC_COPRO_BASE |
| 864 | bool | 876 | bool |
| 865 | 877 | ||
| @@ -20,13 +20,9 @@ · 19 unmodified lines | |||
| 20 | #define _PAGE_RW (_PAGE_READ | _PAGE_WRITE) | 20 | #define _PAGE_RW (_PAGE_READ | _PAGE_WRITE) |
| 21 | #define _PAGE_RWX (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC) | 21 | #define _PAGE_RWX (_PAGE_READ | _PAGE_WRITE | _PAGE_EXEC) |
| 22 | #define _PAGE_PRIVILEGED 0x00008 /* kernel access only */ | 22 | #define _PAGE_PRIVILEGED 0x00008 /* kernel access only */ |
| 23 | 23 | #define _PAGE_SAO 0x00010 /* Strong access order */ | |
| 24 | #define _PAGE_CACHE_CTL 0x00030 /* Bits for the folowing cache modes */ | ||
| 25 | /* No bits set is normal cacheable memory */ | ||
| 26 | /* 0x00010 unused, is SAO bit on radix POWER9 */ | ||
| 27 | #define _PAGE_NON_IDEMPOTENT 0x00020 /* non idempotent memory */ | 24 | #define _PAGE_NON_IDEMPOTENT 0x00020 /* non idempotent memory */ |
| 28 | #define _PAGE_TOLERANT 0x00030 /* tolerant memory, cache inhibited */ | 25 | #define _PAGE_TOLERANT 0x00030 /* tolerant memory, cache inhibited */ |
| 29 | |||
| 30 | #define _PAGE_DIRTY 0x00080 /* C: page changed */ | 26 | #define _PAGE_DIRTY 0x00080 /* C: page changed */ |
| 31 | #define _PAGE_ACCESSED 0x00100 /* R: page referenced */ | 27 | #define _PAGE_ACCESSED 0x00100 /* R: page referenced */ |
| 32 | /* | 28 | /* |
| @@ -828,6 +824,8 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, · 795 unmodified lines | |||
| 828 | return hash__set_pte_at(mm, addr, ptep, pte, percpu); | 824 | return hash__set_pte_at(mm, addr, ptep, pte, percpu); |
| 829 | } | 825 | } |
| 830 | 826 | ||
| 827 | #define _PAGE_CACHE_CTL (_PAGE_SAO | _PAGE_NON_IDEMPOTENT | _PAGE_TOLERANT) | ||
| 828 | |||
| 831 | #define pgprot_noncached pgprot_noncached | 829 | #define pgprot_noncached pgprot_noncached |
| 832 | static inline pgprot_t pgprot_noncached(pgprot_t prot) | 830 | static inline pgprot_t pgprot_noncached(pgprot_t prot) |
| 833 | { | 831 | { |
| @@ -9,6 +9,11 @@ · 8 unmodified lines | |||
| 9 | 9 | ||
| 10 | #ifndef __ASSEMBLY__ | 10 | #ifndef __ASSEMBLY__ |
| 11 | 11 | ||
| 12 | /* | ||
| 13 | * Added to include __machine_check_early_realmode_* functions | ||
| 14 | */ | ||
| 15 | #include <asm/mce.h> | ||
| 16 | |||
| 12 | /* This structure can grow, it's real size is used by head.S code | 17 | /* This structure can grow, it's real size is used by head.S code |
| 13 | * via the mkdefs mechanism. | 18 | * via the mkdefs mechanism. |
| 14 | */ | 19 | */ |
| @@ -191,7 +196,7 @@ static inline void cpu_feature_keys_init(void) { } · 176 unmodified lines | |||
| 191 | #define CPU_FTR_SPURR LONG_ASM_CONST(0x0000000001000000) | 196 | #define CPU_FTR_SPURR LONG_ASM_CONST(0x0000000001000000) |
| 192 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0000000002000000) | 197 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0000000002000000) |
| 193 | #define CPU_FTR_VSX LONG_ASM_CONST(0x0000000004000000) | 198 | #define CPU_FTR_VSX LONG_ASM_CONST(0x0000000004000000) |
| 194 | // Free LONG_ASM_CONST(0x0000000008000000) | 199 | #define CPU_FTR_SAO LONG_ASM_CONST(0x0000000008000000) |
| 195 | #define CPU_FTR_CP_USE_DCBTZ LONG_ASM_CONST(0x0000000010000000) | 200 | #define CPU_FTR_CP_USE_DCBTZ LONG_ASM_CONST(0x0000000010000000) |
| 196 | #define CPU_FTR_UNALIGNED_LD_STD LONG_ASM_CONST(0x0000000020000000) | 201 | #define CPU_FTR_UNALIGNED_LD_STD LONG_ASM_CONST(0x0000000020000000) |
| 197 | #define CPU_FTR_ASYM_SMT LONG_ASM_CONST(0x0000000040000000) | 202 | #define CPU_FTR_ASYM_SMT LONG_ASM_CONST(0x0000000040000000) |
| @@ -436,7 +441,7 @@ static inline void cpu_feature_keys_init(void) { } · 238 unmodified lines | |||
| 436 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 441 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
| 437 | CPU_FTR_COHERENT_ICACHE | \ | 442 | CPU_FTR_COHERENT_ICACHE | \ |
| 438 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 443 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
| 439 | CPU_FTR_DSCR | CPU_FTR_ASYM_SMT | \ | 444 | CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ |
| 440 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ | 445 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
| 441 | CPU_FTR_CFAR | CPU_FTR_HVMODE | \ | 446 | CPU_FTR_CFAR | CPU_FTR_HVMODE | \ |
| 442 | CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX ) | 447 | CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX ) |
| @@ -445,7 +450,7 @@ static inline void cpu_feature_keys_init(void) { } · 2 unmodified lines | |||
| 445 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 450 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
| 446 | CPU_FTR_COHERENT_ICACHE | \ | 451 | CPU_FTR_COHERENT_ICACHE | \ |
| 447 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 452 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
| 448 | CPU_FTR_DSCR | \ | 453 | CPU_FTR_DSCR | CPU_FTR_SAO | \ |
| 449 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ | 454 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
| 450 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ | 455 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
| 451 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ | 456 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ |
| @@ -456,7 +461,7 @@ static inline void cpu_feature_keys_init(void) { } · 4 unmodified lines | |||
| 456 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 461 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
| 457 | CPU_FTR_COHERENT_ICACHE | \ | 462 | CPU_FTR_COHERENT_ICACHE | \ |
| 458 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 463 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
| 459 | CPU_FTR_DSCR | \ | 464 | CPU_FTR_DSCR | CPU_FTR_SAO | \ |
| 460 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ | 465 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
| 461 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ | 466 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
| 462 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ | 467 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ |
| @@ -474,7 +479,7 @@ static inline void cpu_feature_keys_init(void) { } · 11 unmodified lines | |||
| 474 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 479 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
| 475 | CPU_FTR_COHERENT_ICACHE | \ | 480 | CPU_FTR_COHERENT_ICACHE | \ |
| 476 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ | 481 | CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ |
| 477 | CPU_FTR_DSCR | \ | 482 | CPU_FTR_DSCR | CPU_FTR_SAO | \ |
| 478 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ | 483 | CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ |
| 479 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ | 484 | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ |
| 480 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ | 485 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ |
| @@ -52,7 +52,7 @@ enum fixed_addresses { · 51 unmodified lines | |||
| 52 | FIX_HOLE, | 52 | FIX_HOLE, |
| 53 | /* reserve the top 128K for early debugging purposes */ | 53 | /* reserve the top 128K for early debugging purposes */ |
| 54 | FIX_EARLY_DEBUG_TOP = FIX_HOLE, | 54 | FIX_EARLY_DEBUG_TOP = FIX_HOLE, |
| 55 | FIX_EARLY_DEBUG_BASE = FIX_EARLY_DEBUG_TOP+(ALIGN(SZ_128, PAGE_SIZE)/PAGE_SIZE)-1, | 55 | FIX_EARLY_DEBUG_BASE = FIX_EARLY_DEBUG_TOP+(ALIGN(SZ_128K, PAGE_SIZE)/PAGE_SIZE)-1, |
| 56 | #ifdef CONFIG_HIGHMEM | 56 | #ifdef CONFIG_HIGHMEM |
| 57 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | 57 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ |
| 58 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, | 58 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, |
| @@ -200,17 +200,14 @@ static inline bool arch_irqs_disabled(void) · 199 unmodified lines | |||
| 200 | #define powerpc_local_irq_pmu_save(flags) \ | 200 | #define powerpc_local_irq_pmu_save(flags) \ |
| 201 | do { \ | 201 | do { \ |
| 202 | raw_local_irq_pmu_save(flags); \ | 202 | raw_local_irq_pmu_save(flags); \ |
| 203 | trace_hardirqs_off(); \ | 203 | if (!raw_irqs_disabled_flags(flags)) \ |
| 204 | trace_hardirqs_off(); \ | ||
| 204 | } while(0) | 205 | } while(0) |
| 205 | #define powerpc_local_irq_pmu_restore(flags) \ | 206 | #define powerpc_local_irq_pmu_restore(flags) \ |
| 206 | do { \ | 207 | do { \ |
| 207 | if (raw_irqs_disabled_flags(flags)) { \ | 208 | if (!raw_irqs_disabled_flags(flags)) \ |
| 208 | raw_local_irq_pmu_restore(flags); \ | ||
| 209 | trace_hardirqs_off(); \ | ||
| 210 | } else { \ | ||
| 211 | trace_hardirqs_on(); \ | 209 | trace_hardirqs_on(); \ |
| 212 | raw_local_irq_pmu_restore(flags); \ | 210 | raw_local_irq_pmu_restore(flags); \ |
| 213 | } \ | ||
| 214 | } while(0) | 211 | } while(0) |
| 215 | #else | 212 | #else |
| 216 | #define powerpc_local_irq_pmu_save(flags) \ | 213 | #define powerpc_local_irq_pmu_save(flags) \ |
| @@ -15,11 +15,18 @@ · 14 unmodified lines | |||
| 15 | #ifndef __ASSEMBLY__ | 15 | #ifndef __ASSEMBLY__ |
| 16 | 16 | ||
| 17 | #include <asm/page.h> | 17 | #include <asm/page.h> |
| 18 | #include <linux/sizes.h> | ||
| 18 | 19 | ||
| 19 | #define KASAN_SHADOW_SCALE_SHIFT 3 | 20 | #define KASAN_SHADOW_SCALE_SHIFT 3 |
| 20 | 21 | ||
| 22 | #if defined(CONFIG_PPC_BOOK3S_32) && defined(CONFIG_MODULES) && defined(CONFIG_STRICT_KERNEL_RWX) | ||
| 23 | #define KASAN_KERN_START ALIGN_DOWN(PAGE_OFFSET - SZ_256M, SZ_256M) | ||
| 24 | #else | ||
| 25 | #define KASAN_KERN_START PAGE_OFFSET | ||
| 26 | #endif | ||
| 27 | |||
| 21 | #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ | 28 | #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ |
| 22 | (PAGE_OFFSET >> KASAN_SHADOW_SCALE_SHIFT)) | 29 | (KASAN_KERN_START >> KASAN_SHADOW_SCALE_SHIFT)) |
| 23 | 30 | ||
| 24 | #define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET) | 31 | #define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET) |
| 25 | 32 | ||
| @@ -58,7 +58,8 @@ · 57 unmodified lines | |||
| 58 | #define KVM_ARCH_WANT_MMU_NOTIFIER | 58 | #define KVM_ARCH_WANT_MMU_NOTIFIER |
| 59 | 59 | ||
| 60 | extern int kvm_unmap_hva_range(struct kvm *kvm, | 60 | extern int kvm_unmap_hva_range(struct kvm *kvm, |
| 61 | unsigned long start, unsigned long end); | 61 | unsigned long start, unsigned long end, |
| 62 | unsigned flags); | ||
| 62 | extern int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); | 63 | extern int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); |
| 63 | extern int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); | 64 | extern int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); |
| 64 | extern int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | 65 | extern int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); |
| @@ -210,6 +210,9 @@ struct mce_error_info { · 209 unmodified lines | |||
| 210 | #define MCE_EVENT_RELEASE true | 210 | #define MCE_EVENT_RELEASE true |
| 211 | #define MCE_EVENT_DONTRELEASE false | 211 | #define MCE_EVENT_DONTRELEASE false |
| 212 | 212 | ||
| 213 | struct pt_regs; | ||
| 214 | struct notifier_block; | ||
| 215 | |||
| 213 | extern void save_mce_event(struct pt_regs *regs, long handled, | 216 | extern void save_mce_event(struct pt_regs *regs, long handled, |
| 214 | struct mce_error_info *mce_err, uint64_t nip, | 217 | struct mce_error_info *mce_err, uint64_t nip, |
| 215 | uint64_t addr, uint64_t phys_addr); | 218 | uint64_t addr, uint64_t phys_addr); |
| @@ -225,5 +228,9 @@ int mce_register_notifier(struct notifier_block *nb); · 9 unmodified lines | |||
| 225 | int mce_unregister_notifier(struct notifier_block *nb); | 228 | int mce_unregister_notifier(struct notifier_block *nb); |
| 226 | #ifdef CONFIG_PPC_BOOK3S_64 | 229 | #ifdef CONFIG_PPC_BOOK3S_64 |
| 227 | void flush_and_reload_slb(void); | 230 | void flush_and_reload_slb(void); |
| 231 | long __machine_check_early_realmode_p7(struct pt_regs *regs); | ||
| 232 | long __machine_check_early_realmode_p8(struct pt_regs *regs); | ||
| 233 | long __machine_check_early_realmode_p9(struct pt_regs *regs); | ||
| 234 | long __machine_check_early_realmode_p10(struct pt_regs *regs); | ||
| 228 | #endif /* CONFIG_PPC_BOOK3S_64 */ | 235 | #endif /* CONFIG_PPC_BOOK3S_64 */ |
| 229 | #endif /* __ASM_PPC64_MCE_H__ */ | 236 | #endif /* __ASM_PPC64_MCE_H__ */ |
| @@ -13,20 +13,43 @@ · 12 unmodified lines | |||
| 13 | #include <linux/pkeys.h> | 13 | #include <linux/pkeys.h> |
| 14 | #include <asm/cpu_has_feature.h> | 14 | #include <asm/cpu_has_feature.h> |
| 15 | 15 | ||
| 16 | #ifdef CONFIG_PPC_MEM_KEYS | ||
| 17 | static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot, | 16 | static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot, |
| 18 | unsigned long pkey) | 17 | unsigned long pkey) |
| 19 | { | 18 | { |
| 20 | return pkey_to_vmflag_bits(pkey); | 19 | #ifdef CONFIG_PPC_MEM_KEYS |
| 20 | return (((prot & PROT_SAO) ? VM_SAO : 0) | pkey_to_vmflag_bits(pkey)); | ||
| 21 | #else | ||
| 22 | return ((prot & PROT_SAO) ? VM_SAO : 0); | ||
| 23 | #endif | ||
| 21 | } | 24 | } |
| 22 | #define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey) | 25 | #define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey) |
| 23 | 26 | ||
| 24 | static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) | 27 | static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags) |
| 25 | { | 28 | { |
| 26 | return __pgprot(vmflag_to_pte_pkey_bits(vm_flags)); | 29 | #ifdef CONFIG_PPC_MEM_KEYS |
| 30 | return (vm_flags & VM_SAO) ? | ||
| 31 | __pgprot(_PAGE_SAO | vmflag_to_pte_pkey_bits(vm_flags)) : | ||
| 32 | __pgprot(0 | vmflag_to_pte_pkey_bits(vm_flags)); | ||
| 33 | #else | ||
| 34 | return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0); | ||
| 35 | #endif | ||
| 27 | } | 36 | } |
| 28 | #define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) | 37 | #define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags) |
| 29 | #endif | 38 | |
| 39 | static inline bool arch_validate_prot(unsigned long prot, unsigned long addr) | ||
| 40 | { | ||
| 41 | if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO)) | ||
| 42 | return false; | ||
| 43 | if (prot & PROT_SAO) { | ||
| 44 | if (!cpu_has_feature(CPU_FTR_SAO)) | ||
| 45 | return false; | ||
| 46 | if (firmware_has_feature(FW_FEATURE_LPAR) && | ||
| 47 | !IS_ENABLED(CONFIG_PPC_PROT_SAO_LPAR)) | ||
| 48 | return false; | ||
| 49 | } | ||
| 50 | return true; | ||
| 51 | } | ||
| 52 | #define arch_validate_prot arch_validate_prot | ||
| 30 | 53 | ||
| 31 | #endif /* CONFIG_PPC64 */ | 54 | #endif /* CONFIG_PPC64 */ |
| 32 | #endif /* _ASM_POWERPC_MMAN_H */ | 55 | #endif /* _ASM_POWERPC_MMAN_H */ |
| @@ -82,6 +82,8 @@ · 81 unmodified lines | |||
| 82 | */ | 82 | */ |
| 83 | #include <asm/nohash/pte-book3e.h> | 83 | #include <asm/nohash/pte-book3e.h> |
| 84 | 84 | ||
| 85 | #define _PAGE_SAO 0 | ||
| 86 | |||
| 85 | #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1)) | 87 | #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1)) |
| 86 | 88 | ||
| 87 | /* | 89 | /* |
| @@ -40,4 +40,7 @@ static inline bool is_sier_available(void) { return false; } · 39 unmodified lines | |||
| 40 | 40 | ||
| 41 | /* To support perf_regs sier update */ | 41 | /* To support perf_regs sier update */ |
| 42 | extern bool is_sier_available(void); | 42 | extern bool is_sier_available(void); |
| 43 | /* To define perf extended regs mask value */ | ||
| 44 | extern u64 PERF_REG_EXTENDED_MASK; | ||
| 45 | #define PERF_REG_EXTENDED_MASK PERF_REG_EXTENDED_MASK | ||
| 43 | #endif | 46 | #endif |
| @@ -62,6 +62,11 @@ struct power_pmu { · 61 unmodified lines | |||
| 62 | int *blacklist_ev; | 62 | int *blacklist_ev; |
| 63 | /* BHRB entries in the PMU */ | 63 | /* BHRB entries in the PMU */ |
| 64 | int bhrb_nr; | 64 | int bhrb_nr; |
| 65 | /* | ||
| 66 | * set this flag with `PERF_PMU_CAP_EXTENDED_REGS` if | ||
| 67 | * the pmu supports extended perf regs capability | ||
| 68 | */ | ||
| 69 | int capabilities; | ||
| 65 | }; | 70 | }; |
| 66 | 71 | ||
| 67 | /* | 72 | /* |
| @@ -11,7 +11,7 @@ · 10 unmodified lines | |||
| 11 | #include <asm-generic/mman-common.h> | 11 | #include <asm-generic/mman-common.h> |
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | #define PROT_SAO 0x10 /* Unsupported since v5.9 */ | 14 | #define PROT_SAO 0x10 /* Strong Access Ordering */ |
| 15 | 15 | ||
| 16 | #define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */ | 16 | #define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */ |
| 17 | #define MAP_NORESERVE 0x40 /* don't reserve swap pages */ | 17 | #define MAP_NORESERVE 0x40 /* don't reserve swap pages */ |
| @@ -48,6 +48,24 @@ enum perf_event_powerpc_regs { · 47 unmodified lines | |||
| 48 | PERF_REG_POWERPC_DSISR, | 48 | PERF_REG_POWERPC_DSISR, |
| 49 | PERF_REG_POWERPC_SIER, | 49 | PERF_REG_POWERPC_SIER, |
| 50 | PERF_REG_POWERPC_MMCRA, | 50 | PERF_REG_POWERPC_MMCRA, |
| 51 | PERF_REG_POWERPC_MAX, | 51 | /* Extended registers */ |
| 52 | PERF_REG_POWERPC_MMCR0, | ||
| 53 | PERF_REG_POWERPC_MMCR1, | ||
| 54 | PERF_REG_POWERPC_MMCR2, | ||
| 55 | PERF_REG_POWERPC_MMCR3, | ||
| 56 | PERF_REG_POWERPC_SIER2, | ||
| 57 | PERF_REG_POWERPC_SIER3, | ||
| 58 | /* Max regs without the extended regs */ | ||
| 59 | PERF_REG_POWERPC_MAX = PERF_REG_POWERPC_MMCRA + 1, | ||
| 52 | }; | 60 | }; |
| 61 | |||
| 62 | #define PERF_REG_PMU_MASK ((1ULL << PERF_REG_POWERPC_MAX) - 1) | ||
| 63 | |||
| 64 | /* PERF_REG_EXTENDED_MASK value for CPU_FTR_ARCH_300 */ | ||
| 65 | #define PERF_REG_PMU_MASK_300 (((1ULL << (PERF_REG_POWERPC_MMCR2 + 1)) - 1) - PERF_REG_PMU_MASK) | ||
| 66 | /* PERF_REG_EXTENDED_MASK value for CPU_FTR_ARCH_31 */ | ||
| 67 | #define PERF_REG_PMU_MASK_31 (((1ULL << (PERF_REG_POWERPC_SIER3 + 1)) - 1) - PERF_REG_PMU_MASK) | ||
| 68 | |||
| 69 | #define PERF_REG_MAX_ISA_300 (PERF_REG_POWERPC_MMCR2 + 1) | ||
| 70 | #define PERF_REG_MAX_ISA_31 (PERF_REG_POWERPC_SIER3 + 1) | ||
| 53 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ | 71 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ |
| @@ -72,9 +72,6 @@ extern void __setup_cpu_power9(unsigned long offset, struct cpu_spec* spec); · 71 unmodified lines | |||
| 72 | extern void __restore_cpu_power9(void); | 72 | extern void __restore_cpu_power9(void); |
| 73 | extern void __setup_cpu_power10(unsigned long offset, struct cpu_spec* spec); | 73 | extern void __setup_cpu_power10(unsigned long offset, struct cpu_spec* spec); |
| 74 | extern void __restore_cpu_power10(void); | 74 | extern void __restore_cpu_power10(void); |
| 75 | extern long __machine_check_early_realmode_p7(struct pt_regs *regs); | ||
| 76 | extern long __machine_check_early_realmode_p8(struct pt_regs *regs); | ||
| 77 | extern long __machine_check_early_realmode_p9(struct pt_regs *regs); | ||
| 78 | #endif /* CONFIG_PPC64 */ | 75 | #endif /* CONFIG_PPC64 */ |
| 79 | #if defined(CONFIG_E500) | 76 | #if defined(CONFIG_E500) |
| 80 | extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec); | 77 | extern void __setup_cpu_e5500(unsigned long offset, struct cpu_spec* spec); |
| @@ -542,6 +539,25 @@ static struct cpu_spec __initdata cpu_specs[] = { · 461 unmodified lines | |||
| 542 | .machine_check_early = __machine_check_early_realmode_p9, | 539 | .machine_check_early = __machine_check_early_realmode_p9, |
| 543 | .platform = "power9", | 540 | .platform = "power9", |
| 544 | }, | 541 | }, |
| 542 | { /* Power10 */ | ||
| 543 | .pvr_mask = 0xffff0000, | ||
| 544 | .pvr_value = 0x00800000, | ||
| 545 | .cpu_name = "POWER10 (raw)", | ||
| 546 | .cpu_features = CPU_FTRS_POWER10, | ||
| 547 | .cpu_user_features = COMMON_USER_POWER10, | ||
| 548 | .cpu_user_features2 = COMMON_USER2_POWER10, | ||
| 549 | .mmu_features = MMU_FTRS_POWER10, | ||
| 550 | .icache_bsize = 128, | ||
| 551 | .dcache_bsize = 128, | ||
| 552 | .num_pmcs = 6, | ||
| 553 | .pmc_type = PPC_PMC_IBM, | ||
| 554 | .oprofile_cpu_type = "ppc64/power10", | ||
| 555 | .oprofile_type = PPC_OPROFILE_INVALID, | ||
| 556 | .cpu_setup = __setup_cpu_power10, | ||
| 557 | .cpu_restore = __restore_cpu_power10, | ||
| 558 | .machine_check_early = __machine_check_early_realmode_p10, | ||
| 559 | .platform = "power10", | ||
| 560 | }, | ||
| 545 | { /* Cell Broadband Engine */ | 561 | { /* Cell Broadband Engine */ |
| 546 | .pvr_mask = 0xffff0000, | 562 | .pvr_mask = 0xffff0000, |
| 547 | .pvr_value = 0x00700000, | 563 | .pvr_value = 0x00700000, |
| @@ -64,10 +64,6 @@ struct dt_cpu_feature { · 63 unmodified lines | |||
| 64 | * Set up the base CPU | 64 | * Set up the base CPU |
| 65 | */ | 65 | */ |
| 66 | 66 | ||
| 67 | extern long __machine_check_early_realmode_p8(struct pt_regs *regs); | ||
| 68 | extern long __machine_check_early_realmode_p9(struct pt_regs *regs); | ||
| 69 | extern long __machine_check_early_realmode_p10(struct pt_regs *regs); | ||
| 70 | |||
| 71 | static int hv_mode; | 67 | static int hv_mode; |
| 72 | 68 | ||
| 73 | static struct { | 69 | static struct { |
| @@ -657,7 +653,7 @@ static struct dt_cpu_feature_match __initdata · 583 unmodified lines | |||
| 657 | {"processor-control-facility-v3", feat_enable_dbell, CPU_FTR_DBELL}, | 653 | {"processor-control-facility-v3", feat_enable_dbell, CPU_FTR_DBELL}, |
| 658 | {"processor-utilization-of-resources-register", feat_enable_purr, 0}, | 654 | {"processor-utilization-of-resources-register", feat_enable_purr, 0}, |
| 659 | {"no-execute", feat_enable, 0}, | 655 | {"no-execute", feat_enable, 0}, |
| 660 | /* strong-access-ordering is unused */ | 656 | {"strong-access-ordering", feat_enable, CPU_FTR_SAO}, |
| 661 | {"cache-inhibited-large-page", feat_enable_large_ci, 0}, | 657 | {"cache-inhibited-large-page", feat_enable_large_ci, 0}, |
| 662 | {"coprocessor-icswx", feat_enable, 0}, | 658 | {"coprocessor-icswx", feat_enable, 0}, |
| 663 | {"hypervisor-virtualization-interrupt", feat_enable_hvi, 0}, | 659 | {"hypervisor-virtualization-interrupt", feat_enable_hvi, 0}, |
| @@ -113,6 +113,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM) · 112 unmodified lines | |||
| 113 | ld r11,exception_marker@toc(r2) | 113 | ld r11,exception_marker@toc(r2) |
| 114 | std r11,-16(r10) /* "regshere" marker */ | 114 | std r11,-16(r10) /* "regshere" marker */ |
| 115 | 115 | ||
| 116 | BEGIN_FTR_SECTION | ||
| 117 | HMT_MEDIUM | ||
| 118 | END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) | ||
| 119 | |||
| 116 | /* | 120 | /* |
| 117 | * RECONCILE_IRQ_STATE without calling trace_hardirqs_off(), which | 121 | * RECONCILE_IRQ_STATE without calling trace_hardirqs_off(), which |
| 118 | * would clobber syscall parameters. Also we always enter with IRQs | 122 | * would clobber syscall parameters. Also we always enter with IRQs |
| @@ -548,7 +548,7 @@ void notrace restore_math(struct pt_regs *regs) · 547 unmodified lines | |||
| 548 | * are live for the user thread). | 548 | * are live for the user thread). |
| 549 | */ | 549 | */ |
| 550 | if ((!(msr & MSR_FP)) && should_restore_fp()) | 550 | if ((!(msr & MSR_FP)) && should_restore_fp()) |
| 551 | new_msr |= MSR_FP | current->thread.fpexc_mode; | 551 | new_msr |= MSR_FP; |
| 552 | 552 | ||
| 553 | if ((!(msr & MSR_VEC)) && should_restore_altivec()) | 553 | if ((!(msr & MSR_VEC)) && should_restore_altivec()) |
| 554 | new_msr |= MSR_VEC; | 554 | new_msr |= MSR_VEC; |
| @@ -559,11 +559,17 @@ void notrace restore_math(struct pt_regs *regs) · 4 unmodified lines | |||
| 559 | } | 559 | } |
| 560 | 560 | ||
| 561 | if (new_msr) { | 561 | if (new_msr) { |
| 562 | unsigned long fpexc_mode = 0; | ||
| 563 | |||
| 562 | msr_check_and_set(new_msr); | 564 | msr_check_and_set(new_msr); |
| 563 | 565 | ||
| 564 | if (new_msr & MSR_FP) | 566 | if (new_msr & MSR_FP) { |
| 565 | do_restore_fp(); | 567 | do_restore_fp(); |
| 566 | 568 | ||
| 569 | // This also covers VSX, because VSX implies FP | ||
| 570 | fpexc_mode = current->thread.fpexc_mode; | ||
| 571 | } | ||
| 572 | |||
| 567 | if (new_msr & MSR_VEC) | 573 | if (new_msr & MSR_VEC) |
| 568 | do_restore_altivec(); | 574 | do_restore_altivec(); |
| 569 | 575 | ||
| @@ -572,7 +578,7 @@ void notrace restore_math(struct pt_regs *regs) · 2 unmodified lines | |||
| 572 | 578 | ||
| 573 | msr_check_and_clear(new_msr); | 579 | msr_check_and_clear(new_msr); |
| 574 | 580 | ||
| 575 | regs->msr |= new_msr; | 581 | regs->msr |= new_msr | fpexc_mode; |
| 576 | } | 582 | } |
| 577 | } | 583 | } |
| 578 | #endif | 584 | #endif |
| @@ -311,6 +311,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) · 310 unmodified lines | |||
| 311 | min = pvr & 0xFF; | 311 | min = pvr & 0xFF; |
| 312 | break; | 312 | break; |
| 313 | case 0x004e: /* POWER9 bits 12-15 give chip type */ | 313 | case 0x004e: /* POWER9 bits 12-15 give chip type */ |
| 314 | case 0x0080: /* POWER10 bit 12 gives SMT8/4 */ | ||
| 314 | maj = (pvr >> 8) & 0x0F; | 315 | maj = (pvr >> 8) & 0x0F; |
| 315 | min = pvr & 0xFF; | 316 | min = pvr & 0xFF; |
| 316 | break; | 317 | break; |
| @@ -834,7 +834,8 @@ void kvmppc_core_commit_memory_region(struct kvm *kvm, · 833 unmodified lines | |||
| 834 | kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new, change); | 834 | kvm->arch.kvm_ops->commit_memory_region(kvm, mem, old, new, change); |
| 835 | } | 835 | } |
| 836 | 836 | ||
| 837 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) | 837 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
| 838 | unsigned flags) | ||
| 838 | { | 839 | { |
| 839 | return kvm->arch.kvm_ops->unmap_hva_range(kvm, start, end); | 840 | return kvm->arch.kvm_ops->unmap_hva_range(kvm, start, end); |
| 840 | } | 841 | } |
| @@ -734,7 +734,8 @@ static int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) · 733 unmodified lines | |||
| 734 | return 0; | 734 | return 0; |
| 735 | } | 735 | } |
| 736 | 736 | ||
| 737 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) | 737 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
| 738 | unsigned flags) | ||
| 738 | { | 739 | { |
| 739 | /* kvm_unmap_hva flushes everything anyways */ | 740 | /* kvm_unmap_hva flushes everything anyways */ |
| 740 | kvm_unmap_hva(kvm, start); | 741 | kvm_unmap_hva(kvm, start); |
| @@ -191,10 +191,17 @@ static bool is_module_segment(unsigned long addr) · 190 unmodified lines | |||
| 191 | { | 191 | { |
| 192 | if (!IS_ENABLED(CONFIG_MODULES)) | 192 | if (!IS_ENABLED(CONFIG_MODULES)) |
| 193 | return false; | 193 | return false; |
| 194 | #ifdef MODULES_VADDR | ||
| 195 | if (addr < ALIGN_DOWN(MODULES_VADDR, SZ_256M)) | ||
| 196 | return false; | ||
| 197 | if (addr > ALIGN(MODULES_END, SZ_256M) - 1) | ||
| 198 | return false; | ||
| 199 | #else | ||
| 194 | if (addr < ALIGN_DOWN(VMALLOC_START, SZ_256M)) | 200 | if (addr < ALIGN_DOWN(VMALLOC_START, SZ_256M)) |
| 195 | return false; | 201 | return false; |
| 196 | if (addr >= ALIGN(VMALLOC_END, SZ_256M)) | 202 | if (addr > ALIGN(VMALLOC_END, SZ_256M) - 1) |
| 197 | return false; | 203 | return false; |
| 204 | #endif | ||
| 198 | return true; | 205 | return true; |
| 199 | } | 206 | } |
| 200 | 207 | ||
| @@ -232,6 +232,8 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags) · 231 unmodified lines | |||
| 232 | rflags |= HPTE_R_I; | 232 | rflags |= HPTE_R_I; |
| 233 | else if ((pteflags & _PAGE_CACHE_CTL) == _PAGE_NON_IDEMPOTENT) | 233 | else if ((pteflags & _PAGE_CACHE_CTL) == _PAGE_NON_IDEMPOTENT) |
| 234 | rflags |= (HPTE_R_I | HPTE_R_G); | 234 | rflags |= (HPTE_R_I | HPTE_R_G); |
| 235 | else if ((pteflags & _PAGE_CACHE_CTL) == _PAGE_SAO) | ||
| 236 | rflags |= (HPTE_R_W | HPTE_R_I | HPTE_R_M); | ||
| 235 | else | 237 | else |
| 236 | /* | 238 | /* |
| 237 | * Add memory coherence if cache inhibited is not set | 239 | * Add memory coherence if cache inhibited is not set |
| @@ -1115,8 +1117,10 @@ void hash__early_init_mmu_secondary(void) · 877 unmodified lines | |||
| 1115 | && cpu_has_feature(CPU_FTR_HVMODE)) | 1117 | && cpu_has_feature(CPU_FTR_HVMODE)) |
| 1116 | tlbiel_all(); | 1118 | tlbiel_all(); |
| 1117 | 1119 | ||
| 1118 | if (IS_ENABLED(CONFIG_PPC_MEM_KEYS) && mmu_has_feature(MMU_FTR_PKEY)) | 1120 | #ifdef CONFIG_PPC_MEM_KEYS |
| 1121 | if (mmu_has_feature(MMU_FTR_PKEY)) | ||
| 1119 | mtspr(SPRN_UAMOR, default_uamor); | 1122 | mtspr(SPRN_UAMOR, default_uamor); |
| 1123 | #endif | ||
| 1120 | } | 1124 | } |
| 1121 | #endif /* CONFIG_SMP */ | 1125 | #endif /* CONFIG_SMP */ |
| 1122 | 1126 | ||
| @@ -475,7 +475,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, · 474 unmodified lines | |||
| 475 | case BPF_JMP | BPF_JSET | BPF_K: | 475 | case BPF_JMP | BPF_JSET | BPF_K: |
| 476 | case BPF_JMP | BPF_JSET | BPF_X: | 476 | case BPF_JMP | BPF_JSET | BPF_X: |
| 477 | true_cond = COND_NE; | 477 | true_cond = COND_NE; |
| 478 | /* Fall through */ | 478 | fallthrough; |
| 479 | cond_branch: | 479 | cond_branch: |
| 480 | /* same targets, can avoid doing the test :) */ | 480 | /* same targets, can avoid doing the test :) */ |
| 481 | if (filter[i].jt == filter[i].jf) { | 481 | if (filter[i].jt == filter[i].jf) { |
| @@ -1557,9 +1557,16 @@ nocheck: · 1556 unmodified lines | |||
| 1557 | ret = 0; | 1557 | ret = 0; |
| 1558 | out: | 1558 | out: |
| 1559 | if (has_branch_stack(event)) { | 1559 | if (has_branch_stack(event)) { |
| 1560 | power_pmu_bhrb_enable(event); | 1560 | u64 bhrb_filter = -1; |
| 1561 | cpuhw->bhrb_filter = ppmu->bhrb_filter_map( | 1561 | |
| 1562 | event->attr.branch_sample_type); | 1562 | if (ppmu->bhrb_filter_map) |
| 1563 | bhrb_filter = ppmu->bhrb_filter_map( | ||
| 1564 | event->attr.branch_sample_type); | ||
| 1565 | |||
| 1566 | if (bhrb_filter != -1) { | ||
| 1567 | cpuhw->bhrb_filter = bhrb_filter; | ||
| 1568 | power_pmu_bhrb_enable(event); | ||
| 1569 | } | ||
| 1563 | } | 1570 | } |
| 1564 | 1571 | ||
| 1565 | perf_pmu_enable(event->pmu); | 1572 | perf_pmu_enable(event->pmu); |
| @@ -1881,7 +1888,6 @@ static int power_pmu_event_init(struct perf_event *event) · 315 unmodified lines | |||
| 1881 | int n; | 1888 | int n; |
| 1882 | int err; | 1889 | int err; |
| 1883 | struct cpu_hw_events *cpuhw; | 1890 | struct cpu_hw_events *cpuhw; |
| 1884 | u64 bhrb_filter; | ||
| 1885 | 1891 | ||
| 1886 | if (!ppmu) | 1892 | if (!ppmu) |
| 1887 | return -ENOENT; | 1893 | return -ENOENT; |
| @@ -1987,7 +1993,10 @@ static int power_pmu_event_init(struct perf_event *event) · 99 unmodified lines | |||
| 1987 | err = power_check_constraints(cpuhw, events, cflags, n + 1); | 1993 | err = power_check_constraints(cpuhw, events, cflags, n + 1); |
| 1988 | 1994 | ||
| 1989 | if (has_branch_stack(event)) { | 1995 | if (has_branch_stack(event)) { |
| 1990 | bhrb_filter = ppmu->bhrb_filter_map( | 1996 | u64 bhrb_filter = -1; |
| 1997 | |||
| 1998 | if (ppmu->bhrb_filter_map) | ||
| 1999 | bhrb_filter = ppmu->bhrb_filter_map( | ||
| 1991 | event->attr.branch_sample_type); | 2000 | event->attr.branch_sample_type); |
| 1992 | 2001 | ||
| 1993 | if (bhrb_filter == -1) { | 2002 | if (bhrb_filter == -1) { |
| @@ -2141,6 +2150,10 @@ static void record_and_restart(struct perf_event *event, unsigned long val, · 147 unmodified lines | |||
| 2141 | 2150 | ||
| 2142 | if (perf_event_overflow(event, &data, regs)) | 2151 | if (perf_event_overflow(event, &data, regs)) |
| 2143 | power_pmu_stop(event, 0); | 2152 | power_pmu_stop(event, 0); |
| 2153 | } else if (period) { | ||
| 2154 | /* Account for interrupt in case of invalid SIAR */ | ||
| 2155 | if (perf_event_account_interrupt(event)) | ||
| 2156 | power_pmu_stop(event, 0); | ||
| 2144 | } | 2157 | } |
| 2145 | } | 2158 | } |
| 2146 | 2159 | ||
| @@ -2323,6 +2336,7 @@ int register_power_pmu(struct power_pmu *pmu) · 176 unmodified lines | |||
| 2323 | pmu->name); | 2336 | pmu->name); |
| 2324 | 2337 | ||
| 2325 | power_pmu.attr_groups = ppmu->attr_groups; | 2338 | power_pmu.attr_groups = ppmu->attr_groups; |
| 2339 | power_pmu.capabilities |= (ppmu->capabilities & PERF_PMU_CAP_EXTENDED_REGS); | ||
| 2326 | 2340 | ||
| 2327 | #ifdef MSR_HV | 2341 | #ifdef MSR_HV |
| 2328 | /* | 2342 | /* |
| @@ -1128,6 +1128,15 @@ static struct bin_attribute *if_bin_attrs[] = { · 1127 unmodified lines | |||
| 1128 | NULL, | 1128 | NULL, |
| 1129 | }; | 1129 | }; |
| 1130 | 1130 | ||
| 1131 | static struct attribute *cpumask_attrs[] = { | ||
| 1132 | &dev_attr_cpumask.attr, | ||
| 1133 | NULL, | ||
| 1134 | }; | ||
| 1135 | |||
| 1136 | static struct attribute_group cpumask_attr_group = { | ||
| 1137 | .attrs = cpumask_attrs, | ||
| 1138 | }; | ||
| 1139 | |||
| 1131 | static struct attribute *if_attrs[] = { | 1140 | static struct attribute *if_attrs[] = { |
| 1132 | &dev_attr_catalog_len.attr, | 1141 | &dev_attr_catalog_len.attr, |
| 1133 | &dev_attr_catalog_version.attr, | 1142 | &dev_attr_catalog_version.attr, |
| @@ -1135,7 +1144,6 @@ static struct attribute *if_attrs[] = { · 1 unmodified line | |||
| 1135 | &dev_attr_sockets.attr, | 1144 | &dev_attr_sockets.attr, |
| 1136 | &dev_attr_chipspersocket.attr, | 1145 | &dev_attr_chipspersocket.attr, |
| 1137 | &dev_attr_coresperchip.attr, | 1146 | &dev_attr_coresperchip.attr, |
| 1138 | &dev_attr_cpumask.attr, | ||
| 1139 | NULL, | 1147 | NULL, |
| 1140 | }; | 1148 | }; |
| 1141 | 1149 | ||
| @@ -1151,6 +1159,7 @@ static const struct attribute_group *attr_groups[] = { · 9 unmodified lines | |||
| 1151 | &event_desc_group, | 1159 | &event_desc_group, |
| 1152 | &event_long_desc_group, | 1160 | &event_long_desc_group, |
| 1153 | &if_group, | 1161 | &if_group, |
| 1162 | &cpumask_attr_group, | ||
| 1154 | NULL, | 1163 | NULL, |
| 1155 | }; | 1164 | }; |
| 1156 | 1165 | ||
| @@ -1289,7 +1289,7 @@ static int trace_imc_prepare_sample(struct trace_imc_data *mem, · 1288 unmodified lines | |||
| 1289 | header->misc = 0; | 1289 | header->misc = 0; |
| 1290 | 1290 | ||
| 1291 | if (cpu_has_feature(CPU_FTR_ARCH_31)) { | 1291 | if (cpu_has_feature(CPU_FTR_ARCH_31)) { |
| 1292 | switch (IMC_TRACE_RECORD_VAL_HVPR(mem->val)) { | 1292 | switch (IMC_TRACE_RECORD_VAL_HVPR(be64_to_cpu(READ_ONCE(mem->val)))) { |
| 1293 | case 0:/* when MSR HV and PR not set in the trace-record */ | 1293 | case 0:/* when MSR HV and PR not set in the trace-record */ |
| 1294 | header->misc |= PERF_RECORD_MISC_GUEST_KERNEL; | 1294 | header->misc |= PERF_RECORD_MISC_GUEST_KERNEL; |
| 1295 | break; | 1295 | break; |
| @@ -1297,7 +1297,7 @@ static int trace_imc_prepare_sample(struct trace_imc_data *mem, · 1 unmodified line | |||
| 1297 | header->misc |= PERF_RECORD_MISC_GUEST_USER; | 1297 | header->misc |= PERF_RECORD_MISC_GUEST_USER; |
| 1298 | break; | 1298 | break; |
| 1299 | case 2: /* MSR HV is 1 and PR is 0 */ | 1299 | case 2: /* MSR HV is 1 and PR is 0 */ |
| 1300 | header->misc |= PERF_RECORD_MISC_HYPERVISOR; | 1300 | header->misc |= PERF_RECORD_MISC_KERNEL; |
| 1301 | break; | 1301 | break; |
| 1302 | case 3: /* MSR HV is 1 and PR is 1 */ | 1302 | case 3: /* MSR HV is 1 and PR is 1 */ |
| 1303 | header->misc |= PERF_RECORD_MISC_USER; | 1303 | header->misc |= PERF_RECORD_MISC_USER; |
| @@ -13,9 +13,11 @@ · 12 unmodified lines | |||
| 13 | #include <asm/ptrace.h> | 13 | #include <asm/ptrace.h> |
| 14 | #include <asm/perf_regs.h> | 14 | #include <asm/perf_regs.h> |
| 15 | 15 | ||
| 16 | u64 PERF_REG_EXTENDED_MASK; | ||
| 17 | |||
| 16 | #define PT_REGS_OFFSET(id, r) [id] = offsetof(struct pt_regs, r) | 18 | #define PT_REGS_OFFSET(id, r) [id] = offsetof(struct pt_regs, r) |
| 17 | 19 | ||
| 18 | #define REG_RESERVED (~((1ULL << PERF_REG_POWERPC_MAX) - 1)) | 20 | #define REG_RESERVED (~(PERF_REG_EXTENDED_MASK | PERF_REG_PMU_MASK)) |
| 19 | 21 | ||
| 20 | static unsigned int pt_regs_offset[PERF_REG_POWERPC_MAX] = { | 22 | static unsigned int pt_regs_offset[PERF_REG_POWERPC_MAX] = { |
| 21 | PT_REGS_OFFSET(PERF_REG_POWERPC_R0, gpr[0]), | 23 | PT_REGS_OFFSET(PERF_REG_POWERPC_R0, gpr[0]), |
| @@ -69,10 +71,36 @@ static unsigned int pt_regs_offset[PERF_REG_POWERPC_MAX] = { · 47 unmodified lines | |||
| 69 | PT_REGS_OFFSET(PERF_REG_POWERPC_MMCRA, dsisr), | 71 | PT_REGS_OFFSET(PERF_REG_POWERPC_MMCRA, dsisr), |
| 70 | }; | 72 | }; |
| 71 | 73 | ||
| 74 | /* Function to return the extended register values */ | ||
| 75 | static u64 get_ext_regs_value(int idx) | ||
| 76 | { | ||
| 77 | switch (idx) { | ||
| 78 | case PERF_REG_POWERPC_MMCR0: | ||
| 79 | return mfspr(SPRN_MMCR0); | ||
| 80 | case PERF_REG_POWERPC_MMCR1: | ||
| 81 | return mfspr(SPRN_MMCR1); | ||
| 82 | case PERF_REG_POWERPC_MMCR2: | ||
| 83 | return mfspr(SPRN_MMCR2); | ||
| 84 | #ifdef CONFIG_PPC64 | ||
| 85 | case PERF_REG_POWERPC_MMCR3: | ||
| 86 | return mfspr(SPRN_MMCR3); | ||
| 87 | case PERF_REG_POWERPC_SIER2: | ||
| 88 | return mfspr(SPRN_SIER2); | ||
| 89 | case PERF_REG_POWERPC_SIER3: | ||
| 90 | return mfspr(SPRN_SIER3); | ||
| 91 | #endif | ||
| 92 | default: return 0; | ||
| 93 | } | ||
| 94 | } | ||
| 95 | |||
| 72 | u64 perf_reg_value(struct pt_regs *regs, int idx) | 96 | u64 perf_reg_value(struct pt_regs *regs, int idx) |
| 73 | { | 97 | { |
| 74 | if (WARN_ON_ONCE(idx >= PERF_REG_POWERPC_MAX)) | 98 | u64 perf_reg_extended_max = PERF_REG_POWERPC_MAX; |
| 75 | return 0; | 99 | |
| 100 | if (cpu_has_feature(CPU_FTR_ARCH_31)) | ||
| 101 | perf_reg_extended_max = PERF_REG_MAX_ISA_31; | ||
| 102 | else if (cpu_has_feature(CPU_FTR_ARCH_300)) | ||
| 103 | perf_reg_extended_max = PERF_REG_MAX_ISA_300; | ||
| 76 | 104 | ||
| 77 | if (idx == PERF_REG_POWERPC_SIER && | 105 | if (idx == PERF_REG_POWERPC_SIER && |
| 78 | (IS_ENABLED(CONFIG_FSL_EMB_PERF_EVENT) || | 106 | (IS_ENABLED(CONFIG_FSL_EMB_PERF_EVENT) || |
| @@ -85,6 +113,16 @@ u64 perf_reg_value(struct pt_regs *regs, int idx) · 6 unmodified lines | |||
| 85 | IS_ENABLED(CONFIG_PPC32))) | 113 | IS_ENABLED(CONFIG_PPC32))) |
| 86 | return 0; | 114 | return 0; |
| 87 | 115 | ||
| 116 | if (idx >= PERF_REG_POWERPC_MAX && idx < perf_reg_extended_max) | ||
| 117 | return get_ext_regs_value(idx); | ||
| 118 | |||
| 119 | /* | ||
| 120 | * If the idx is referring to value beyond the | ||
| 121 | * supported registers, return 0 with a warning | ||
| 122 | */ | ||
| 123 | if (WARN_ON_ONCE(idx >= perf_reg_extended_max)) | ||
| 124 | return 0; | ||
| 125 | |||
| 88 | return regs_get_register(regs, pt_regs_offset[idx]); | 126 | return regs_get_register(regs, pt_regs_offset[idx]); |
| 89 | } | 127 | } |
| 90 | 128 | ||
| @@ -87,6 +87,8 @@ · 86 unmodified lines | |||
| 87 | #define POWER10_MMCRA_IFM3 0x00000000C0000000UL | 87 | #define POWER10_MMCRA_IFM3 0x00000000C0000000UL |
| 88 | #define POWER10_MMCRA_BHRB_MASK 0x00000000C0000000UL | 88 | #define POWER10_MMCRA_BHRB_MASK 0x00000000C0000000UL |
| 89 | 89 | ||
| 90 | extern u64 PERF_REG_EXTENDED_MASK; | ||
| 91 | |||
| 90 | /* Table of alternatives, sorted by column 0 */ | 92 | /* Table of alternatives, sorted by column 0 */ |
| 91 | static const unsigned int power10_event_alternatives[][MAX_ALT] = { | 93 | static const unsigned int power10_event_alternatives[][MAX_ALT] = { |
| 92 | { PM_RUN_CYC_ALT, PM_RUN_CYC }, | 94 | { PM_RUN_CYC_ALT, PM_RUN_CYC }, |
| @@ -397,6 +399,7 @@ static struct power_pmu power10_pmu = { · 304 unmodified lines | |||
| 397 | .cache_events = &power10_cache_events, | 399 | .cache_events = &power10_cache_events, |
| 398 | .attr_groups = power10_pmu_attr_groups, | 400 | .attr_groups = power10_pmu_attr_groups, |
| 399 | .bhrb_nr = 32, | 401 | .bhrb_nr = 32, |
| 402 | .capabilities = PERF_PMU_CAP_EXTENDED_REGS, | ||
| 400 | }; | 403 | }; |
| 401 | 404 | ||
| 402 | int init_power10_pmu(void) | 405 | int init_power10_pmu(void) |
| @@ -408,6 +411,9 @@ int init_power10_pmu(void) · 5 unmodified lines | |||
| 408 | strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power10")) | 411 | strcmp(cur_cpu_spec->oprofile_cpu_type, "ppc64/power10")) |
| 409 | return -ENODEV; | 412 | return -ENODEV; |
| 410 | 413 | ||
| 414 | /* Set the PERF_REG_EXTENDED_MASK here */ | ||
| 415 | PERF_REG_EXTENDED_MASK = PERF_REG_PMU_MASK_31; | ||
| 416 | |||
| 411 | rc = register_power_pmu(&power10_pmu); | 417 | rc = register_power_pmu(&power10_pmu); |
| 412 | if (rc) | 418 | if (rc) |
| 413 | return rc; | 419 | return rc; |
| @@ -90,6 +90,8 @@ enum { · 89 unmodified lines | |||
| 90 | #define POWER9_MMCRA_IFM3 0x00000000C0000000UL | 90 | #define POWER9_MMCRA_IFM3 0x00000000C0000000UL |
| 91 | #define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL | 91 | #define POWER9_MMCRA_BHRB_MASK 0x00000000C0000000UL |
| 92 | 92 | ||
| 93 | extern u64 PERF_REG_EXTENDED_MASK; | ||
| 94 | |||
| 93 | /* Nasty Power9 specific hack */ | 95 | /* Nasty Power9 specific hack */ |
| 94 | #define PVR_POWER9_CUMULUS 0x00002000 | 96 | #define PVR_POWER9_CUMULUS 0x00002000 |
| 95 | 97 | ||
| @@ -434,6 +436,7 @@ static struct power_pmu power9_pmu = { · 338 unmodified lines | |||
| 434 | .cache_events = &power9_cache_events, | 436 | .cache_events = &power9_cache_events, |
| 435 | .attr_groups = power9_pmu_attr_groups, | 437 | .attr_groups = power9_pmu_attr_groups, |
| 436 | .bhrb_nr = 32, | 438 | .bhrb_nr = 32, |
| 439 | .capabilities = PERF_PMU_CAP_EXTENDED_REGS, | ||
| 437 | }; | 440 | }; |
| 438 | 441 | ||
| 439 | int init_power9_pmu(void) | 442 | int init_power9_pmu(void) |
| @@ -457,6 +460,9 @@ int init_power9_pmu(void) · 17 unmodified lines | |||
| 457 | } | 460 | } |
| 458 | } | 461 | } |
| 459 | 462 | ||
| 463 | /* Set the PERF_REG_EXTENDED_MASK here */ | ||
| 464 | PERF_REG_EXTENDED_MASK = PERF_REG_PMU_MASK_300; | ||
| 465 | |||
| 460 | rc = register_power_pmu(&power9_pmu); | 466 | rc = register_power_pmu(&power9_pmu); |
| 461 | if (rc) | 467 | if (rc) |
| 462 | return rc; | 468 | return rc; |
| @@ -36,7 +36,7 @@ config PPC_BOOK3S_6xx · 35 unmodified lines | |||
| 36 | select PPC_HAVE_PMU_SUPPORT | 36 | select PPC_HAVE_PMU_SUPPORT |
| 37 | select PPC_HAVE_KUEP | 37 | select PPC_HAVE_KUEP |
| 38 | select PPC_HAVE_KUAP | 38 | select PPC_HAVE_KUAP |
| 39 | select HAVE_ARCH_VMAP_STACK | 39 | select HAVE_ARCH_VMAP_STACK if !ADB_PMU |
| 40 | 40 | ||
| 41 | config PPC_BOOK3S_601 | 41 | config PPC_BOOK3S_601 |
| 42 | bool "PowerPC 601" | 42 | bool "PowerPC 601" |
| @@ -1223,7 +1223,7 @@ static void __init pnv_probe_idle_states(void) · 1222 unmodified lines | |||
| 1223 | return; | 1223 | return; |
| 1224 | } | 1224 | } |
| 1225 | 1225 | ||
| 1226 | if (pvr_version_is(PVR_POWER9)) | 1226 | if (cpu_has_feature(CPU_FTR_ARCH_300)) |
| 1227 | pnv_power9_idle_init(); | 1227 | pnv_power9_idle_init(); |
| 1228 | 1228 | ||
| 1229 | for (i = 0; i < nr_pnv_idle_states; i++) | 1229 | for (i = 0; i < nr_pnv_idle_states; i++) |
| @@ -2705,7 +2705,7 @@ void pnv_pci_ioda2_release_pe_dma(struct pnv_ioda_pe *pe) · 2704 unmodified lines | |||
| 2705 | struct iommu_table *tbl = pe->table_group.tables[0]; | 2705 | struct iommu_table *tbl = pe->table_group.tables[0]; |
| 2706 | int64_t rc; | 2706 | int64_t rc; |
| 2707 | 2707 | ||
| 2708 | if (pe->dma_setup_done) | 2708 | if (!pe->dma_setup_done) |
| 2709 | return; | 2709 | return; |
| 2710 | 2710 | ||
| 2711 | rc = pnv_pci_ioda2_unset_window(&pe->table_group, 0); | 2711 | rc = pnv_pci_ioda2_unset_window(&pe->table_group, 0); |
| @@ -107,22 +107,28 @@ static int pseries_cpu_disable(void) · 106 unmodified lines | |||
| 107 | */ | 107 | */ |
| 108 | static void pseries_cpu_die(unsigned int cpu) | 108 | static void pseries_cpu_die(unsigned int cpu) |
| 109 | { | 109 | { |
| 110 | int tries; | ||
| 111 | int cpu_status = 1; | 110 | int cpu_status = 1; |
| 112 | unsigned int pcpu = get_hard_smp_processor_id(cpu); | 111 | unsigned int pcpu = get_hard_smp_processor_id(cpu); |
| 112 | unsigned long timeout = jiffies + msecs_to_jiffies(120000); | ||
| 113 | 113 | ||
| 114 | for (tries = 0; tries < 25; tries++) { | 114 | while (true) { |
| 115 | cpu_status = smp_query_cpu_stopped(pcpu); | 115 | cpu_status = smp_query_cpu_stopped(pcpu); |
| 116 | if (cpu_status == QCSS_STOPPED || | 116 | if (cpu_status == QCSS_STOPPED || |
| 117 | cpu_status == QCSS_HARDWARE_ERROR) | 117 | cpu_status == QCSS_HARDWARE_ERROR) |
| 118 | break; | 118 | break; |
| 119 | cpu_relax(); | ||
| 120 | 119 | ||
| 120 | if (time_after(jiffies, timeout)) { | ||
| 121 | pr_warn("CPU %i (hwid %i) didn't die after 120 seconds\n", | ||
| 122 | cpu, pcpu); | ||
| 123 | timeout = jiffies + msecs_to_jiffies(120000); | ||
| 124 | } | ||
| 125 | |||
| 126 | cond_resched(); | ||
| 121 | } | 127 | } |
| 122 | 128 | ||
| 123 | if (cpu_status != 0) { | 129 | if (cpu_status == QCSS_HARDWARE_ERROR) { |
| 124 | printk("Querying DEAD? cpu %i (%i) shows %i\n", | 130 | pr_warn("CPU %i (hwid %i) reported error while dying\n", |
| 125 | cpu, pcpu, cpu_status); | 131 | cpu, pcpu); |
| 126 | } | 132 | } |
| 127 | 133 | ||
| 128 | /* Isolation and deallocation are definitely done by | 134 | /* Isolation and deallocation are definitely done by |
| @@ -184,7 +184,6 @@ static void handle_system_shutdown(char event_modifier) · 183 unmodified lines | |||
| 184 | case EPOW_SHUTDOWN_ON_UPS: | 184 | case EPOW_SHUTDOWN_ON_UPS: |
| 185 | pr_emerg("Loss of system power detected. System is running on" | 185 | pr_emerg("Loss of system power detected. System is running on" |
| 186 | " UPS/battery. Check RTAS error log for details\n"); | 186 | " UPS/battery. Check RTAS error log for details\n"); |
| 187 | orderly_poweroff(true); | ||
| 188 | break; | 187 | break; |
| 189 | 188 | ||
| 190 | case EPOW_SHUTDOWN_LOSS_OF_CRITICAL_FUNCTIONS: | 189 | case EPOW_SHUTDOWN_LOSS_OF_CRITICAL_FUNCTIONS: |
| @@ -81,7 +81,7 @@ config RISCV · 80 unmodified lines | |||
| 81 | select PCI_DOMAINS_GENERIC if PCI | 81 | select PCI_DOMAINS_GENERIC if PCI |
| 82 | select PCI_MSI if PCI | 82 | select PCI_MSI if PCI |
| 83 | select RISCV_INTC | 83 | select RISCV_INTC |
| 84 | select RISCV_TIMER | 84 | select RISCV_TIMER if RISCV_SBI |
| 85 | select SPARSEMEM_STATIC if 32BIT | 85 | select SPARSEMEM_STATIC if 32BIT |
| 86 | select SPARSE_IRQ | 86 | select SPARSE_IRQ |
| 87 | select SYSCTL_EXCEPTION_TRACE | 87 | select SYSCTL_EXCEPTION_TRACE |
| @@ -12,6 +12,7 @@ config SOC_SIFIVE · 11 unmodified lines | |||
| 12 | 12 | ||
| 13 | config SOC_VIRT | 13 | config SOC_VIRT |
| 14 | bool "QEMU Virt Machine" | 14 | bool "QEMU Virt Machine" |
| 15 | select CLINT_TIMER if RISCV_M_MODE | ||
| 15 | select POWER_RESET | 16 | select POWER_RESET |
| 16 | select POWER_RESET_SYSCON | 17 | select POWER_RESET_SYSCON |
| 17 | select POWER_RESET_SYSCON_POWEROFF | 18 | select POWER_RESET_SYSCON_POWEROFF |
| @@ -24,6 +25,7 @@ config SOC_VIRT · 6 unmodified lines | |||
| 24 | config SOC_KENDRYTE | 25 | config SOC_KENDRYTE |
| 25 | bool "Kendryte K210 SoC" | 26 | bool "Kendryte K210 SoC" |
| 26 | depends on !MMU | 27 | depends on !MMU |
| 28 | select CLINT_TIMER if RISCV_M_MODE | ||
| 27 | select SERIAL_SIFIVE if TTY | 29 | select SERIAL_SIFIVE if TTY |
| 28 | select SERIAL_SIFIVE_CONSOLE if TTY | 30 | select SERIAL_SIFIVE_CONSOLE if TTY |
| 29 | select SIFIVE_PLIC | 31 | select SIFIVE_PLIC |
| @@ -26,6 +26,7 @@ CONFIG_EXPERT=y · 25 unmodified lines | |||
| 26 | CONFIG_SLOB=y | 26 | CONFIG_SLOB=y |
| 27 | # CONFIG_SLAB_MERGE_DEFAULT is not set | 27 | # CONFIG_SLAB_MERGE_DEFAULT is not set |
| 28 | # CONFIG_MMU is not set | 28 | # CONFIG_MMU is not set |
| 29 | CONFIG_SOC_VIRT=y | ||
| 29 | CONFIG_MAXPHYSMEM_2GB=y | 30 | CONFIG_MAXPHYSMEM_2GB=y |
| 30 | CONFIG_SMP=y | 31 | CONFIG_SMP=y |
| 31 | CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0" | 32 | CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0" |
| @@ -49,7 +50,6 @@ CONFIG_VIRTIO_BLK=y · 17 unmodified lines | |||
| 49 | # CONFIG_SERIO is not set | 50 | # CONFIG_SERIO is not set |
| 50 | # CONFIG_LEGACY_PTYS is not set | 51 | # CONFIG_LEGACY_PTYS is not set |
| 51 | # CONFIG_LDISC_AUTOLOAD is not set | 52 | # CONFIG_LDISC_AUTOLOAD is not set |
| 52 | # CONFIG_DEVMEM is not set | ||
| 53 | CONFIG_SERIAL_8250=y | 53 | CONFIG_SERIAL_8250=y |
| 54 | # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set | 54 | # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set |
| 55 | CONFIG_SERIAL_8250_CONSOLE=y | 55 | CONFIG_SERIAL_8250_CONSOLE=y |
| @@ -57,16 +57,13 @@ CONFIG_SERIAL_8250_NR_UARTS=1 · 1 unmodified line | |||
| 57 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 | 57 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 |
| 58 | CONFIG_SERIAL_OF_PLATFORM=y | 58 | CONFIG_SERIAL_OF_PLATFORM=y |
| 59 | # CONFIG_HW_RANDOM is not set | 59 | # CONFIG_HW_RANDOM is not set |
| 60 | # CONFIG_DEVMEM is not set | ||
| 60 | # CONFIG_HWMON is not set | 61 | # CONFIG_HWMON is not set |
| 61 | # CONFIG_LCD_CLASS_DEVICE is not set | ||
| 62 | # CONFIG_BACKLIGHT_CLASS_DEVICE is not set | ||
| 63 | # CONFIG_VGA_CONSOLE is not set | 62 | # CONFIG_VGA_CONSOLE is not set |
| 64 | # CONFIG_HID is not set | 63 | # CONFIG_HID is not set |
| 65 | # CONFIG_USB_SUPPORT is not set | 64 | # CONFIG_USB_SUPPORT is not set |
| 66 | CONFIG_VIRTIO_MMIO=y | 65 | CONFIG_VIRTIO_MMIO=y |
| 67 | CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y | 66 | CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y |
| 68 | CONFIG_SIFIVE_PLIC=y | ||
| 69 | # CONFIG_VALIDATE_FS_PARSER is not set | ||
| 70 | CONFIG_EXT2_FS=y | 67 | CONFIG_EXT2_FS=y |
| 71 | # CONFIG_DNOTIFY is not set | 68 | # CONFIG_DNOTIFY is not set |
| 72 | # CONFIG_INOTIFY_USER is not set | 69 | # CONFIG_INOTIFY_USER is not set |
| @@ -14,6 +14,7 @@ CONFIG_CHECKPOINT_RESTORE=y · 13 unmodified lines | |||
| 14 | CONFIG_BLK_DEV_INITRD=y | 14 | CONFIG_BLK_DEV_INITRD=y |
| 15 | CONFIG_EXPERT=y | 15 | CONFIG_EXPERT=y |
| 16 | CONFIG_BPF_SYSCALL=y | 16 | CONFIG_BPF_SYSCALL=y |
| 17 | CONFIG_SOC_SIFIVE=y | ||
| 17 | CONFIG_SOC_VIRT=y | 18 | CONFIG_SOC_VIRT=y |
| 18 | CONFIG_ARCH_RV32I=y | 19 | CONFIG_ARCH_RV32I=y |
| 19 | CONFIG_SMP=y | 20 | CONFIG_SMP=y |
| @@ -62,6 +63,8 @@ CONFIG_HVC_RISCV_SBI=y · 42 unmodified lines | |||
| 62 | CONFIG_VIRTIO_CONSOLE=y | 63 | CONFIG_VIRTIO_CONSOLE=y |
| 63 | CONFIG_HW_RANDOM=y | 64 | CONFIG_HW_RANDOM=y |
| 64 | CONFIG_HW_RANDOM_VIRTIO=y | 65 | CONFIG_HW_RANDOM_VIRTIO=y |
| 66 | CONFIG_SPI=y | ||
| 67 | CONFIG_SPI_SIFIVE=y | ||
| 65 | # CONFIG_PTP_1588_CLOCK is not set | 68 | # CONFIG_PTP_1588_CLOCK is not set |
| 66 | CONFIG_POWER_RESET=y | 69 | CONFIG_POWER_RESET=y |
| 67 | CONFIG_DRM=y | 70 | CONFIG_DRM=y |
| @@ -77,6 +80,8 @@ CONFIG_USB_OHCI_HCD=y · 9 unmodified lines | |||
| 77 | CONFIG_USB_OHCI_HCD_PLATFORM=y | 80 | CONFIG_USB_OHCI_HCD_PLATFORM=y |
| 78 | CONFIG_USB_STORAGE=y | 81 | CONFIG_USB_STORAGE=y |
| 79 | CONFIG_USB_UAS=y | 82 | CONFIG_USB_UAS=y |
| 83 | CONFIG_MMC=y | ||
| 84 | CONFIG_MMC_SPI=y | ||
| 80 | CONFIG_RTC_CLASS=y | 85 | CONFIG_RTC_CLASS=y |
| 81 | CONFIG_VIRTIO_PCI=y | 86 | CONFIG_VIRTIO_PCI=y |
| 82 | CONFIG_VIRTIO_BALLOON=y | 87 | CONFIG_VIRTIO_BALLOON=y |
| @@ -1,39 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | ||
| 2 | #ifndef _ASM_RISCV_CLINT_H | ||
| 3 | #define _ASM_RISCV_CLINT_H 1 | ||
| 4 | |||
| 5 | #include <linux/io.h> | ||
| 6 | #include <linux/smp.h> | ||
| 7 | |||
| 8 | #ifdef CONFIG_RISCV_M_MODE | ||
| 9 | extern u32 __iomem *clint_ipi_base; | ||
| 10 | |||
| 11 | void clint_init_boot_cpu(void); | ||
| 12 | |||
| 13 | static inline void clint_send_ipi_single(unsigned long hartid) | ||
| 14 | { | ||
| 15 | writel(1, clint_ipi_base + hartid); | ||
| 16 | } | ||
| 17 | |||
| 18 | static inline void clint_send_ipi_mask(const struct cpumask *mask) | ||
| 19 | { | ||
| 20 | int cpu; | ||
| 21 | |||
| 22 | for_each_cpu(cpu, mask) | ||
| 23 | clint_send_ipi_single(cpuid_to_hartid_map(cpu)); | ||
| 24 | } | ||
| 25 | |||
| 26 | static inline void clint_clear_ipi(unsigned long hartid) | ||
| 27 | { | ||
| 28 | writel(0, clint_ipi_base + hartid); | ||
| 29 | } | ||
| 30 | #else /* CONFIG_RISCV_M_MODE */ | ||
| 31 | #define clint_init_boot_cpu() do { } while (0) | ||
| 32 | |||
| 33 | /* stubs to for code is only reachable under IS_ENABLED(CONFIG_RISCV_M_MODE): */ | ||
| 34 | void clint_send_ipi_single(unsigned long hartid); | ||
| 35 | void clint_send_ipi_mask(const struct cpumask *hartid_mask); | ||
| 36 | void clint_clear_ipi(unsigned long hartid); | ||
| 37 | #endif /* CONFIG_RISCV_M_MODE */ | ||
| 38 | |||
| 39 | #endif /* _ASM_RISCV_CLINT_H */ | ||
| @@ -15,6 +15,11 @@ · 14 unmodified lines | |||
| 15 | struct seq_file; | 15 | struct seq_file; |
| 16 | extern unsigned long boot_cpu_hartid; | 16 | extern unsigned long boot_cpu_hartid; |
| 17 | 17 | ||
| 18 | struct riscv_ipi_ops { | ||
| 19 | void (*ipi_inject)(const struct cpumask *target); | ||
| 20 | void (*ipi_clear)(void); | ||
| 21 | }; | ||
| 22 | |||
| 18 | #ifdef CONFIG_SMP | 23 | #ifdef CONFIG_SMP |
| 19 | /* | 24 | /* |
| 20 | * Mapping between linux logical cpu index and hartid. | 25 | * Mapping between linux logical cpu index and hartid. |
| @@ -40,6 +45,12 @@ void arch_send_call_function_single_ipi(int cpu); · 19 unmodified lines | |||
| 40 | int riscv_hartid_to_cpuid(int hartid); | 45 | int riscv_hartid_to_cpuid(int hartid); |
| 41 | void riscv_cpuid_to_hartid_mask(const struct cpumask *in, struct cpumask *out); | 46 | void riscv_cpuid_to_hartid_mask(const struct cpumask *in, struct cpumask *out); |
| 42 | 47 | ||
| 48 | /* Set custom IPI operations */ | ||
| 49 | void riscv_set_ipi_ops(struct riscv_ipi_ops *ops); | ||
| 50 | |||
| 51 | /* Clear IPI for current CPU */ | ||
| 52 | void riscv_clear_ipi(void); | ||
| 53 | |||
| 43 | /* Secondary hart entry */ | 54 | /* Secondary hart entry */ |
| 44 | asmlinkage void smp_callin(void); | 55 | asmlinkage void smp_callin(void); |
| 45 | 56 | ||
| @@ -81,6 +92,14 @@ static inline void riscv_cpuid_to_hartid_mask(const struct cpumask *in, · 35 unmodified lines | |||
| 81 | cpumask_set_cpu(boot_cpu_hartid, out); | 92 | cpumask_set_cpu(boot_cpu_hartid, out); |
| 82 | } | 93 | } |
| 83 | 94 | ||
| 95 | static inline void riscv_set_ipi_ops(struct riscv_ipi_ops *ops) | ||
| 96 | { | ||
| 97 | } | ||
| 98 | |||
| 99 | static inline void riscv_clear_ipi(void) | ||
| 100 | { | ||
| 101 | } | ||
| 102 | |||
| 84 | #endif /* CONFIG_SMP */ | 103 | #endif /* CONFIG_SMP */ |
| 85 | 104 | ||
| 86 | #if defined(CONFIG_HOTPLUG_CPU) && (CONFIG_SMP) | 105 | #if defined(CONFIG_HOTPLUG_CPU) && (CONFIG_SMP) |
| @@ -7,41 +7,27 @@ · 6 unmodified lines | |||
| 7 | #define _ASM_RISCV_TIMEX_H | 7 | #define _ASM_RISCV_TIMEX_H |
| 8 | 8 | ||
| 9 | #include <asm/csr.h> | 9 | #include <asm/csr.h> |
| 10 | #include <asm/mmio.h> | ||
| 11 | 10 | ||
| 12 | typedef unsigned long cycles_t; | 11 | typedef unsigned long cycles_t; |
| 13 | 12 | ||
| 14 | extern u64 __iomem *riscv_time_val; | ||
| 15 | extern u64 __iomem *riscv_time_cmp; | ||
| 16 | |||
| 17 | #ifdef CONFIG_64BIT | ||
| 18 | #define mmio_get_cycles() readq_relaxed(riscv_time_val) | ||
| 19 | #else | ||
| 20 | #define mmio_get_cycles() readl_relaxed(riscv_time_val) | ||
| 21 | #define mmio_get_cycles_hi() readl_relaxed(((u32 *)riscv_time_val) + 1) | ||
| 22 | #endif | ||
| 23 | |||
| 24 | static inline cycles_t get_cycles(void) | 13 | static inline cycles_t get_cycles(void) |
| 25 | { | 14 | { |
| 26 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | 15 | return csr_read(CSR_TIME); |
| 27 | return csr_read(CSR_TIME); | ||
| 28 | return mmio_get_cycles(); | ||
| 29 | } | 16 | } |
| 30 | #define get_cycles get_cycles | 17 | #define get_cycles get_cycles |
| 31 | 18 | ||
| 19 | static inline u32 get_cycles_hi(void) | ||
| 20 | { | ||
| 21 | return csr_read(CSR_TIMEH); | ||
| 22 | } | ||
| 23 | #define get_cycles_hi get_cycles_hi | ||
| 24 | |||
| 32 | #ifdef CONFIG_64BIT | 25 | #ifdef CONFIG_64BIT |
| 33 | static inline u64 get_cycles64(void) | 26 | static inline u64 get_cycles64(void) |
| 34 | { | 27 | { |
| 35 | return get_cycles(); | 28 | return get_cycles(); |
| 36 | } | 29 | } |
| 37 | #else /* CONFIG_64BIT */ | 30 | #else /* CONFIG_64BIT */ |
| 38 | static inline u32 get_cycles_hi(void) | ||
| 39 | { | ||
| 40 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | ||
| 41 | return csr_read(CSR_TIMEH); | ||
| 42 | return mmio_get_cycles_hi(); | ||
| 43 | } | ||
| 44 | |||
| 45 | static inline u64 get_cycles64(void) | 31 | static inline u64 get_cycles64(void) |
| 46 | { | 32 | { |
| 47 | u32 hi, lo; | 33 | u32 hi, lo; |
| @@ -31,7 +31,7 @@ obj-y += cacheinfo.o · 30 unmodified lines | |||
| 31 | obj-y += patch.o | 31 | obj-y += patch.o |
| 32 | obj-$(CONFIG_MMU) += vdso.o vdso/ | 32 | obj-$(CONFIG_MMU) += vdso.o vdso/ |
| 33 | 33 | ||
| 34 | obj-$(CONFIG_RISCV_M_MODE) += clint.o traps_misaligned.o | 34 | obj-$(CONFIG_RISCV_M_MODE) += traps_misaligned.o |
| 35 | obj-$(CONFIG_FPU) += fpu.o | 35 | obj-$(CONFIG_FPU) += fpu.o |
| 36 | obj-$(CONFIG_SMP) += smpboot.o | 36 | obj-$(CONFIG_SMP) += smpboot.o |
| 37 | obj-$(CONFIG_SMP) += smp.o | 37 | obj-$(CONFIG_SMP) += smp.o |
| @@ -1,44 +0,0 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2019 Christoph Hellwig. | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <linux/io.h> | ||
| 7 | #include <linux/of_address.h> | ||
| 8 | #include <linux/types.h> | ||
| 9 | #include <asm/clint.h> | ||
| 10 | #include <asm/csr.h> | ||
| 11 | #include <asm/timex.h> | ||
| 12 | #include <asm/smp.h> | ||
| 13 | |||
| 14 | /* | ||
| 15 | * This is the layout used by the SiFive clint, which is also shared by the qemu | ||
| 16 | * virt platform, and the Kendryte KD210 at least. | ||
| 17 | */ | ||
| 18 | #define CLINT_IPI_OFF 0 | ||
| 19 | #define CLINT_TIME_CMP_OFF 0x4000 | ||
| 20 | #define CLINT_TIME_VAL_OFF 0xbff8 | ||
| 21 | |||
| 22 | u32 __iomem *clint_ipi_base; | ||
| 23 | |||
| 24 | void clint_init_boot_cpu(void) | ||
| 25 | { | ||
| 26 | struct device_node *np; | ||
| 27 | void __iomem *base; | ||
| 28 | |||
| 29 | np = of_find_compatible_node(NULL, NULL, "riscv,clint0"); | ||
| 30 | if (!np) { | ||
| 31 | panic("clint not found"); | ||
| 32 | return; | ||
| 33 | } | ||
| 34 | |||
| 35 | base = of_iomap(np, 0); | ||
| 36 | if (!base) | ||
| 37 | panic("could not map CLINT"); | ||
| 38 | |||
| 39 | clint_ipi_base = base + CLINT_IPI_OFF; | ||
| 40 | riscv_time_cmp = base + CLINT_TIME_CMP_OFF; | ||
| 41 | riscv_time_val = base + CLINT_TIME_VAL_OFF; | ||
| 42 | |||
| 43 | clint_clear_ipi(boot_cpu_hartid); | ||
| 44 | } | ||
| @@ -547,6 +547,18 @@ static inline long sbi_get_firmware_version(void) · 546 unmodified lines | |||
| 547 | return __sbi_base_ecall(SBI_EXT_BASE_GET_IMP_VERSION); | 547 | return __sbi_base_ecall(SBI_EXT_BASE_GET_IMP_VERSION); |
| 548 | } | 548 | } |
| 549 | 549 | ||
| 550 | static void sbi_send_cpumask_ipi(const struct cpumask *target) | ||
| 551 | { | ||
| 552 | struct cpumask hartid_mask; | ||
| 553 | |||
| 554 | riscv_cpuid_to_hartid_mask(target, &hartid_mask); | ||
| 555 | |||
| 556 | sbi_send_ipi(cpumask_bits(&hartid_mask)); | ||
| 557 | } | ||
| 558 | |||
| 559 | static struct riscv_ipi_ops sbi_ipi_ops = { | ||
| 560 | .ipi_inject = sbi_send_cpumask_ipi | ||
| 561 | }; | ||
| 550 | 562 | ||
| 551 | int __init sbi_init(void) | 563 | int __init sbi_init(void) |
| 552 | { | 564 | { |
| @@ -587,5 +599,7 @@ int __init sbi_init(void) · 34 unmodified lines | |||
| 587 | __sbi_rfence = __sbi_rfence_v01; | 599 | __sbi_rfence = __sbi_rfence_v01; |
| 588 | } | 600 | } |
| 589 | 601 | ||
| 602 | riscv_set_ipi_ops(&sbi_ipi_ops); | ||
| 603 | |||
| 590 | return 0; | 604 | return 0; |
| 591 | } | 605 | } |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/swiotlb.h> | 18 | #include <linux/swiotlb.h> |
| 19 | #include <linux/smp.h> | 19 | #include <linux/smp.h> |
| 20 | 20 | ||
| 21 | #include <asm/clint.h> | ||
| 22 | #include <asm/cpu_ops.h> | 21 | #include <asm/cpu_ops.h> |
| 23 | #include <asm/setup.h> | 22 | #include <asm/setup.h> |
| 24 | #include <asm/sections.h> | 23 | #include <asm/sections.h> |
| @@ -79,7 +78,6 @@ void __init setup_arch(char **cmdline_p) · 54 unmodified lines | |||
| 79 | #else | 78 | #else |
| 80 | unflatten_device_tree(); | 79 | unflatten_device_tree(); |
| 81 | #endif | 80 | #endif |
| 82 | clint_init_boot_cpu(); | ||
| 83 | 81 | ||
| 84 | #ifdef CONFIG_SWIOTLB | 82 | #ifdef CONFIG_SWIOTLB |
| 85 | swiotlb_init(1); | 83 | swiotlb_init(1); |
| @@ -250,7 +250,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 249 unmodified lines | |||
| 250 | regs->a0 = -EINTR; | 250 | regs->a0 = -EINTR; |
| 251 | break; | 251 | break; |
| 252 | } | 252 | } |
| 253 | /* fallthrough */ | 253 | fallthrough; |
| 254 | case -ERESTARTNOINTR: | 254 | case -ERESTARTNOINTR: |
| 255 | regs->a0 = regs->orig_a0; | 255 | regs->a0 = regs->orig_a0; |
| 256 | regs->epc -= 0x4; | 256 | regs->epc -= 0x4; |
| @@ -18,7 +18,6 @@ · 17 unmodified lines | |||
| 18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
| 19 | #include <linux/irq_work.h> | 19 | #include <linux/irq_work.h> |
| 20 | 20 | ||
| 21 | #include <asm/clint.h> | ||
| 22 | #include <asm/sbi.h> | 21 | #include <asm/sbi.h> |
| 23 | #include <asm/tlbflush.h> | 22 | #include <asm/tlbflush.h> |
| 24 | #include <asm/cacheflush.h> | 23 | #include <asm/cacheflush.h> |
| @@ -86,9 +85,25 @@ static void ipi_stop(void) · 61 unmodified lines | |||
| 86 | wait_for_interrupt(); | 85 | wait_for_interrupt(); |
| 87 | } | 86 | } |
| 88 | 87 | ||
| 88 | static struct riscv_ipi_ops *ipi_ops; | ||
| 89 | |||
| 90 | void riscv_set_ipi_ops(struct riscv_ipi_ops *ops) | ||
| 91 | { | ||
| 92 | ipi_ops = ops; | ||
| 93 | } | ||
| 94 | EXPORT_SYMBOL_GPL(riscv_set_ipi_ops); | ||
| 95 | |||
| 96 | void riscv_clear_ipi(void) | ||
| 97 | { | ||
| 98 | if (ipi_ops && ipi_ops->ipi_clear) | ||
| 99 | ipi_ops->ipi_clear(); | ||
| 100 | |||
| 101 | csr_clear(CSR_IP, IE_SIE); | ||
| 102 | } | ||
| 103 | EXPORT_SYMBOL_GPL(riscv_clear_ipi); | ||
| 104 | |||
| 89 | static void send_ipi_mask(const struct cpumask *mask, enum ipi_message_type op) | 105 | static void send_ipi_mask(const struct cpumask *mask, enum ipi_message_type op) |
| 90 | { | 106 | { |
| 91 | struct cpumask hartid_mask; | ||
| 92 | int cpu; | 107 | int cpu; |
| 93 | 108 | ||
| 94 | smp_mb__before_atomic(); | 109 | smp_mb__before_atomic(); |
| @@ -96,33 +111,22 @@ static void send_ipi_mask(const struct cpumask *mask, enum ipi_message_type op) · 1 unmodified line | |||
| 96 | set_bit(op, &ipi_data[cpu].bits); | 111 | set_bit(op, &ipi_data[cpu].bits); |
| 97 | smp_mb__after_atomic(); | 112 | smp_mb__after_atomic(); |
| 98 | 113 | ||
| 99 | riscv_cpuid_to_hartid_mask(mask, &hartid_mask); | 114 | if (ipi_ops && ipi_ops->ipi_inject) |
| 100 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | 115 | ipi_ops->ipi_inject(mask); |
| 101 | sbi_send_ipi(cpumask_bits(&hartid_mask)); | ||
| 102 | else | 116 | else |
| 103 | clint_send_ipi_mask(mask); | 117 | pr_warn("SMP: IPI inject method not available\n"); |
| 104 | } | 118 | } |
| 105 | 119 | ||
| 106 | static void send_ipi_single(int cpu, enum ipi_message_type op) | 120 | static void send_ipi_single(int cpu, enum ipi_message_type op) |
| 107 | { | 121 | { |
| 108 | int hartid = cpuid_to_hartid_map(cpu); | ||
| 109 | |||
| 110 | smp_mb__before_atomic(); | 122 | smp_mb__before_atomic(); |
| 111 | set_bit(op, &ipi_data[cpu].bits); | 123 | set_bit(op, &ipi_data[cpu].bits); |
| 112 | smp_mb__after_atomic(); | 124 | smp_mb__after_atomic(); |
| 113 | 125 | ||
| 114 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | 126 | if (ipi_ops && ipi_ops->ipi_inject) |
| 115 | sbi_send_ipi(cpumask_bits(cpumask_of(hartid))); | 127 | ipi_ops->ipi_inject(cpumask_of(cpu)); |
| 116 | else | ||
| 117 | clint_send_ipi_single(hartid); | ||
| 118 | } | ||
| 119 | |||
| 120 | static inline void clear_ipi(void) | ||
| 121 | { | ||
| 122 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | ||
| 123 | csr_clear(CSR_IP, IE_SIE); | ||
| 124 | else | 128 | else |
| 125 | clint_clear_ipi(cpuid_to_hartid_map(smp_processor_id())); | 129 | pr_warn("SMP: IPI inject method not available\n"); |
| 126 | } | 130 | } |
| 127 | 131 | ||
| 128 | #ifdef CONFIG_IRQ_WORK | 132 | #ifdef CONFIG_IRQ_WORK |
| @@ -140,7 +144,7 @@ void handle_IPI(struct pt_regs *regs) · 11 unmodified lines | |||
| 140 | 144 | ||
| 141 | irq_enter(); | 145 | irq_enter(); |
| 142 | 146 | ||
| 143 | clear_ipi(); | 147 | riscv_clear_ipi(); |
| 144 | 148 | ||
| 145 | while (true) { | 149 | while (true) { |
| 146 | unsigned long ops; | 150 | unsigned long ops; |
| @@ -24,7 +24,6 @@ · 23 unmodified lines | |||
| 24 | #include <linux/of.h> | 24 | #include <linux/of.h> |
| 25 | #include <linux/sched/task_stack.h> | 25 | #include <linux/sched/task_stack.h> |
| 26 | #include <linux/sched/mm.h> | 26 | #include <linux/sched/mm.h> |
| 27 | #include <asm/clint.h> | ||
| 28 | #include <asm/cpu_ops.h> | 27 | #include <asm/cpu_ops.h> |
| 29 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
| 30 | #include <asm/mmu_context.h> | 29 | #include <asm/mmu_context.h> |
| @@ -147,8 +146,7 @@ asmlinkage __visible void smp_callin(void) · 116 unmodified lines | |||
| 147 | struct mm_struct *mm = &init_mm; | 146 | struct mm_struct *mm = &init_mm; |
| 148 | unsigned int curr_cpuid = smp_processor_id(); | 147 | unsigned int curr_cpuid = smp_processor_id(); |
| 149 | 148 | ||
| 150 | if (!IS_ENABLED(CONFIG_RISCV_SBI)) | 149 | riscv_clear_ipi(); |
| 151 | clint_clear_ipi(cpuid_to_hartid_map(smp_processor_id())); | ||
| 152 | 150 | ||
| 153 | /* All kernel threads share the same mm context. */ | 151 | /* All kernel threads share the same mm context. */ |
| 154 | mmgrab(mm); | 152 | mmgrab(mm); |
| @@ -1020,7 +1020,7 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx, · 1019 unmodified lines | |||
| 1020 | emit_zext64(dst, ctx); | 1020 | emit_zext64(dst, ctx); |
| 1021 | break; | 1021 | break; |
| 1022 | } | 1022 | } |
| 1023 | /* Fallthrough. */ | 1023 | fallthrough; |
| 1024 | 1024 | ||
| 1025 | case BPF_ALU | BPF_ADD | BPF_X: | 1025 | case BPF_ALU | BPF_ADD | BPF_X: |
| 1026 | case BPF_ALU | BPF_SUB | BPF_X: | 1026 | case BPF_ALU | BPF_SUB | BPF_X: |
| @@ -1079,7 +1079,7 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx, · 52 unmodified lines | |||
| 1079 | case 16: | 1079 | case 16: |
| 1080 | emit(rv_slli(lo(rd), lo(rd), 16), ctx); | 1080 | emit(rv_slli(lo(rd), lo(rd), 16), ctx); |
| 1081 | emit(rv_srli(lo(rd), lo(rd), 16), ctx); | 1081 | emit(rv_srli(lo(rd), lo(rd), 16), ctx); |
| 1082 | /* Fallthrough. */ | 1082 | fallthrough; |
| 1083 | case 32: | 1083 | case 32: |
| 1084 | if (!ctx->prog->aux->verifier_zext) | 1084 | if (!ctx->prog->aux->verifier_zext) |
| 1085 | emit(rv_addi(hi(rd), RV_REG_ZERO, 0), ctx); | 1085 | emit(rv_addi(hi(rd), RV_REG_ZERO, 0), ctx); |
| @@ -29,7 +29,7 @@ · 28 unmodified lines | |||
| 29 | typedef typeof(pcp) pcp_op_T__; \ | 29 | typedef typeof(pcp) pcp_op_T__; \ |
| 30 | pcp_op_T__ old__, new__, prev__; \ | 30 | pcp_op_T__ old__, new__, prev__; \ |
| 31 | pcp_op_T__ *ptr__; \ | 31 | pcp_op_T__ *ptr__; \ |
| 32 | preempt_disable(); \ | 32 | preempt_disable_notrace(); \ |
| 33 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 33 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 34 | prev__ = *ptr__; \ | 34 | prev__ = *ptr__; \ |
| 35 | do { \ | 35 | do { \ |
| @@ -37,7 +37,7 @@ · 1 unmodified line | |||
| 37 | new__ = old__ op (val); \ | 37 | new__ = old__ op (val); \ |
| 38 | prev__ = cmpxchg(ptr__, old__, new__); \ | 38 | prev__ = cmpxchg(ptr__, old__, new__); \ |
| 39 | } while (prev__ != old__); \ | 39 | } while (prev__ != old__); \ |
| 40 | preempt_enable(); \ | 40 | preempt_enable_notrace(); \ |
| 41 | new__; \ | 41 | new__; \ |
| 42 | }) | 42 | }) |
| 43 | 43 | ||
| @@ -68,7 +68,7 @@ · 24 unmodified lines | |||
| 68 | typedef typeof(pcp) pcp_op_T__; \ | 68 | typedef typeof(pcp) pcp_op_T__; \ |
| 69 | pcp_op_T__ val__ = (val); \ | 69 | pcp_op_T__ val__ = (val); \ |
| 70 | pcp_op_T__ old__, *ptr__; \ | 70 | pcp_op_T__ old__, *ptr__; \ |
| 71 | preempt_disable(); \ | 71 | preempt_disable_notrace(); \ |
| 72 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 72 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 73 | if (__builtin_constant_p(val__) && \ | 73 | if (__builtin_constant_p(val__) && \ |
| 74 | ((szcast)val__ > -129) && ((szcast)val__ < 128)) { \ | 74 | ((szcast)val__ > -129) && ((szcast)val__ < 128)) { \ |
| @@ -84,7 +84,7 @@ · 9 unmodified lines | |||
| 84 | : [val__] "d" (val__) \ | 84 | : [val__] "d" (val__) \ |
| 85 | : "cc"); \ | 85 | : "cc"); \ |
| 86 | } \ | 86 | } \ |
| 87 | preempt_enable(); \ | 87 | preempt_enable_notrace(); \ |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | #define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", int) | 90 | #define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", int) |
| @@ -95,14 +95,14 @@ · 4 unmodified lines | |||
| 95 | typedef typeof(pcp) pcp_op_T__; \ | 95 | typedef typeof(pcp) pcp_op_T__; \ |
| 96 | pcp_op_T__ val__ = (val); \ | 96 | pcp_op_T__ val__ = (val); \ |
| 97 | pcp_op_T__ old__, *ptr__; \ | 97 | pcp_op_T__ old__, *ptr__; \ |
| 98 | preempt_disable(); \ | 98 | preempt_disable_notrace(); \ |
| 99 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 99 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 100 | asm volatile( \ | 100 | asm volatile( \ |
| 101 | op " %[old__],%[val__],%[ptr__]\n" \ | 101 | op " %[old__],%[val__],%[ptr__]\n" \ |
| 102 | : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ | 102 | : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ |
| 103 | : [val__] "d" (val__) \ | 103 | : [val__] "d" (val__) \ |
| 104 | : "cc"); \ | 104 | : "cc"); \ |
| 105 | preempt_enable(); \ | 105 | preempt_enable_notrace(); \ |
| 106 | old__ + val__; \ | 106 | old__ + val__; \ |
| 107 | }) | 107 | }) |
| 108 | 108 | ||
| @@ -114,14 +114,14 @@ · 5 unmodified lines | |||
| 114 | typedef typeof(pcp) pcp_op_T__; \ | 114 | typedef typeof(pcp) pcp_op_T__; \ |
| 115 | pcp_op_T__ val__ = (val); \ | 115 | pcp_op_T__ val__ = (val); \ |
| 116 | pcp_op_T__ old__, *ptr__; \ | 116 | pcp_op_T__ old__, *ptr__; \ |
| 117 | preempt_disable(); \ | 117 | preempt_disable_notrace(); \ |
| 118 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 118 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 119 | asm volatile( \ | 119 | asm volatile( \ |
| 120 | op " %[old__],%[val__],%[ptr__]\n" \ | 120 | op " %[old__],%[val__],%[ptr__]\n" \ |
| 121 | : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ | 121 | : [old__] "=d" (old__), [ptr__] "+Q" (*ptr__) \ |
| 122 | : [val__] "d" (val__) \ | 122 | : [val__] "d" (val__) \ |
| 123 | : "cc"); \ | 123 | : "cc"); \ |
| 124 | preempt_enable(); \ | 124 | preempt_enable_notrace(); \ |
| 125 | } | 125 | } |
| 126 | 126 | ||
| 127 | #define this_cpu_and_4(pcp, val) arch_this_cpu_to_op(pcp, val, "lan") | 127 | #define this_cpu_and_4(pcp, val) arch_this_cpu_to_op(pcp, val, "lan") |
| @@ -136,10 +136,10 @@ · 8 unmodified lines | |||
| 136 | typedef typeof(pcp) pcp_op_T__; \ | 136 | typedef typeof(pcp) pcp_op_T__; \ |
| 137 | pcp_op_T__ ret__; \ | 137 | pcp_op_T__ ret__; \ |
| 138 | pcp_op_T__ *ptr__; \ | 138 | pcp_op_T__ *ptr__; \ |
| 139 | preempt_disable(); \ | 139 | preempt_disable_notrace(); \ |
| 140 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 140 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 141 | ret__ = cmpxchg(ptr__, oval, nval); \ | 141 | ret__ = cmpxchg(ptr__, oval, nval); \ |
| 142 | preempt_enable(); \ | 142 | preempt_enable_notrace(); \ |
| 143 | ret__; \ | 143 | ret__; \ |
| 144 | }) | 144 | }) |
| 145 | 145 | ||
| @@ -152,10 +152,10 @@ · 6 unmodified lines | |||
| 152 | ({ \ | 152 | ({ \ |
| 153 | typeof(pcp) *ptr__; \ | 153 | typeof(pcp) *ptr__; \ |
| 154 | typeof(pcp) ret__; \ | 154 | typeof(pcp) ret__; \ |
| 155 | preempt_disable(); \ | 155 | preempt_disable_notrace(); \ |
| 156 | ptr__ = raw_cpu_ptr(&(pcp)); \ | 156 | ptr__ = raw_cpu_ptr(&(pcp)); \ |
| 157 | ret__ = xchg(ptr__, nval); \ | 157 | ret__ = xchg(ptr__, nval); \ |
| 158 | preempt_enable(); \ | 158 | preempt_enable_notrace(); \ |
| 159 | ret__; \ | 159 | ret__; \ |
| 160 | }) | 160 | }) |
| 161 | 161 | ||
| @@ -171,11 +171,11 @@ · 9 unmodified lines | |||
| 171 | typeof(pcp1) *p1__; \ | 171 | typeof(pcp1) *p1__; \ |
| 172 | typeof(pcp2) *p2__; \ | 172 | typeof(pcp2) *p2__; \ |
| 173 | int ret__; \ | 173 | int ret__; \ |
| 174 | preempt_disable(); \ | 174 | preempt_disable_notrace(); \ |
| 175 | p1__ = raw_cpu_ptr(&(pcp1)); \ | 175 | p1__ = raw_cpu_ptr(&(pcp1)); \ |
| 176 | p2__ = raw_cpu_ptr(&(pcp2)); \ | 176 | p2__ = raw_cpu_ptr(&(pcp2)); \ |
| 177 | ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__); \ | 177 | ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__); \ |
| 178 | preempt_enable(); \ | 178 | preempt_enable_notrace(); \ |
| 179 | ret__; \ | 179 | ret__; \ |
| 180 | }) | 180 | }) |
| 181 | 181 | ||
| @@ -33,14 +33,13 @@ void enabled_wait(void) · 32 unmodified lines | |||
| 33 | PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK; | 33 | PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK; |
| 34 | clear_cpu_flag(CIF_NOHZ_DELAY); | 34 | clear_cpu_flag(CIF_NOHZ_DELAY); |
| 35 | 35 | ||
| 36 | trace_cpu_idle_rcuidle(1, smp_processor_id()); | ||
| 37 | local_irq_save(flags); | 36 | local_irq_save(flags); |
| 38 | /* Call the assembler magic in entry.S */ | 37 | /* Call the assembler magic in entry.S */ |
| 39 | psw_idle(idle, psw_mask); | 38 | psw_idle(idle, psw_mask); |
| 40 | local_irq_restore(flags); | 39 | local_irq_restore(flags); |
| 41 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); | ||
| 42 | 40 | ||
| 43 | /* Account time spent with enabled wait psw loaded as idle time. */ | 41 | /* Account time spent with enabled wait psw loaded as idle time. */ |
| 42 | /* XXX seqcount has tracepoints that require RCU */ | ||
| 44 | write_seqcount_begin(&idle->seqcount); | 43 | write_seqcount_begin(&idle->seqcount); |
| 45 | idle_time = idle->clock_idle_exit - idle->clock_idle_enter; | 44 | idle_time = idle->clock_idle_exit - idle->clock_idle_enter; |
| 46 | idle->clock_idle_enter = idle->clock_idle_exit = 0ULL; | 45 | idle->clock_idle_enter = idle->clock_idle_exit = 0ULL; |
| @@ -1268,7 +1268,6 @@ static bool is_ri_cb_valid(struct runtime_instr_cb *cb) · 1267 unmodified lines | |||
| 1268 | cb->pc == 1 && | 1268 | cb->pc == 1 && |
| 1269 | cb->qc == 0 && | 1269 | cb->qc == 0 && |
| 1270 | cb->reserved2 == 0 && | 1270 | cb->reserved2 == 0 && |
| 1271 | cb->key == PAGE_DEFAULT_KEY && | ||
| 1272 | cb->reserved3 == 0 && | 1271 | cb->reserved3 == 0 && |
| 1273 | cb->reserved4 == 0 && | 1272 | cb->reserved4 == 0 && |
| 1274 | cb->reserved5 == 0 && | 1273 | cb->reserved5 == 0 && |
| @@ -1330,7 +1329,11 @@ static int s390_runtime_instr_set(struct task_struct *target, · 55 unmodified lines | |||
| 1330 | kfree(data); | 1329 | kfree(data); |
| 1331 | return -EINVAL; | 1330 | return -EINVAL; |
| 1332 | } | 1331 | } |
| 1333 | 1332 | /* | |
| 1333 | * Override access key in any case, since user space should | ||
| 1334 | * not be able to set it, nor should it care about it. | ||
| 1335 | */ | ||
| 1336 | ri_cb.key = PAGE_DEFAULT_KEY >> 4; | ||
| 1334 | preempt_disable(); | 1337 | preempt_disable(); |
| 1335 | if (!target->thread.ri_cb) | 1338 | if (!target->thread.ri_cb) |
| 1336 | target->thread.ri_cb = data; | 1339 | target->thread.ri_cb = data; |
| @@ -57,7 +57,7 @@ static void init_runtime_instr_cb(struct runtime_instr_cb *cb) · 56 unmodified lines | |||
| 57 | cb->k = 1; | 57 | cb->k = 1; |
| 58 | cb->ps = 1; | 58 | cb->ps = 1; |
| 59 | cb->pc = 1; | 59 | cb->pc = 1; |
| 60 | cb->key = PAGE_DEFAULT_KEY; | 60 | cb->key = PAGE_DEFAULT_KEY >> 4; |
| 61 | cb->v = 1; | 61 | cb->v = 1; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| @@ -402,6 +402,7 @@ static int modify_p4d_table(pgd_t *pgd, unsigned long addr, unsigned long end, · 401 unmodified lines | |||
| 402 | pud = vmem_crst_alloc(_REGION3_ENTRY_EMPTY); | 402 | pud = vmem_crst_alloc(_REGION3_ENTRY_EMPTY); |
| 403 | if (!pud) | 403 | if (!pud) |
| 404 | goto out; | 404 | goto out; |
| 405 | p4d_populate(&init_mm, p4d, pud); | ||
| 405 | } | 406 | } |
| 406 | ret = modify_pud_table(p4d, addr, next, add, direct); | 407 | ret = modify_pud_table(p4d, addr, next, add, direct); |
| 407 | if (ret) | 408 | if (ret) |
| @@ -672,6 +672,19 @@ int zpci_disable_device(struct zpci_dev *zdev) · 671 unmodified lines | |||
| 672 | } | 672 | } |
| 673 | EXPORT_SYMBOL_GPL(zpci_disable_device); | 673 | EXPORT_SYMBOL_GPL(zpci_disable_device); |
| 674 | 674 | ||
| 675 | void zpci_remove_device(struct zpci_dev *zdev) | ||
| 676 | { | ||
| 677 | struct zpci_bus *zbus = zdev->zbus; | ||
| 678 | struct pci_dev *pdev; | ||
| 679 | |||
| 680 | pdev = pci_get_slot(zbus->bus, zdev->devfn); | ||
| 681 | if (pdev) { | ||
| 682 | if (pdev->is_virtfn) | ||
| 683 | return zpci_remove_virtfn(pdev, zdev->vfn); | ||
| 684 | pci_stop_and_remove_bus_device_locked(pdev); | ||
| 685 | } | ||
| 686 | } | ||
| 687 | |||
| 675 | int zpci_create_device(struct zpci_dev *zdev) | 688 | int zpci_create_device(struct zpci_dev *zdev) |
| 676 | { | 689 | { |
| 677 | int rc; | 690 | int rc; |
| @@ -716,13 +729,8 @@ void zpci_release_device(struct kref *kref) · 38 unmodified lines | |||
| 716 | { | 729 | { |
| 717 | struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref); | 730 | struct zpci_dev *zdev = container_of(kref, struct zpci_dev, kref); |
| 718 | 731 | ||
| 719 | if (zdev->zbus->bus) { | 732 | if (zdev->zbus->bus) |
| 720 | struct pci_dev *pdev; | 733 | zpci_remove_device(zdev); |
| 721 | |||
| 722 | pdev = pci_get_slot(zdev->zbus->bus, zdev->devfn); | ||
| 723 | if (pdev) | ||
| 724 | pci_stop_and_remove_bus_device_locked(pdev); | ||
| 725 | } | ||
| 726 | 734 | ||
| 727 | switch (zdev->state) { | 735 | switch (zdev->state) { |
| 728 | case ZPCI_FN_STATE_ONLINE: | 736 | case ZPCI_FN_STATE_ONLINE: |
| @@ -132,13 +132,14 @@ static int zpci_bus_link_virtfn(struct pci_dev *pdev, · 131 unmodified lines | |||
| 132 | { | 132 | { |
| 133 | int rc; | 133 | int rc; |
| 134 | 134 | ||
| 135 | virtfn->physfn = pci_dev_get(pdev); | ||
| 136 | rc = pci_iov_sysfs_link(pdev, virtfn, vfid); | 135 | rc = pci_iov_sysfs_link(pdev, virtfn, vfid); |
| 137 | if (rc) { | 136 | if (rc) |
| 138 | pci_dev_put(pdev); | ||
| 139 | virtfn->physfn = NULL; | ||
| 140 | return rc; | 137 | return rc; |
| 141 | } | 138 | |
| 139 | virtfn->is_virtfn = 1; | ||
| 140 | virtfn->multifunction = 0; | ||
| 141 | virtfn->physfn = pci_dev_get(pdev); | ||
| 142 | |||
| 142 | return 0; | 143 | return 0; |
| 143 | } | 144 | } |
| 144 | 145 | ||
| @@ -151,9 +152,9 @@ static int zpci_bus_setup_virtfn(struct zpci_bus *zbus, · 6 unmodified lines | |||
| 151 | int vfid = vfn - 1; /* Linux' vfid's start at 0 vfn at 1*/ | 152 | int vfid = vfn - 1; /* Linux' vfid's start at 0 vfn at 1*/ |
| 152 | int rc = 0; | 153 | int rc = 0; |
| 153 | 154 | ||
| 154 | virtfn->is_virtfn = 1; | 155 | if (!zbus->multifunction) |
| 155 | virtfn->multifunction = 0; | 156 | return 0; |
| 156 | WARN_ON(vfid < 0); | 157 | |
| 157 | /* If the parent PF for the given VF is also configured in the | 158 | /* If the parent PF for the given VF is also configured in the |
| 158 | * instance, it must be on the same zbus. | 159 | * instance, it must be on the same zbus. |
| 159 | * We can then identify the parent PF by checking what | 160 | * We can then identify the parent PF by checking what |
| @@ -165,11 +166,17 @@ static int zpci_bus_setup_virtfn(struct zpci_bus *zbus, · 5 unmodified lines | |||
| 165 | zdev = zbus->function[i]; | 166 | zdev = zbus->function[i]; |
| 166 | if (zdev && zdev->is_physfn) { | 167 | if (zdev && zdev->is_physfn) { |
| 167 | pdev = pci_get_slot(zbus->bus, zdev->devfn); | 168 | pdev = pci_get_slot(zbus->bus, zdev->devfn); |
| 169 | if (!pdev) | ||
| 170 | continue; | ||
| 168 | cand_devfn = pci_iov_virtfn_devfn(pdev, vfid); | 171 | cand_devfn = pci_iov_virtfn_devfn(pdev, vfid); |
| 169 | if (cand_devfn == virtfn->devfn) { | 172 | if (cand_devfn == virtfn->devfn) { |
| 170 | rc = zpci_bus_link_virtfn(pdev, virtfn, vfid); | 173 | rc = zpci_bus_link_virtfn(pdev, virtfn, vfid); |
| 174 | /* balance pci_get_slot() */ | ||
| 175 | pci_dev_put(pdev); | ||
| 171 | break; | 176 | break; |
| 172 | } | 177 | } |
| 178 | /* balance pci_get_slot() */ | ||
| 179 | pci_dev_put(pdev); | ||
| 173 | } | 180 | } |
| 174 | } | 181 | } |
| 175 | return rc; | 182 | return rc; |
| @@ -178,12 +185,23 @@ static int zpci_bus_setup_virtfn(struct zpci_bus *zbus, · 2 unmodified lines | |||
| 178 | static inline int zpci_bus_setup_virtfn(struct zpci_bus *zbus, | 185 | static inline int zpci_bus_setup_virtfn(struct zpci_bus *zbus, |
| 179 | struct pci_dev *virtfn, int vfn) | 186 | struct pci_dev *virtfn, int vfn) |
| 180 | { | 187 | { |
| 181 | virtfn->is_virtfn = 1; | ||
| 182 | virtfn->multifunction = 0; | ||
| 183 | return 0; | 188 | return 0; |
| 184 | } | 189 | } |
| 185 | #endif | 190 | #endif |
| 186 | 191 | ||
| 192 | void pcibios_bus_add_device(struct pci_dev *pdev) | ||
| 193 | { | ||
| 194 | struct zpci_dev *zdev = to_zpci(pdev); | ||
| 195 | |||
| 196 | /* | ||
| 197 | * With pdev->no_vf_scan the common PCI probing code does not | ||
| 198 | * perform PF/VF linking. | ||
| 199 | */ | ||
| 200 | if (zdev->vfn) | ||
| 201 | zpci_bus_setup_virtfn(zdev->zbus, pdev, zdev->vfn); | ||
| 202 | |||
| 203 | } | ||
| 204 | |||
| 187 | static int zpci_bus_add_device(struct zpci_bus *zbus, struct zpci_dev *zdev) | 205 | static int zpci_bus_add_device(struct zpci_bus *zbus, struct zpci_dev *zdev) |
| 188 | { | 206 | { |
| 189 | struct pci_bus *bus; | 207 | struct pci_bus *bus; |
| @@ -214,20 +232,10 @@ static int zpci_bus_add_device(struct zpci_bus *zbus, struct zpci_dev *zdev) · 24 unmodified lines | |||
| 214 | } | 232 | } |
| 215 | 233 | ||
| 216 | pdev = pci_scan_single_device(bus, zdev->devfn); | 234 | pdev = pci_scan_single_device(bus, zdev->devfn); |
| 217 | if (pdev) { | 235 | if (pdev) |
| 218 | if (!zdev->is_physfn) { | ||
| 219 | rc = zpci_bus_setup_virtfn(zbus, pdev, zdev->vfn); | ||
| 220 | if (rc) | ||
| 221 | goto failed_with_pdev; | ||
| 222 | } | ||
| 223 | pci_bus_add_device(pdev); | 236 | pci_bus_add_device(pdev); |
| 224 | } | ||
| 225 | return 0; | ||
| 226 | 237 | ||
| 227 | failed_with_pdev: | 238 | return 0; |
| 228 | pci_stop_and_remove_bus_device(pdev); | ||
| 229 | pci_dev_put(pdev); | ||
| 230 | return rc; | ||
| 231 | } | 239 | } |
| 232 | 240 | ||
| 233 | static void zpci_bus_add_devices(struct zpci_bus *zbus) | 241 | static void zpci_bus_add_devices(struct zpci_bus *zbus) |
| @@ -29,3 +29,16 @@ static inline struct zpci_dev *get_zdev_by_bus(struct pci_bus *bus, · 28 unmodified lines | |||
| 29 | 29 | ||
| 30 | return (devfn >= ZPCI_FUNCTIONS_PER_BUS) ? NULL : zbus->function[devfn]; | 30 | return (devfn >= ZPCI_FUNCTIONS_PER_BUS) ? NULL : zbus->function[devfn]; |
| 31 | } | 31 | } |
| 32 | |||
| 33 | #ifdef CONFIG_PCI_IOV | ||
| 34 | static inline void zpci_remove_virtfn(struct pci_dev *pdev, int vfn) | ||
| 35 | { | ||
| 36 | |||
| 37 | pci_lock_rescan_remove(); | ||
| 38 | /* Linux' vfid's start at 0 vfn at 1 */ | ||
| 39 | pci_iov_remove_virtfn(pdev->physfn, vfn - 1); | ||
| 40 | pci_unlock_rescan_remove(); | ||
| 41 | } | ||
| 42 | #else /* CONFIG_PCI_IOV */ | ||
| 43 | static inline void zpci_remove_virtfn(struct pci_dev *pdev, int vfn) {} | ||
| 44 | #endif /* CONFIG_PCI_IOV */ | ||
| @@ -92,6 +92,9 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) · 91 unmodified lines | |||
| 92 | ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1); | 92 | ret = clp_add_pci_device(ccdf->fid, ccdf->fh, 1); |
| 93 | break; | 93 | break; |
| 94 | } | 94 | } |
| 95 | /* the configuration request may be stale */ | ||
| 96 | if (zdev->state != ZPCI_FN_STATE_STANDBY) | ||
| 97 | break; | ||
| 95 | zdev->fh = ccdf->fh; | 98 | zdev->fh = ccdf->fh; |
| 96 | zdev->state = ZPCI_FN_STATE_CONFIGURED; | 99 | zdev->state = ZPCI_FN_STATE_CONFIGURED; |
| 97 | ret = zpci_enable_device(zdev); | 100 | ret = zpci_enable_device(zdev); |
| @@ -118,7 +121,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) · 20 unmodified lines | |||
| 118 | if (!zdev) | 121 | if (!zdev) |
| 119 | break; | 122 | break; |
| 120 | if (pdev) | 123 | if (pdev) |
| 121 | pci_stop_and_remove_bus_device_locked(pdev); | 124 | zpci_remove_device(zdev); |
| 122 | 125 | ||
| 123 | ret = zpci_disable_device(zdev); | 126 | ret = zpci_disable_device(zdev); |
| 124 | if (ret) | 127 | if (ret) |
| @@ -137,7 +140,7 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf) · 12 unmodified lines | |||
| 137 | /* Give the driver a hint that the function is | 140 | /* Give the driver a hint that the function is |
| 138 | * already unusable. */ | 141 | * already unusable. */ |
| 139 | pdev->error_state = pci_channel_io_perm_failure; | 142 | pdev->error_state = pci_channel_io_perm_failure; |
| 140 | pci_stop_and_remove_bus_device_locked(pdev); | 143 | zpci_remove_device(zdev); |
| 141 | } | 144 | } |
| 142 | 145 | ||
| 143 | zdev->state = ZPCI_FN_STATE_STANDBY; | 146 | zdev->state = ZPCI_FN_STATE_STANDBY; |
| @@ -246,7 +246,7 @@ static int __init sh_early_platform_driver_probe_id(char *class_str, · 245 unmodified lines | |||
| 246 | case EARLY_PLATFORM_ID_ERROR: | 246 | case EARLY_PLATFORM_ID_ERROR: |
| 247 | pr_warn("%s: unable to parse %s parameter\n", | 247 | pr_warn("%s: unable to parse %s parameter\n", |
| 248 | class_str, epdrv->pdrv->driver.name); | 248 | class_str, epdrv->pdrv->driver.name); |
| 249 | /* fall-through */ | 249 | fallthrough; |
| 250 | case EARLY_PLATFORM_ID_UNSET: | 250 | case EARLY_PLATFORM_ID_UNSET: |
| 251 | match = NULL; | 251 | match = NULL; |
| 252 | break; | 252 | break; |
| @@ -486,7 +486,7 @@ static void print_sh_insn(u32 memaddr, u16 insn) · 485 unmodified lines | |||
| 486 | pr_cont("xd%d", rn & ~1); | 486 | pr_cont("xd%d", rn & ~1); |
| 487 | break; | 487 | break; |
| 488 | } | 488 | } |
| 489 | /* else, fall through */ | 489 | fallthrough; |
| 490 | case D_REG_N: | 490 | case D_REG_N: |
| 491 | pr_cont("dr%d", rn); | 491 | pr_cont("dr%d", rn); |
| 492 | break; | 492 | break; |
| @@ -495,7 +495,7 @@ static void print_sh_insn(u32 memaddr, u16 insn) · 2 unmodified lines | |||
| 495 | pr_cont("xd%d", rm & ~1); | 495 | pr_cont("xd%d", rm & ~1); |
| 496 | break; | 496 | break; |
| 497 | } | 497 | } |
| 498 | /* else, fall through */ | 498 | fallthrough; |
| 499 | case D_REG_M: | 499 | case D_REG_M: |
| 500 | pr_cont("dr%d", rm); | 500 | pr_cont("dr%d", rm); |
| 501 | break; | 501 | break; |
| @@ -266,7 +266,7 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, · 265 unmodified lines | |||
| 266 | ptr = &remcomInBuffer[1]; | 266 | ptr = &remcomInBuffer[1]; |
| 267 | if (kgdb_hex2long(&ptr, &addr)) | 267 | if (kgdb_hex2long(&ptr, &addr)) |
| 268 | linux_regs->pc = addr; | 268 | linux_regs->pc = addr; |
| 269 | /* fallthrough */ | 269 | fallthrough; |
| 270 | case 'D': | 270 | case 'D': |
| 271 | case 'k': | 271 | case 'k': |
| 272 | atomic_set(&kgdb_cpu_doing_single_step, -1); | 272 | atomic_set(&kgdb_cpu_doing_single_step, -1); |
| @@ -418,7 +418,7 @@ handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs, · 417 unmodified lines | |||
| 418 | case -ERESTARTSYS: | 418 | case -ERESTARTSYS: |
| 419 | if (!(sa->sa_flags & SA_RESTART)) | 419 | if (!(sa->sa_flags & SA_RESTART)) |
| 420 | goto no_system_call_restart; | 420 | goto no_system_call_restart; |
| 421 | /* fallthrough */ | 421 | fallthrough; |
| 422 | case -ERESTARTNOINTR: | 422 | case -ERESTARTNOINTR: |
| 423 | regs->regs[0] = save_r0; | 423 | regs->regs[0] = save_r0; |
| 424 | regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); | 424 | regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); |
| @@ -87,7 +87,6 @@ void auxio_set_lte(int on) · 86 unmodified lines | |||
| 87 | __auxio_sbus_set_lte(on); | 87 | __auxio_sbus_set_lte(on); |
| 88 | break; | 88 | break; |
| 89 | case AUXIO_TYPE_EBUS: | 89 | case AUXIO_TYPE_EBUS: |
| 90 | /* FALL-THROUGH */ | ||
| 91 | default: | 90 | default: |
| 92 | break; | 91 | break; |
| 93 | } | 92 | } |
| @@ -55,7 +55,7 @@ static int clock_board_calc_nslots(struct clock_board *p) · 54 unmodified lines | |||
| 55 | else | 55 | else |
| 56 | return 5; | 56 | return 5; |
| 57 | } | 57 | } |
| 58 | /* Fallthrough */ | 58 | fallthrough; |
| 59 | default: | 59 | default: |
| 60 | return 4; | 60 | return 4; |
| 61 | } | 61 | } |
| @@ -122,7 +122,7 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, · 121 unmodified lines | |||
| 122 | linux_regs->pc = addr; | 122 | linux_regs->pc = addr; |
| 123 | linux_regs->npc = addr + 4; | 123 | linux_regs->npc = addr + 4; |
| 124 | } | 124 | } |
| 125 | /* fall through */ | 125 | fallthrough; |
| 126 | 126 | ||
| 127 | case 'D': | 127 | case 'D': |
| 128 | case 'k': | 128 | case 'k': |
| @@ -148,7 +148,7 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, · 147 unmodified lines | |||
| 148 | linux_regs->tpc = addr; | 148 | linux_regs->tpc = addr; |
| 149 | linux_regs->tnpc = addr + 4; | 149 | linux_regs->tnpc = addr + 4; |
| 150 | } | 150 | } |
| 151 | /* fall through */ | 151 | fallthrough; |
| 152 | 152 | ||
| 153 | case 'D': | 153 | case 'D': |
| 154 | case 'k': | 154 | case 'k': |
| @@ -359,7 +359,7 @@ int __init pcr_arch_init(void) · 358 unmodified lines | |||
| 359 | * counter overflow interrupt so we can't make use of | 359 | * counter overflow interrupt so we can't make use of |
| 360 | * their hardware currently. | 360 | * their hardware currently. |
| 361 | */ | 361 | */ |
| 362 | /* fallthrough */ | 362 | fallthrough; |
| 363 | default: | 363 | default: |
| 364 | err = -ENODEV; | 364 | err = -ENODEV; |
| 365 | goto out_unregister; | 365 | goto out_unregister; |
| @@ -224,7 +224,7 @@ void __init of_console_init(void) · 223 unmodified lines | |||
| 224 | 224 | ||
| 225 | case PROMDEV_TTYB: | 225 | case PROMDEV_TTYB: |
| 226 | skip = 1; | 226 | skip = 1; |
| 227 | /* FALLTHRU */ | 227 | fallthrough; |
| 228 | 228 | ||
| 229 | case PROMDEV_TTYA: | 229 | case PROMDEV_TTYA: |
| 230 | type = "serial"; | 230 | type = "serial"; |
| @@ -646,7 +646,7 @@ static inline void syscall_restart32(unsigned long orig_i0, struct pt_regs *regs · 645 unmodified lines | |||
| 646 | case ERESTARTSYS: | 646 | case ERESTARTSYS: |
| 647 | if (!(sa->sa_flags & SA_RESTART)) | 647 | if (!(sa->sa_flags & SA_RESTART)) |
| 648 | goto no_system_call_restart; | 648 | goto no_system_call_restart; |
| 649 | /* fallthrough */ | 649 | fallthrough; |
| 650 | case ERESTARTNOINTR: | 650 | case ERESTARTNOINTR: |
| 651 | regs->u_regs[UREG_I0] = orig_i0; | 651 | regs->u_regs[UREG_I0] = orig_i0; |
| 652 | regs->tpc -= 4; | 652 | regs->tpc -= 4; |
| @@ -686,7 +686,7 @@ void do_signal32(struct pt_regs * regs) · 33 unmodified lines | |||
| 686 | regs->tpc -= 4; | 686 | regs->tpc -= 4; |
| 687 | regs->tnpc -= 4; | 687 | regs->tnpc -= 4; |
| 688 | pt_regs_clear_syscall(regs); | 688 | pt_regs_clear_syscall(regs); |
| 689 | /* fall through */ | 689 | fallthrough; |
| 690 | case ERESTART_RESTARTBLOCK: | 690 | case ERESTART_RESTARTBLOCK: |
| 691 | regs->u_regs[UREG_G1] = __NR_restart_syscall; | 691 | regs->u_regs[UREG_G1] = __NR_restart_syscall; |
| 692 | regs->tpc -= 4; | 692 | regs->tpc -= 4; |
| @@ -440,7 +440,7 @@ static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, · 439 unmodified lines | |||
| 440 | case ERESTARTSYS: | 440 | case ERESTARTSYS: |
| 441 | if (!(sa->sa_flags & SA_RESTART)) | 441 | if (!(sa->sa_flags & SA_RESTART)) |
| 442 | goto no_system_call_restart; | 442 | goto no_system_call_restart; |
| 443 | /* fallthrough */ | 443 | fallthrough; |
| 444 | case ERESTARTNOINTR: | 444 | case ERESTARTNOINTR: |
| 445 | regs->u_regs[UREG_I0] = orig_i0; | 445 | regs->u_regs[UREG_I0] = orig_i0; |
| 446 | regs->pc -= 4; | 446 | regs->pc -= 4; |
| @@ -506,7 +506,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) · 59 unmodified lines | |||
| 506 | regs->pc -= 4; | 506 | regs->pc -= 4; |
| 507 | regs->npc -= 4; | 507 | regs->npc -= 4; |
| 508 | pt_regs_clear_syscall(regs); | 508 | pt_regs_clear_syscall(regs); |
| 509 | /* fall through */ | 509 | fallthrough; |
| 510 | case ERESTART_RESTARTBLOCK: | 510 | case ERESTART_RESTARTBLOCK: |
| 511 | regs->u_regs[UREG_G1] = __NR_restart_syscall; | 511 | regs->u_regs[UREG_G1] = __NR_restart_syscall; |
| 512 | regs->pc -= 4; | 512 | regs->pc -= 4; |
| @@ -461,7 +461,7 @@ static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, · 460 unmodified lines | |||
| 461 | case ERESTARTSYS: | 461 | case ERESTARTSYS: |
| 462 | if (!(sa->sa_flags & SA_RESTART)) | 462 | if (!(sa->sa_flags & SA_RESTART)) |
| 463 | goto no_system_call_restart; | 463 | goto no_system_call_restart; |
| 464 | /* fallthrough */ | 464 | fallthrough; |
| 465 | case ERESTARTNOINTR: | 465 | case ERESTARTNOINTR: |
| 466 | regs->u_regs[UREG_I0] = orig_i0; | 466 | regs->u_regs[UREG_I0] = orig_i0; |
| 467 | regs->tpc -= 4; | 467 | regs->tpc -= 4; |
| @@ -532,7 +532,7 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0) · 64 unmodified lines | |||
| 532 | regs->tpc -= 4; | 532 | regs->tpc -= 4; |
| 533 | regs->tnpc -= 4; | 533 | regs->tnpc -= 4; |
| 534 | pt_regs_clear_syscall(regs); | 534 | pt_regs_clear_syscall(regs); |
| 535 | /* fall through */ | 535 | fallthrough; |
| 536 | case ERESTART_RESTARTBLOCK: | 536 | case ERESTART_RESTARTBLOCK: |
| 537 | regs->u_regs[UREG_G1] = __NR_restart_syscall; | 537 | regs->u_regs[UREG_G1] = __NR_restart_syscall; |
| 538 | regs->tpc -= 4; | 538 | regs->tpc -= 4; |
| @@ -359,7 +359,7 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs) · 358 unmodified lines | |||
| 359 | *pfsr |= (6 << 14); | 359 | *pfsr |= (6 << 14); |
| 360 | return 0; /* simulate invalid_fp_register exception */ | 360 | return 0; /* simulate invalid_fp_register exception */ |
| 361 | } | 361 | } |
| 362 | /* fall through */ | 362 | fallthrough; |
| 363 | case 2: | 363 | case 2: |
| 364 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ | 364 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ |
| 365 | *pfsr |= (6 << 14); | 365 | *pfsr |= (6 << 14); |
| @@ -380,7 +380,7 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs) · 14 unmodified lines | |||
| 380 | *pfsr |= (6 << 14); | 380 | *pfsr |= (6 << 14); |
| 381 | return 0; /* simulate invalid_fp_register exception */ | 381 | return 0; /* simulate invalid_fp_register exception */ |
| 382 | } | 382 | } |
| 383 | /* fall through */ | 383 | fallthrough; |
| 384 | case 2: | 384 | case 2: |
| 385 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ | 385 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ |
| 386 | *pfsr |= (6 << 14); | 386 | *pfsr |= (6 << 14); |
| @@ -408,13 +408,13 @@ static int do_one_mathemu(u32 insn, unsigned long *pfsr, unsigned long *fregs) · 21 unmodified lines | |||
| 408 | *pfsr |= (6 << 14); | 408 | *pfsr |= (6 << 14); |
| 409 | return 0; /* simulate invalid_fp_register exception */ | 409 | return 0; /* simulate invalid_fp_register exception */ |
| 410 | } | 410 | } |
| 411 | /* fall through */ | 411 | fallthrough; |
| 412 | case 2: | 412 | case 2: |
| 413 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ | 413 | if (freg & 1) { /* doublewords must have bit 5 zeroed */ |
| 414 | *pfsr |= (6 << 14); | 414 | *pfsr |= (6 << 14); |
| 415 | return 0; | 415 | return 0; |
| 416 | } | 416 | } |
| 417 | /* fall through */ | 417 | fallthrough; |
| 418 | case 1: | 418 | case 1: |
| 419 | rd = (void *)&fregs[freg]; | 419 | rd = (void *)&fregs[freg]; |
| 420 | break; | 420 | break; |
| @@ -491,7 +491,7 @@ void bpf_jit_compile(struct bpf_prog *fp) · 490 unmodified lines | |||
| 491 | } else { | 491 | } else { |
| 492 | emit_loadimm(K, r_A); | 492 | emit_loadimm(K, r_A); |
| 493 | } | 493 | } |
| 494 | /* Fallthrough */ | 494 | fallthrough; |
| 495 | case BPF_RET | BPF_A: | 495 | case BPF_RET | BPF_A: |
| 496 | if (seen_or_pass0) { | 496 | if (seen_or_pass0) { |
| 497 | if (i != flen - 1) { | 497 | if (i != flen - 1) { |
| @@ -70,7 +70,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 69 unmodified lines | |||
| 70 | PT_REGS_SYSCALL_RET(regs) = -EINTR; | 70 | PT_REGS_SYSCALL_RET(regs) = -EINTR; |
| 71 | break; | 71 | break; |
| 72 | } | 72 | } |
| 73 | /* fallthrough */ | 73 | fallthrough; |
| 74 | case -ERESTARTNOINTR: | 74 | case -ERESTARTNOINTR: |
| 75 | PT_REGS_RESTART_SYSCALL(regs); | 75 | PT_REGS_RESTART_SYSCALL(regs); |
| 76 | PT_REGS_ORIG_SYSCALL(regs) = PT_REGS_SYSCALL_NR(regs); | 76 | PT_REGS_ORIG_SYSCALL(regs) = PT_REGS_SYSCALL_NR(regs); |
| @@ -54,7 +54,7 @@ int __cmdline_find_option(unsigned long cmdline_ptr, const char *option, char *b · 53 unmodified lines | |||
| 54 | /* else */ | 54 | /* else */ |
| 55 | state = st_wordcmp; | 55 | state = st_wordcmp; |
| 56 | opptr = option; | 56 | opptr = option; |
| 57 | /* fall through */ | 57 | fallthrough; |
| 58 | 58 | ||
| 59 | case st_wordcmp: | 59 | case st_wordcmp: |
| 60 | if (c == '=' && !*opptr) { | 60 | if (c == '=' && !*opptr) { |
| @@ -129,7 +129,7 @@ int __cmdline_find_option_bool(unsigned long cmdline_ptr, const char *option) · 68 unmodified lines | |||
| 129 | state = st_wordcmp; | 129 | state = st_wordcmp; |
| 130 | opptr = option; | 130 | opptr = option; |
| 131 | wstart = pos; | 131 | wstart = pos; |
| 132 | /* fall through */ | 132 | fallthrough; |
| 133 | 133 | ||
| 134 | case st_wordcmp: | 134 | case st_wordcmp: |
| 135 | if (!*opptr) | 135 | if (!*opptr) |
| @@ -178,7 +178,7 @@ parse_memmap(char *p, unsigned long long *start, unsigned long long *size, · 177 unmodified lines | |||
| 178 | } | 178 | } |
| 179 | *size = 0; | 179 | *size = 0; |
| 180 | } | 180 | } |
| 181 | /* Fall through */ | 181 | fallthrough; |
| 182 | default: | 182 | default: |
| 183 | /* | 183 | /* |
| 184 | * If w/o offset, only size specified, memmap=nn[KMG] has the | 184 | * If w/o offset, only size specified, memmap=nn[KMG] has the |
| @@ -30,12 +30,9 @@ · 29 unmodified lines | |||
| 30 | #define STATIC static | 30 | #define STATIC static |
| 31 | 31 | ||
| 32 | /* | 32 | /* |
| 33 | * Use normal definitions of mem*() from string.c. There are already | 33 | * Provide definitions of memzero and memmove as some of the decompressors will |
| 34 | * included header files which expect a definition of memset() and by | 34 | * try to define their own functions if these are not defined as macros. |
| 35 | * the time we define memset macro, it is too late. | ||
| 36 | */ | 35 | */ |
| 37 | #undef memcpy | ||
| 38 | #undef memset | ||
| 39 | #define memzero(s, n) memset((s), 0, (n)) | 36 | #define memzero(s, n) memset((s), 0, (n)) |
| 40 | #define memmove memmove | 37 | #define memmove memmove |
| 41 | 38 | ||
| @@ -11,10 +11,7 @@ void *memcpy(void *dst, const void *src, size_t len); · 10 unmodified lines | |||
| 11 | void *memset(void *dst, int c, size_t len); | 11 | void *memset(void *dst, int c, size_t len); |
| 12 | int memcmp(const void *s1, const void *s2, size_t len); | 12 | int memcmp(const void *s1, const void *s2, size_t len); |
| 13 | 13 | ||
| 14 | /* | 14 | /* Access builtin version by default. */ |
| 15 | * Access builtin version by default. If one needs to use optimized version, | ||
| 16 | * do "undef memcpy" in .c file and link against right string.c | ||
| 17 | */ | ||
| 18 | #define memcpy(d,s,l) __builtin_memcpy(d,s,l) | 15 | #define memcpy(d,s,l) __builtin_memcpy(d,s,l) |
| 19 | #define memset(d,c,l) __builtin_memset(d,c,l) | 16 | #define memset(d,c,l) __builtin_memset(d,c,l) |
| 20 | #define memcmp __builtin_memcmp | 17 | #define memcmp __builtin_memcmp |
| @@ -374,12 +374,14 @@ For 32-bit we have the following conventions - kernel is built with · 373 unmodified lines | |||
| 374 | * Fetch the per-CPU GSBASE value for this processor and put it in @reg. | 374 | * Fetch the per-CPU GSBASE value for this processor and put it in @reg. |
| 375 | * We normally use %gs for accessing per-CPU data, but we are setting up | 375 | * We normally use %gs for accessing per-CPU data, but we are setting up |
| 376 | * %gs here and obviously can not use %gs itself to access per-CPU data. | 376 | * %gs here and obviously can not use %gs itself to access per-CPU data. |
| 377 | * | ||
| 378 | * Do not use RDPID, because KVM loads guest's TSC_AUX on vm-entry and | ||
| 379 | * may not restore the host's value until the CPU returns to userspace. | ||
| 380 | * Thus the kernel would consume a guest's TSC_AUX if an NMI arrives | ||
| 381 | * while running KVM's run loop. | ||
| 377 | */ | 382 | */ |
| 378 | .macro GET_PERCPU_BASE reg:req | 383 | .macro GET_PERCPU_BASE reg:req |
| 379 | ALTERNATIVE \ | 384 | LOAD_CPU_AND_NODE_SEG_LIMIT \reg |
| 380 | "LOAD_CPU_AND_NODE_SEG_LIMIT \reg", \ | ||
| 381 | "RDPID \reg", \ | ||
| 382 | X86_FEATURE_RDPID | ||
| 383 | andq $VDSO_CPUNODE_MASK, \reg | 385 | andq $VDSO_CPUNODE_MASK, \reg |
| 384 | movq __per_cpu_offset(, \reg, 8), \reg | 386 | movq __per_cpu_offset(, \reg, 8), \reg |
| 385 | .endm | 387 | .endm |
| @@ -29,11 +29,6 @@ SYM_CODE_START_NOALIGN(\name) · 28 unmodified lines | |||
| 29 | SYM_CODE_END(\name) | 29 | SYM_CODE_END(\name) |
| 30 | .endm | 30 | .endm |
| 31 | 31 | ||
| 32 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
| 33 | THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1 | ||
| 34 | THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1 | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #ifdef CONFIG_PREEMPTION | 32 | #ifdef CONFIG_PREEMPTION |
| 38 | THUNK preempt_schedule_thunk, preempt_schedule | 33 | THUNK preempt_schedule_thunk, preempt_schedule |
| 39 | THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace | 34 | THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace |
| @@ -4682,7 +4682,7 @@ __init int intel_pmu_init(void) · 4681 unmodified lines | |||
| 4682 | 4682 | ||
| 4683 | case INTEL_FAM6_CORE2_MEROM: | 4683 | case INTEL_FAM6_CORE2_MEROM: |
| 4684 | x86_add_quirk(intel_clovertown_quirk); | 4684 | x86_add_quirk(intel_clovertown_quirk); |
| 4685 | /* fall through */ | 4685 | fallthrough; |
| 4686 | 4686 | ||
| 4687 | case INTEL_FAM6_CORE2_MEROM_L: | 4687 | case INTEL_FAM6_CORE2_MEROM_L: |
| 4688 | case INTEL_FAM6_CORE2_PENRYN: | 4688 | case INTEL_FAM6_CORE2_PENRYN: |
| @@ -5062,7 +5062,7 @@ __init int intel_pmu_init(void) · 373 unmodified lines | |||
| 5062 | 5062 | ||
| 5063 | case INTEL_FAM6_SKYLAKE_X: | 5063 | case INTEL_FAM6_SKYLAKE_X: |
| 5064 | pmem = true; | 5064 | pmem = true; |
| 5065 | /* fall through */ | 5065 | fallthrough; |
| 5066 | case INTEL_FAM6_SKYLAKE_L: | 5066 | case INTEL_FAM6_SKYLAKE_L: |
| 5067 | case INTEL_FAM6_SKYLAKE: | 5067 | case INTEL_FAM6_SKYLAKE: |
| 5068 | case INTEL_FAM6_KABYLAKE_L: | 5068 | case INTEL_FAM6_KABYLAKE_L: |
| @@ -5114,7 +5114,7 @@ __init int intel_pmu_init(void) · 45 unmodified lines | |||
| 5114 | case INTEL_FAM6_ICELAKE_X: | 5114 | case INTEL_FAM6_ICELAKE_X: |
| 5115 | case INTEL_FAM6_ICELAKE_D: | 5115 | case INTEL_FAM6_ICELAKE_D: |
| 5116 | pmem = true; | 5116 | pmem = true; |
| 5117 | /* fall through */ | 5117 | fallthrough; |
| 5118 | case INTEL_FAM6_ICELAKE_L: | 5118 | case INTEL_FAM6_ICELAKE_L: |
| 5119 | case INTEL_FAM6_ICELAKE: | 5119 | case INTEL_FAM6_ICELAKE: |
| 5120 | case INTEL_FAM6_TIGERLAKE_L: | 5120 | case INTEL_FAM6_TIGERLAKE_L: |
| @@ -1268,7 +1268,7 @@ static int branch_type(unsigned long from, unsigned long to, int abort) · 1267 unmodified lines | |||
| 1268 | ret = X86_BR_ZERO_CALL; | 1268 | ret = X86_BR_ZERO_CALL; |
| 1269 | break; | 1269 | break; |
| 1270 | } | 1270 | } |
| 1271 | /* fall through */ | 1271 | fallthrough; |
| 1272 | case 0x9a: /* call far absolute */ | 1272 | case 0x9a: /* call far absolute */ |
| 1273 | ret = X86_BR_CALL; | 1273 | ret = X86_BR_CALL; |
| 1274 | break; | 1274 | break; |
| @@ -390,6 +390,18 @@ static struct uncore_event_desc snb_uncore_imc_events[] = { · 389 unmodified lines | |||
| 390 | INTEL_UNCORE_EVENT_DESC(data_writes.scale, "6.103515625e-5"), | 390 | INTEL_UNCORE_EVENT_DESC(data_writes.scale, "6.103515625e-5"), |
| 391 | INTEL_UNCORE_EVENT_DESC(data_writes.unit, "MiB"), | 391 | INTEL_UNCORE_EVENT_DESC(data_writes.unit, "MiB"), |
| 392 | 392 | ||
| 393 | INTEL_UNCORE_EVENT_DESC(gt_requests, "event=0x03"), | ||
| 394 | INTEL_UNCORE_EVENT_DESC(gt_requests.scale, "6.103515625e-5"), | ||
| 395 | INTEL_UNCORE_EVENT_DESC(gt_requests.unit, "MiB"), | ||
| 396 | |||
| 397 | INTEL_UNCORE_EVENT_DESC(ia_requests, "event=0x04"), | ||
| 398 | INTEL_UNCORE_EVENT_DESC(ia_requests.scale, "6.103515625e-5"), | ||
| 399 | INTEL_UNCORE_EVENT_DESC(ia_requests.unit, "MiB"), | ||
| 400 | |||
| 401 | INTEL_UNCORE_EVENT_DESC(io_requests, "event=0x05"), | ||
| 402 | INTEL_UNCORE_EVENT_DESC(io_requests.scale, "6.103515625e-5"), | ||
| 403 | INTEL_UNCORE_EVENT_DESC(io_requests.unit, "MiB"), | ||
| 404 | |||
| 393 | { /* end: all zeroes */ }, | 405 | { /* end: all zeroes */ }, |
| 394 | }; | 406 | }; |
| 395 | 407 | ||
| @@ -405,13 +417,35 @@ static struct uncore_event_desc snb_uncore_imc_events[] = { · 9 unmodified lines | |||
| 405 | #define SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE 0x5054 | 417 | #define SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE 0x5054 |
| 406 | #define SNB_UNCORE_PCI_IMC_CTR_BASE SNB_UNCORE_PCI_IMC_DATA_READS_BASE | 418 | #define SNB_UNCORE_PCI_IMC_CTR_BASE SNB_UNCORE_PCI_IMC_DATA_READS_BASE |
| 407 | 419 | ||
| 420 | /* BW break down- legacy counters */ | ||
| 421 | #define SNB_UNCORE_PCI_IMC_GT_REQUESTS 0x3 | ||
| 422 | #define SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE 0x5040 | ||
| 423 | #define SNB_UNCORE_PCI_IMC_IA_REQUESTS 0x4 | ||
| 424 | #define SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE 0x5044 | ||
| 425 | #define SNB_UNCORE_PCI_IMC_IO_REQUESTS 0x5 | ||
| 426 | #define SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE 0x5048 | ||
| 427 | |||
| 408 | enum perf_snb_uncore_imc_freerunning_types { | 428 | enum perf_snb_uncore_imc_freerunning_types { |
| 409 | SNB_PCI_UNCORE_IMC_DATA = 0, | 429 | SNB_PCI_UNCORE_IMC_DATA_READS = 0, |
| 430 | SNB_PCI_UNCORE_IMC_DATA_WRITES, | ||
| 431 | SNB_PCI_UNCORE_IMC_GT_REQUESTS, | ||
| 432 | SNB_PCI_UNCORE_IMC_IA_REQUESTS, | ||
| 433 | SNB_PCI_UNCORE_IMC_IO_REQUESTS, | ||
| 434 | |||
| 410 | SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX, | 435 | SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX, |
| 411 | }; | 436 | }; |
| 412 | 437 | ||
| 413 | static struct freerunning_counters snb_uncore_imc_freerunning[] = { | 438 | static struct freerunning_counters snb_uncore_imc_freerunning[] = { |
| 414 | [SNB_PCI_UNCORE_IMC_DATA] = { SNB_UNCORE_PCI_IMC_DATA_READS_BASE, 0x4, 0x0, 2, 32 }, | 439 | [SNB_PCI_UNCORE_IMC_DATA_READS] = { SNB_UNCORE_PCI_IMC_DATA_READS_BASE, |
| 440 | 0x0, 0x0, 1, 32 }, | ||
| 441 | [SNB_PCI_UNCORE_IMC_DATA_READS] = { SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE, | ||
| 442 | 0x0, 0x0, 1, 32 }, | ||
| 443 | [SNB_PCI_UNCORE_IMC_GT_REQUESTS] = { SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE, | ||
| 444 | 0x0, 0x0, 1, 32 }, | ||
| 445 | [SNB_PCI_UNCORE_IMC_IA_REQUESTS] = { SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE, | ||
| 446 | 0x0, 0x0, 1, 32 }, | ||
| 447 | [SNB_PCI_UNCORE_IMC_IO_REQUESTS] = { SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE, | ||
| 448 | 0x0, 0x0, 1, 32 }, | ||
| 415 | }; | 449 | }; |
| 416 | 450 | ||
| 417 | static struct attribute *snb_uncore_imc_formats_attr[] = { | 451 | static struct attribute *snb_uncore_imc_formats_attr[] = { |
| @@ -525,6 +559,18 @@ static int snb_uncore_imc_event_init(struct perf_event *event) · 107 unmodified lines | |||
| 525 | base = SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE; | 559 | base = SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE; |
| 526 | idx = UNCORE_PMC_IDX_FREERUNNING; | 560 | idx = UNCORE_PMC_IDX_FREERUNNING; |
| 527 | break; | 561 | break; |
| 562 | case SNB_UNCORE_PCI_IMC_GT_REQUESTS: | ||
| 563 | base = SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE; | ||
| 564 | idx = UNCORE_PMC_IDX_FREERUNNING; | ||
| 565 | break; | ||
| 566 | case SNB_UNCORE_PCI_IMC_IA_REQUESTS: | ||
| 567 | base = SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE; | ||
| 568 | idx = UNCORE_PMC_IDX_FREERUNNING; | ||
| 569 | break; | ||
| 570 | case SNB_UNCORE_PCI_IMC_IO_REQUESTS: | ||
| 571 | base = SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE; | ||
| 572 | idx = UNCORE_PMC_IDX_FREERUNNING; | ||
| 573 | break; | ||
| 528 | default: | 574 | default: |
| 529 | return -EINVAL; | 575 | return -EINVAL; |
| 530 | } | 576 | } |
| @@ -598,7 +644,7 @@ static struct intel_uncore_ops snb_uncore_imc_ops = { · 67 unmodified lines | |||
| 598 | 644 | ||
| 599 | static struct intel_uncore_type snb_uncore_imc = { | 645 | static struct intel_uncore_type snb_uncore_imc = { |
| 600 | .name = "imc", | 646 | .name = "imc", |
| 601 | .num_counters = 2, | 647 | .num_counters = 5, |
| 602 | .num_boxes = 1, | 648 | .num_boxes = 1, |
| 603 | .num_freerunning_types = SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX, | 649 | .num_freerunning_types = SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX, |
| 604 | .mmio_map_size = SNB_UNCORE_PCI_IMC_MAP_SIZE, | 650 | .mmio_map_size = SNB_UNCORE_PCI_IMC_MAP_SIZE, |
| @@ -81,11 +81,8 @@ extern unsigned long efi_fw_vendor, efi_config_table; · 80 unmodified lines | |||
| 81 | kernel_fpu_end(); \ | 81 | kernel_fpu_end(); \ |
| 82 | }) | 82 | }) |
| 83 | 83 | ||
| 84 | |||
| 85 | #define arch_efi_call_virt(p, f, args...) p->f(args) | 84 | #define arch_efi_call_virt(p, f, args...) p->f(args) |
| 86 | 85 | ||
| 87 | #define efi_ioremap(addr, size, type, attr) ioremap_cache(addr, size) | ||
| 88 | |||
| 89 | #else /* !CONFIG_X86_32 */ | 86 | #else /* !CONFIG_X86_32 */ |
| 90 | 87 | ||
| 91 | #define EFI_LOADER_SIGNATURE "EL64" | 88 | #define EFI_LOADER_SIGNATURE "EL64" |
| @@ -125,9 +122,6 @@ struct efi_scratch { · 33 unmodified lines | |||
| 125 | kernel_fpu_end(); \ | 122 | kernel_fpu_end(); \ |
| 126 | }) | 123 | }) |
| 127 | 124 | ||
| 128 | extern void __iomem *__init efi_ioremap(unsigned long addr, unsigned long size, | ||
| 129 | u32 type, u64 attribute); | ||
| 130 | |||
| 131 | #ifdef CONFIG_KASAN | 125 | #ifdef CONFIG_KASAN |
| 132 | /* | 126 | /* |
| 133 | * CONFIG_KASAN may redefine memset to __memset. __memset function is present | 127 | * CONFIG_KASAN may redefine memset to __memset. __memset function is present |
| @@ -143,17 +137,13 @@ extern void __iomem *__init efi_ioremap(unsigned long addr, unsigned long size, · 9 unmodified lines | |||
| 143 | #endif /* CONFIG_X86_32 */ | 137 | #endif /* CONFIG_X86_32 */ |
| 144 | 138 | ||
| 145 | extern struct efi_scratch efi_scratch; | 139 | extern struct efi_scratch efi_scratch; |
| 146 | extern void __init efi_set_executable(efi_memory_desc_t *md, bool executable); | ||
| 147 | extern int __init efi_memblock_x86_reserve_range(void); | 140 | extern int __init efi_memblock_x86_reserve_range(void); |
| 148 | extern void __init efi_print_memmap(void); | 141 | extern void __init efi_print_memmap(void); |
| 149 | extern void __init efi_memory_uc(u64 addr, unsigned long size); | ||
| 150 | extern void __init efi_map_region(efi_memory_desc_t *md); | 142 | extern void __init efi_map_region(efi_memory_desc_t *md); |
| 151 | extern void __init efi_map_region_fixed(efi_memory_desc_t *md); | 143 | extern void __init efi_map_region_fixed(efi_memory_desc_t *md); |
| 152 | extern void efi_sync_low_kernel_mappings(void); | 144 | extern void efi_sync_low_kernel_mappings(void); |
| 153 | extern int __init efi_alloc_page_tables(void); | 145 | extern int __init efi_alloc_page_tables(void); |
| 154 | extern int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages); | 146 | extern int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages); |
| 155 | extern void __init old_map_region(efi_memory_desc_t *md); | ||
| 156 | extern void __init runtime_code_page_mkexec(void); | ||
| 157 | extern void __init efi_runtime_update_mappings(void); | 147 | extern void __init efi_runtime_update_mappings(void); |
| 158 | extern void __init efi_dump_pagetable(void); | 148 | extern void __init efi_dump_pagetable(void); |
| 159 | extern void __init efi_apply_memmap_quirks(void); | 149 | extern void __init efi_apply_memmap_quirks(void); |
| @@ -1596,7 +1596,8 @@ asmlinkage void kvm_spurious_fault(void); · 1595 unmodified lines | |||
| 1596 | _ASM_EXTABLE(666b, 667b) | 1596 | _ASM_EXTABLE(666b, 667b) |
| 1597 | 1597 | ||
| 1598 | #define KVM_ARCH_WANT_MMU_NOTIFIER | 1598 | #define KVM_ARCH_WANT_MMU_NOTIFIER |
| 1599 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end); | 1599 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
| 1600 | unsigned flags); | ||
| 1600 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); | 1601 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); |
| 1601 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); | 1602 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); |
| 1602 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | 1603 | int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); |
| @@ -59,5 +59,6 @@ typedef struct { · 58 unmodified lines | |||
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | void leave_mm(int cpu); | 61 | void leave_mm(int cpu); |
| 62 | #define leave_mm leave_mm | ||
| 62 | 63 | ||
| 63 | #endif /* _ASM_X86_MMU_H */ | 64 | #endif /* _ASM_X86_MMU_H */ |
| @@ -239,7 +239,7 @@ void __init arch_init_ideal_nops(void) · 238 unmodified lines | |||
| 239 | return; | 239 | return; |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | /* fall through */ | 242 | fallthrough; |
| 243 | 243 | ||
| 244 | default: | 244 | default: |
| 245 | #ifdef CONFIG_X86_64 | 245 | #ifdef CONFIG_X86_64 |
| @@ -800,7 +800,7 @@ static int irq_polarity(int idx) · 799 unmodified lines | |||
| 800 | return IOAPIC_POL_HIGH; | 800 | return IOAPIC_POL_HIGH; |
| 801 | case MP_IRQPOL_RESERVED: | 801 | case MP_IRQPOL_RESERVED: |
| 802 | pr_warn("IOAPIC: Invalid polarity: 2, defaulting to low\n"); | 802 | pr_warn("IOAPIC: Invalid polarity: 2, defaulting to low\n"); |
| 803 | /* fall through */ | 803 | fallthrough; |
| 804 | case MP_IRQPOL_ACTIVE_LOW: | 804 | case MP_IRQPOL_ACTIVE_LOW: |
| 805 | default: /* Pointless default required due to do gcc stupidity */ | 805 | default: /* Pointless default required due to do gcc stupidity */ |
| 806 | return IOAPIC_POL_LOW; | 806 | return IOAPIC_POL_LOW; |
| @@ -848,7 +848,7 @@ static int irq_trigger(int idx) · 41 unmodified lines | |||
| 848 | return IOAPIC_EDGE; | 848 | return IOAPIC_EDGE; |
| 849 | case MP_IRQTRIG_RESERVED: | 849 | case MP_IRQTRIG_RESERVED: |
| 850 | pr_warn("IOAPIC: Invalid trigger mode 2 defaulting to level\n"); | 850 | pr_warn("IOAPIC: Invalid trigger mode 2 defaulting to level\n"); |
| 851 | /* fall through */ | 851 | fallthrough; |
| 852 | case MP_IRQTRIG_LEVEL: | 852 | case MP_IRQTRIG_LEVEL: |
| 853 | default: /* Pointless default required due to do gcc stupidity */ | 853 | default: /* Pointless default required due to do gcc stupidity */ |
| 854 | return IOAPIC_LEVEL; | 854 | return IOAPIC_LEVEL; |
| @@ -149,7 +149,7 @@ void __init default_setup_apic_routing(void) · 148 unmodified lines | |||
| 149 | break; | 149 | break; |
| 150 | } | 150 | } |
| 151 | /* P4 and above */ | 151 | /* P4 and above */ |
| 152 | /* fall through */ | 152 | fallthrough; |
| 153 | case X86_VENDOR_HYGON: | 153 | case X86_VENDOR_HYGON: |
| 154 | case X86_VENDOR_AMD: | 154 | case X86_VENDOR_AMD: |
| 155 | def_to_bigsmp = 1; | 155 | def_to_bigsmp = 1; |
| @@ -161,6 +161,7 @@ static void apic_update_vector(struct irq_data *irqd, unsigned int newvec, · 160 unmodified lines | |||
| 161 | apicd->move_in_progress = true; | 161 | apicd->move_in_progress = true; |
| 162 | apicd->prev_vector = apicd->vector; | 162 | apicd->prev_vector = apicd->vector; |
| 163 | apicd->prev_cpu = apicd->cpu; | 163 | apicd->prev_cpu = apicd->cpu; |
| 164 | WARN_ON_ONCE(apicd->cpu == newcpu); | ||
| 164 | } else { | 165 | } else { |
| 165 | irq_matrix_free(vector_matrix, apicd->cpu, apicd->vector, | 166 | irq_matrix_free(vector_matrix, apicd->cpu, apicd->vector, |
| 166 | managed); | 167 | managed); |
| @@ -910,7 +911,7 @@ void send_cleanup_vector(struct irq_cfg *cfg) · 743 unmodified lines | |||
| 910 | __send_cleanup_vector(apicd); | 911 | __send_cleanup_vector(apicd); |
| 911 | } | 912 | } |
| 912 | 913 | ||
| 913 | static void __irq_complete_move(struct irq_cfg *cfg, unsigned vector) | 914 | void irq_complete_move(struct irq_cfg *cfg) |
| 914 | { | 915 | { |
| 915 | struct apic_chip_data *apicd; | 916 | struct apic_chip_data *apicd; |
| 916 | 917 | ||
| @@ -918,15 +919,16 @@ static void __irq_complete_move(struct irq_cfg *cfg, unsigned vector) · 1 unmodified line | |||
| 918 | if (likely(!apicd->move_in_progress)) | 919 | if (likely(!apicd->move_in_progress)) |
| 919 | return; | 920 | return; |
| 920 | 921 | ||
| 921 | if (vector == apicd->vector && apicd->cpu == smp_processor_id()) | 922 | /* |
| 923 | * If the interrupt arrived on the new target CPU, cleanup the | ||
| 924 | * vector on the old target CPU. A vector check is not required | ||
| 925 | * because an interrupt can never move from one vector to another | ||
| 926 | * on the same CPU. | ||
| 927 | */ | ||
| 928 | if (apicd->cpu == smp_processor_id()) | ||
| 922 | __send_cleanup_vector(apicd); | 929 | __send_cleanup_vector(apicd); |
| 923 | } | 930 | } |
| 924 | 931 | ||
| 925 | void irq_complete_move(struct irq_cfg *cfg) | ||
| 926 | { | ||
| 927 | __irq_complete_move(cfg, ~get_irq_regs()->orig_ax); | ||
| 928 | } | ||
| 929 | |||
| 930 | /* | 932 | /* |
| 931 | * Called from fixup_irqs() with @desc->lock held and interrupts disabled. | 933 | * Called from fixup_irqs() with @desc->lock held and interrupts disabled. |
| 932 | */ | 934 | */ |
| @@ -248,7 +248,7 @@ amd_cpuid4(int leaf, union _cpuid4_leaf_eax *eax, · 247 unmodified lines | |||
| 248 | switch (leaf) { | 248 | switch (leaf) { |
| 249 | case 1: | 249 | case 1: |
| 250 | l1 = &l1i; | 250 | l1 = &l1i; |
| 251 | /* fall through */ | 251 | fallthrough; |
| 252 | case 0: | 252 | case 0: |
| 253 | if (!l1->val) | 253 | if (!l1->val) |
| 254 | return; | 254 | return; |
| @@ -199,7 +199,7 @@ static int raise_local(void) · 198 unmodified lines | |||
| 199 | * calling irq_enter, but the necessary | 199 | * calling irq_enter, but the necessary |
| 200 | * machinery isn't exported currently. | 200 | * machinery isn't exported currently. |
| 201 | */ | 201 | */ |
| 202 | /*FALL THROUGH*/ | 202 | fallthrough; |
| 203 | case MCJ_CTX_PROCESS: | 203 | case MCJ_CTX_PROCESS: |
| 204 | raise_exception(m, NULL); | 204 | raise_exception(m, NULL); |
| 205 | break; | 205 | break; |
| @@ -193,7 +193,7 @@ unsigned long cmci_intel_adjust_timer(unsigned long interval) · 192 unmodified lines | |||
| 193 | if (!atomic_sub_return(1, &cmci_storm_on_cpus)) | 193 | if (!atomic_sub_return(1, &cmci_storm_on_cpus)) |
| 194 | pr_notice("CMCI storm subsided: switching to interrupt mode\n"); | 194 | pr_notice("CMCI storm subsided: switching to interrupt mode\n"); |
| 195 | 195 | ||
| 196 | /* FALLTHROUGH */ | 196 | fallthrough; |
| 197 | 197 | ||
| 198 | case CMCI_STORM_SUBSIDED: | 198 | case CMCI_STORM_SUBSIDED: |
| 199 | /* | 199 | /* |
| @@ -98,7 +98,7 @@ cyrix_get_free_region(unsigned long base, unsigned long size, int replace_reg) · 97 unmodified lines | |||
| 98 | case 7: | 98 | case 7: |
| 99 | if (size < 0x40) | 99 | if (size < 0x40) |
| 100 | break; | 100 | break; |
| 101 | /* Else, fall through */ | 101 | fallthrough; |
| 102 | case 6: | 102 | case 6: |
| 103 | case 5: | 103 | case 5: |
| 104 | case 4: | 104 | case 4: |
| @@ -349,7 +349,7 @@ static int arch_build_bp_info(struct perf_event *bp, · 348 unmodified lines | |||
| 349 | hw->len = X86_BREAKPOINT_LEN_X; | 349 | hw->len = X86_BREAKPOINT_LEN_X; |
| 350 | return 0; | 350 | return 0; |
| 351 | } | 351 | } |
| 352 | /* fall through */ | 352 | fallthrough; |
| 353 | default: | 353 | default: |
| 354 | return -EINVAL; | 354 | return -EINVAL; |
| 355 | } | 355 | } |
| @@ -450,7 +450,7 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code, · 449 unmodified lines | |||
| 450 | ptr = &remcomInBuffer[1]; | 450 | ptr = &remcomInBuffer[1]; |
| 451 | if (kgdb_hex2long(&ptr, &addr)) | 451 | if (kgdb_hex2long(&ptr, &addr)) |
| 452 | linux_regs->ip = addr; | 452 | linux_regs->ip = addr; |
| 453 | /* fall through */ | 453 | fallthrough; |
| 454 | case 'D': | 454 | case 'D': |
| 455 | case 'k': | 455 | case 'k': |
| 456 | /* clear the trace bit */ | 456 | /* clear the trace bit */ |
| @@ -539,7 +539,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) · 82 unmodified lines | |||
| 539 | * a system call which should be ignored | 539 | * a system call which should be ignored |
| 540 | */ | 540 | */ |
| 541 | return NOTIFY_DONE; | 541 | return NOTIFY_DONE; |
| 542 | /* fall through */ | 542 | fallthrough; |
| 543 | default: | 543 | default: |
| 544 | if (user_mode(regs)) | 544 | if (user_mode(regs)) |
| 545 | return NOTIFY_DONE; | 545 | return NOTIFY_DONE; |
| @@ -312,7 +312,7 @@ static void __init construct_default_ioirq_mptable(int mpc_default_type) · 311 unmodified lines | |||
| 312 | case 2: | 312 | case 2: |
| 313 | if (i == 0 || i == 13) | 313 | if (i == 0 || i == 13) |
| 314 | continue; /* IRQ0 & IRQ13 not connected */ | 314 | continue; /* IRQ0 & IRQ13 not connected */ |
| 315 | /* fall through */ | 315 | fallthrough; |
| 316 | default: | 316 | default: |
| 317 | if (i == 2) | 317 | if (i == 2) |
| 318 | continue; /* IRQ2 is never connected */ | 318 | continue; /* IRQ2 is never connected */ |
| @@ -356,7 +356,7 @@ static void __init construct_ioapic_table(int mpc_default_type) · 37 unmodified lines | |||
| 356 | default: | 356 | default: |
| 357 | pr_err("???\nUnknown standard configuration %d\n", | 357 | pr_err("???\nUnknown standard configuration %d\n", |
| 358 | mpc_default_type); | 358 | mpc_default_type); |
| 359 | /* fall through */ | 359 | fallthrough; |
| 360 | case 1: | 360 | case 1: |
| 361 | case 5: | 361 | case 5: |
| 362 | memcpy(bus.bustype, "ISA ", 6); | 362 | memcpy(bus.bustype, "ISA ", 6); |
| @@ -684,9 +684,7 @@ void arch_cpu_idle(void) · 683 unmodified lines | |||
| 684 | */ | 684 | */ |
| 685 | void __cpuidle default_idle(void) | 685 | void __cpuidle default_idle(void) |
| 686 | { | 686 | { |
| 687 | trace_cpu_idle_rcuidle(1, smp_processor_id()); | ||
| 688 | safe_halt(); | 687 | safe_halt(); |
| 689 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); | ||
| 690 | } | 688 | } |
| 691 | #if defined(CONFIG_APM_MODULE) || defined(CONFIG_HALTPOLL_CPUIDLE_MODULE) | 689 | #if defined(CONFIG_APM_MODULE) || defined(CONFIG_HALTPOLL_CPUIDLE_MODULE) |
| 692 | EXPORT_SYMBOL(default_idle); | 690 | EXPORT_SYMBOL(default_idle); |
| @@ -792,7 +790,6 @@ static int prefer_mwait_c1_over_halt(const struct cpuinfo_x86 *c) · 99 unmodified lines | |||
| 792 | static __cpuidle void mwait_idle(void) | 790 | static __cpuidle void mwait_idle(void) |
| 793 | { | 791 | { |
| 794 | if (!current_set_polling_and_test()) { | 792 | if (!current_set_polling_and_test()) { |
| 795 | trace_cpu_idle_rcuidle(1, smp_processor_id()); | ||
| 796 | if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) { | 793 | if (this_cpu_has(X86_BUG_CLFLUSH_MONITOR)) { |
| 797 | mb(); /* quirk */ | 794 | mb(); /* quirk */ |
| 798 | clflush((void *)¤t_thread_info()->flags); | 795 | clflush((void *)¤t_thread_info()->flags); |
| @@ -804,7 +801,6 @@ static __cpuidle void mwait_idle(void) · 5 unmodified lines | |||
| 804 | __sti_mwait(0, 0); | 801 | __sti_mwait(0, 0); |
| 805 | else | 802 | else |
| 806 | local_irq_enable(); | 803 | local_irq_enable(); |
| 807 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); | ||
| 808 | } else { | 804 | } else { |
| 809 | local_irq_enable(); | 805 | local_irq_enable(); |
| 810 | } | 806 | } |
| @@ -204,7 +204,7 @@ static int set_segment_reg(struct task_struct *task, · 203 unmodified lines | |||
| 204 | case offsetof(struct user_regs_struct, ss): | 204 | case offsetof(struct user_regs_struct, ss): |
| 205 | if (unlikely(value == 0)) | 205 | if (unlikely(value == 0)) |
| 206 | return -EIO; | 206 | return -EIO; |
| 207 | /* Else, fall through */ | 207 | fallthrough; |
| 208 | 208 | ||
| 209 | default: | 209 | default: |
| 210 | *pt_regs_access(task_pt_regs(task), offset) = value; | 210 | *pt_regs_access(task_pt_regs(task), offset) = value; |
| @@ -654,7 +654,7 @@ static void native_machine_emergency_restart(void) · 653 unmodified lines | |||
| 654 | 654 | ||
| 655 | case BOOT_CF9_FORCE: | 655 | case BOOT_CF9_FORCE: |
| 656 | port_cf9_safe = true; | 656 | port_cf9_safe = true; |
| 657 | /* Fall through */ | 657 | fallthrough; |
| 658 | 658 | ||
| 659 | case BOOT_CF9_SAFE: | 659 | case BOOT_CF9_SAFE: |
| 660 | if (port_cf9_safe) { | 660 | if (port_cf9_safe) { |
| @@ -726,7 +726,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs) · 725 unmodified lines | |||
| 726 | regs->ax = -EINTR; | 726 | regs->ax = -EINTR; |
| 727 | break; | 727 | break; |
| 728 | } | 728 | } |
| 729 | /* fallthrough */ | 729 | fallthrough; |
| 730 | case -ERESTARTNOINTR: | 730 | case -ERESTARTNOINTR: |
| 731 | regs->ax = regs->orig_ax; | 731 | regs->ax = regs->orig_ax; |
| 732 | regs->ip -= 2; | 732 | regs->ip -= 2; |
| @@ -1594,14 +1594,28 @@ int native_cpu_disable(void) · 1593 unmodified lines | |||
| 1594 | if (ret) | 1594 | if (ret) |
| 1595 | return ret; | 1595 | return ret; |
| 1596 | 1596 | ||
| 1597 | /* | ||
| 1598 | * Disable the local APIC. Otherwise IPI broadcasts will reach | ||
| 1599 | * it. It still responds normally to INIT, NMI, SMI, and SIPI | ||
| 1600 | * messages. | ||
| 1601 | */ | ||
| 1602 | apic_soft_disable(); | ||
| 1603 | cpu_disable_common(); | 1597 | cpu_disable_common(); |
| 1604 | 1598 | ||
| 1599 | /* | ||
| 1600 | * Disable the local APIC. Otherwise IPI broadcasts will reach | ||
| 1601 | * it. It still responds normally to INIT, NMI, SMI, and SIPI | ||
| 1602 | * messages. | ||
| 1603 | * | ||
| 1604 | * Disabling the APIC must happen after cpu_disable_common() | ||
| 1605 | * which invokes fixup_irqs(). | ||
| 1606 | * | ||
| 1607 | * Disabling the APIC preserves already set bits in IRR, but | ||
| 1608 | * an interrupt arriving after disabling the local APIC does not | ||
| 1609 | * set the corresponding IRR bit. | ||
| 1610 | * | ||
| 1611 | * fixup_irqs() scans IRR for set bits so it can raise a not | ||
| 1612 | * yet handled interrupt on the new destination CPU via an IPI | ||
| 1613 | * but obviously it can't do so for IRR bits which are not set. | ||
| 1614 | * IOW, interrupts arriving after disabling the local APIC will | ||
| 1615 | * be lost. | ||
| 1616 | */ | ||
| 1617 | apic_soft_disable(); | ||
| 1618 | |||
| 1605 | return 0; | 1619 | return 0; |
| 1606 | } | 1620 | } |
| 1607 | 1621 | ||
| @@ -735,7 +735,7 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn) · 734 unmodified lines | |||
| 735 | * OPCODE1() of the "short" jmp which checks the same condition. | 735 | * OPCODE1() of the "short" jmp which checks the same condition. |
| 736 | */ | 736 | */ |
| 737 | opc1 = OPCODE2(insn) - 0x10; | 737 | opc1 = OPCODE2(insn) - 0x10; |
| 738 | /* fall through */ | 738 | fallthrough; |
| 739 | default: | 739 | default: |
| 740 | if (!is_cond_jmp_opcode(opc1)) | 740 | if (!is_cond_jmp_opcode(opc1)) |
| 741 | return -ENOSYS; | 741 | return -ENOSYS; |
| @@ -892,7 +892,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, · 150 unmodified lines | |||
| 892 | fix_ip_or_call = 0; | 892 | fix_ip_or_call = 0; |
| 893 | break; | 893 | break; |
| 894 | } | 894 | } |
| 895 | /* fall through */ | 895 | fallthrough; |
| 896 | default: | 896 | default: |
| 897 | riprel_analyze(auprobe, &insn); | 897 | riprel_analyze(auprobe, &insn); |
| 898 | } | 898 | } |
| @@ -3016,7 +3016,7 @@ static void string_registers_quirk(struct x86_emulate_ctxt *ctxt) · 3015 unmodified lines | |||
| 3016 | case 0xa4: /* movsb */ | 3016 | case 0xa4: /* movsb */ |
| 3017 | case 0xa5: /* movsd/w */ | 3017 | case 0xa5: /* movsd/w */ |
| 3018 | *reg_rmw(ctxt, VCPU_REGS_RSI) &= (u32)-1; | 3018 | *reg_rmw(ctxt, VCPU_REGS_RSI) &= (u32)-1; |
| 3019 | /* fall through */ | 3019 | fallthrough; |
| 3020 | case 0xaa: /* stosb */ | 3020 | case 0xaa: /* stosb */ |
| 3021 | case 0xab: /* stosd/w */ | 3021 | case 0xab: /* stosd/w */ |
| 3022 | *reg_rmw(ctxt, VCPU_REGS_RDI) &= (u32)-1; | 3022 | *reg_rmw(ctxt, VCPU_REGS_RDI) &= (u32)-1; |
| @@ -1779,7 +1779,7 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu) · 1778 unmodified lines | |||
| 1779 | ret = kvm_hvcall_signal_event(vcpu, fast, ingpa); | 1779 | ret = kvm_hvcall_signal_event(vcpu, fast, ingpa); |
| 1780 | if (ret != HV_STATUS_INVALID_PORT_ID) | 1780 | if (ret != HV_STATUS_INVALID_PORT_ID) |
| 1781 | break; | 1781 | break; |
| 1782 | /* fall through - maybe userspace knows this conn_id. */ | 1782 | fallthrough; /* maybe userspace knows this conn_id */ |
| 1783 | case HVCALL_POST_MESSAGE: | 1783 | case HVCALL_POST_MESSAGE: |
| 1784 | /* don't bother userspace if it has no way to handle it */ | 1784 | /* don't bother userspace if it has no way to handle it */ |
| 1785 | if (unlikely(rep || !vcpu_to_synic(vcpu)->active)) { | 1785 | if (unlikely(rep || !vcpu_to_synic(vcpu)->active)) { |
| @@ -285,7 +285,7 @@ int kvm_set_routing_entry(struct kvm *kvm, · 284 unmodified lines | |||
| 285 | switch (ue->u.irqchip.irqchip) { | 285 | switch (ue->u.irqchip.irqchip) { |
| 286 | case KVM_IRQCHIP_PIC_SLAVE: | 286 | case KVM_IRQCHIP_PIC_SLAVE: |
| 287 | e->irqchip.pin += PIC_NUM_PINS / 2; | 287 | e->irqchip.pin += PIC_NUM_PINS / 2; |
| 288 | /* fall through */ | 288 | fallthrough; |
| 289 | case KVM_IRQCHIP_PIC_MASTER: | 289 | case KVM_IRQCHIP_PIC_MASTER: |
| 290 | if (ue->u.irqchip.pin >= PIC_NUM_PINS / 2) | 290 | if (ue->u.irqchip.pin >= PIC_NUM_PINS / 2) |
| 291 | return -EINVAL; | 291 | return -EINVAL; |
| @@ -1053,7 +1053,7 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode, · 1052 unmodified lines | |||
| 1053 | switch (delivery_mode) { | 1053 | switch (delivery_mode) { |
| 1054 | case APIC_DM_LOWEST: | 1054 | case APIC_DM_LOWEST: |
| 1055 | vcpu->arch.apic_arb_prio++; | 1055 | vcpu->arch.apic_arb_prio++; |
| 1056 | /* fall through */ | 1056 | fallthrough; |
| 1057 | case APIC_DM_FIXED: | 1057 | case APIC_DM_FIXED: |
| 1058 | if (unlikely(trig_mode && !level)) | 1058 | if (unlikely(trig_mode && !level)) |
| 1059 | break; | 1059 | break; |
| @@ -1341,7 +1341,7 @@ static u32 __apic_read(struct kvm_lapic *apic, unsigned int offset) · 281 unmodified lines | |||
| 1341 | break; | 1341 | break; |
| 1342 | case APIC_TASKPRI: | 1342 | case APIC_TASKPRI: |
| 1343 | report_tpr_access(apic, false); | 1343 | report_tpr_access(apic, false); |
| 1344 | /* fall thru */ | 1344 | fallthrough; |
| 1345 | default: | 1345 | default: |
| 1346 | val = kvm_lapic_get_reg(apic, offset); | 1346 | val = kvm_lapic_get_reg(apic, offset); |
| 1347 | break; | 1347 | break; |
| @@ -2027,7 +2027,7 @@ int kvm_lapic_reg_write(struct kvm_lapic *apic, u32 reg, u32 val) · 679 unmodified lines | |||
| 2027 | 2027 | ||
| 2028 | case APIC_LVT0: | 2028 | case APIC_LVT0: |
| 2029 | apic_manage_nmi_watchdog(apic, val); | 2029 | apic_manage_nmi_watchdog(apic, val); |
| 2030 | /* fall through */ | 2030 | fallthrough; |
| 2031 | case APIC_LVTTHMR: | 2031 | case APIC_LVTTHMR: |
| 2032 | case APIC_LVTPC: | 2032 | case APIC_LVTPC: |
| 2033 | case APIC_LVT1: | 2033 | case APIC_LVT1: |
| @@ -1916,7 +1916,8 @@ static int kvm_handle_hva(struct kvm *kvm, unsigned long hva, · 1915 unmodified lines | |||
| 1916 | return kvm_handle_hva_range(kvm, hva, hva + 1, data, handler); | 1916 | return kvm_handle_hva_range(kvm, hva, hva + 1, data, handler); |
| 1917 | } | 1917 | } |
| 1918 | 1918 | ||
| 1919 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end) | 1919 | int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end, |
| 1920 | unsigned flags) | ||
| 1920 | { | 1921 | { |
| 1921 | return kvm_handle_hva_range(kvm, start, end, 0, kvm_unmap_rmapp); | 1922 | return kvm_handle_hva_range(kvm, start, end, 0, kvm_unmap_rmapp); |
| 1922 | } | 1923 | } |
| @@ -4421,7 +4422,7 @@ __reset_rsvds_bits_mask(struct kvm_vcpu *vcpu, · 2498 unmodified lines | |||
| 4421 | rsvd_bits(maxphyaddr, 51); | 4422 | rsvd_bits(maxphyaddr, 51); |
| 4422 | rsvd_check->rsvd_bits_mask[1][4] = | 4423 | rsvd_check->rsvd_bits_mask[1][4] = |
| 4423 | rsvd_check->rsvd_bits_mask[0][4]; | 4424 | rsvd_check->rsvd_bits_mask[0][4]; |
| 4424 | /* fall through */ | 4425 | fallthrough; |
| 4425 | case PT64_ROOT_4LEVEL: | 4426 | case PT64_ROOT_4LEVEL: |
| 4426 | rsvd_check->rsvd_bits_mask[0][3] = exb_bit_rsvd | | 4427 | rsvd_check->rsvd_bits_mask[0][3] = exb_bit_rsvd | |
| 4427 | nonleaf_bit8_rsvd | rsvd_bits(7, 7) | | 4428 | nonleaf_bit8_rsvd | rsvd_bits(7, 7) | |
| @@ -2668,7 +2668,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) · 2667 unmodified lines | |||
| 2668 | case MSR_IA32_APICBASE: | 2668 | case MSR_IA32_APICBASE: |
| 2669 | if (kvm_vcpu_apicv_active(vcpu)) | 2669 | if (kvm_vcpu_apicv_active(vcpu)) |
| 2670 | avic_update_vapic_bar(to_svm(vcpu), data); | 2670 | avic_update_vapic_bar(to_svm(vcpu), data); |
| 2671 | /* Fall through */ | 2671 | fallthrough; |
| 2672 | default: | 2672 | default: |
| 2673 | return kvm_set_msr_common(vcpu, msr); | 2673 | return kvm_set_msr_common(vcpu, msr); |
| 2674 | } | 2674 | } |
| @@ -4654,7 +4654,7 @@ static bool rmode_exception(struct kvm_vcpu *vcpu, int vec) · 4653 unmodified lines | |||
| 4654 | vmcs_read32(VM_EXIT_INSTRUCTION_LEN); | 4654 | vmcs_read32(VM_EXIT_INSTRUCTION_LEN); |
| 4655 | if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) | 4655 | if (vcpu->guest_debug & KVM_GUESTDBG_USE_SW_BP) |
| 4656 | return false; | 4656 | return false; |
| 4657 | /* fall through */ | 4657 | fallthrough; |
| 4658 | case DB_VECTOR: | 4658 | case DB_VECTOR: |
| 4659 | return !(vcpu->guest_debug & | 4659 | return !(vcpu->guest_debug & |
| 4660 | (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP)); | 4660 | (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP)); |
| @@ -4827,7 +4827,7 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu) · 166 unmodified lines | |||
| 4827 | } | 4827 | } |
| 4828 | kvm_run->debug.arch.dr6 = dr6 | DR6_FIXED_1 | DR6_RTM; | 4828 | kvm_run->debug.arch.dr6 = dr6 | DR6_FIXED_1 | DR6_RTM; |
| 4829 | kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7); | 4829 | kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7); |
| 4830 | /* fall through */ | 4830 | fallthrough; |
| 4831 | case BP_VECTOR: | 4831 | case BP_VECTOR: |
| 4832 | /* | 4832 | /* |
| 4833 | * Update instruction length as we may reinject #BP from | 4833 | * Update instruction length as we may reinject #BP from |
| @@ -5257,7 +5257,7 @@ static int handle_task_switch(struct kvm_vcpu *vcpu) · 423 unmodified lines | |||
| 5257 | error_code = | 5257 | error_code = |
| 5258 | vmcs_read32(IDT_VECTORING_ERROR_CODE); | 5258 | vmcs_read32(IDT_VECTORING_ERROR_CODE); |
| 5259 | } | 5259 | } |
| 5260 | /* fall through */ | 5260 | fallthrough; |
| 5261 | case INTR_TYPE_SOFT_EXCEPTION: | 5261 | case INTR_TYPE_SOFT_EXCEPTION: |
| 5262 | kvm_clear_exception_queue(vcpu); | 5262 | kvm_clear_exception_queue(vcpu); |
| 5263 | break; | 5263 | break; |
| @@ -5610,7 +5610,7 @@ static int handle_invpcid(struct kvm_vcpu *vcpu) · 346 unmodified lines | |||
| 5610 | * keeping track of global entries in shadow page tables. | 5610 | * keeping track of global entries in shadow page tables. |
| 5611 | */ | 5611 | */ |
| 5612 | 5612 | ||
| 5613 | /* fall-through */ | 5613 | fallthrough; |
| 5614 | case INVPCID_TYPE_ALL_INCL_GLOBAL: | 5614 | case INVPCID_TYPE_ALL_INCL_GLOBAL: |
| 5615 | kvm_mmu_unload(vcpu); | 5615 | kvm_mmu_unload(vcpu); |
| 5616 | return kvm_skip_emulated_instruction(vcpu); | 5616 | return kvm_skip_emulated_instruction(vcpu); |
| @@ -6578,7 +6578,7 @@ static void __vmx_complete_interrupts(struct kvm_vcpu *vcpu, · 961 unmodified lines | |||
| 6578 | break; | 6578 | break; |
| 6579 | case INTR_TYPE_SOFT_EXCEPTION: | 6579 | case INTR_TYPE_SOFT_EXCEPTION: |
| 6580 | vcpu->arch.event_exit_inst_len = vmcs_read32(instr_len_field); | 6580 | vcpu->arch.event_exit_inst_len = vmcs_read32(instr_len_field); |
| 6581 | /* fall through */ | 6581 | fallthrough; |
| 6582 | case INTR_TYPE_HARD_EXCEPTION: | 6582 | case INTR_TYPE_HARD_EXCEPTION: |
| 6583 | if (idt_vectoring_info & VECTORING_INFO_DELIVER_CODE_MASK) { | 6583 | if (idt_vectoring_info & VECTORING_INFO_DELIVER_CODE_MASK) { |
| 6584 | u32 err = vmcs_read32(error_code_field); | 6584 | u32 err = vmcs_read32(error_code_field); |
| @@ -6588,7 +6588,7 @@ static void __vmx_complete_interrupts(struct kvm_vcpu *vcpu, · 3 unmodified lines | |||
| 6588 | break; | 6588 | break; |
| 6589 | case INTR_TYPE_SOFT_INTR: | 6589 | case INTR_TYPE_SOFT_INTR: |
| 6590 | vcpu->arch.event_exit_inst_len = vmcs_read32(instr_len_field); | 6590 | vcpu->arch.event_exit_inst_len = vmcs_read32(instr_len_field); |
| 6591 | /* fall through */ | 6591 | fallthrough; |
| 6592 | case INTR_TYPE_EXT_INTR: | 6592 | case INTR_TYPE_EXT_INTR: |
| 6593 | kvm_queue_interrupt(vcpu, vector, type == INTR_TYPE_SOFT_INTR); | 6593 | kvm_queue_interrupt(vcpu, vector, type == INTR_TYPE_SOFT_INTR); |
| 6594 | break; | 6594 | break; |
| @@ -975,7 +975,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) · 974 unmodified lines | |||
| 975 | { | 975 | { |
| 976 | unsigned long old_cr4 = kvm_read_cr4(vcpu); | 976 | unsigned long old_cr4 = kvm_read_cr4(vcpu); |
| 977 | unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE | | 977 | unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE | |
| 978 | X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_PKE; | 978 | X86_CR4_SMEP; |
| 979 | 979 | ||
| 980 | if (kvm_valid_cr4(vcpu, cr4)) | 980 | if (kvm_valid_cr4(vcpu, cr4)) |
| 981 | return 1; | 981 | return 1; |
| @@ -1116,14 +1116,12 @@ static int __kvm_set_dr(struct kvm_vcpu *vcpu, int dr, unsigned long val) · 134 unmodified lines | |||
| 1116 | vcpu->arch.eff_db[dr] = val; | 1116 | vcpu->arch.eff_db[dr] = val; |
| 1117 | break; | 1117 | break; |
| 1118 | case 4: | 1118 | case 4: |
| 1119 | /* fall through */ | ||
| 1120 | case 6: | 1119 | case 6: |
| 1121 | if (!kvm_dr6_valid(val)) | 1120 | if (!kvm_dr6_valid(val)) |
| 1122 | return -1; /* #GP */ | 1121 | return -1; /* #GP */ |
| 1123 | vcpu->arch.dr6 = (val & DR6_VOLATILE) | kvm_dr6_fixed(vcpu); | 1122 | vcpu->arch.dr6 = (val & DR6_VOLATILE) | kvm_dr6_fixed(vcpu); |
| 1124 | break; | 1123 | break; |
| 1125 | case 5: | 1124 | case 5: |
| 1126 | /* fall through */ | ||
| 1127 | default: /* 7 */ | 1125 | default: /* 7 */ |
| 1128 | if (!kvm_dr7_valid(val)) | 1126 | if (!kvm_dr7_valid(val)) |
| 1129 | return -1; /* #GP */ | 1127 | return -1; /* #GP */ |
| @@ -1154,12 +1152,10 @@ int kvm_get_dr(struct kvm_vcpu *vcpu, int dr, unsigned long *val) · 24 unmodified lines | |||
| 1154 | *val = vcpu->arch.db[array_index_nospec(dr, size)]; | 1152 | *val = vcpu->arch.db[array_index_nospec(dr, size)]; |
| 1155 | break; | 1153 | break; |
| 1156 | case 4: | 1154 | case 4: |
| 1157 | /* fall through */ | ||
| 1158 | case 6: | 1155 | case 6: |
| 1159 | *val = vcpu->arch.dr6; | 1156 | *val = vcpu->arch.dr6; |
| 1160 | break; | 1157 | break; |
| 1161 | case 5: | 1158 | case 5: |
| 1162 | /* fall through */ | ||
| 1163 | default: /* 7 */ | 1159 | default: /* 7 */ |
| 1164 | *val = vcpu->arch.dr7; | 1160 | *val = vcpu->arch.dr7; |
| 1165 | break; | 1161 | break; |
| @@ -3051,7 +3047,8 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) · 1885 unmodified lines | |||
| 3051 | 3047 | ||
| 3052 | case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: | 3048 | case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR3: |
| 3053 | case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: | 3049 | case MSR_P6_PERFCTR0 ... MSR_P6_PERFCTR1: |
| 3054 | pr = true; /* fall through */ | 3050 | pr = true; |
| 3051 | fallthrough; | ||
| 3055 | case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3: | 3052 | case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL3: |
| 3056 | case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL1: | 3053 | case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL1: |
| 3057 | if (kvm_pmu_is_valid_msr(vcpu, msr)) | 3054 | if (kvm_pmu_is_valid_msr(vcpu, msr)) |
| @@ -4359,7 +4356,7 @@ static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu, · 1301 unmodified lines | |||
| 4359 | case KVM_CAP_HYPERV_SYNIC2: | 4356 | case KVM_CAP_HYPERV_SYNIC2: |
| 4360 | if (cap->args[0]) | 4357 | if (cap->args[0]) |
| 4361 | return -EINVAL; | 4358 | return -EINVAL; |
| 4362 | /* fall through */ | 4359 | fallthrough; |
| 4363 | 4360 | ||
| 4364 | case KVM_CAP_HYPERV_SYNIC: | 4361 | case KVM_CAP_HYPERV_SYNIC: |
| 4365 | if (!irqchip_in_kernel(vcpu->kvm)) | 4362 | if (!irqchip_in_kernel(vcpu->kvm)) |
| @@ -8672,7 +8669,7 @@ static inline int vcpu_block(struct kvm *kvm, struct kvm_vcpu *vcpu) · 4306 unmodified lines | |||
| 8672 | vcpu->arch.pv.pv_unhalted = false; | 8669 | vcpu->arch.pv.pv_unhalted = false; |
| 8673 | vcpu->arch.mp_state = | 8670 | vcpu->arch.mp_state = |
| 8674 | KVM_MP_STATE_RUNNABLE; | 8671 | KVM_MP_STATE_RUNNABLE; |
| 8675 | /* fall through */ | 8672 | fallthrough; |
| 8676 | case KVM_MP_STATE_RUNNABLE: | 8673 | case KVM_MP_STATE_RUNNABLE: |
| 8677 | vcpu->arch.apf.halted = false; | 8674 | vcpu->arch.apf.halted = false; |
| 8678 | break; | 8675 | break; |
| @@ -10751,9 +10748,11 @@ EXPORT_SYMBOL_GPL(kvm_spec_ctrl_test_value); · 2072 unmodified lines | |||
| 10751 | void kvm_fixup_and_inject_pf_error(struct kvm_vcpu *vcpu, gva_t gva, u16 error_code) | 10748 | void kvm_fixup_and_inject_pf_error(struct kvm_vcpu *vcpu, gva_t gva, u16 error_code) |
| 10752 | { | 10749 | { |
| 10753 | struct x86_exception fault; | 10750 | struct x86_exception fault; |
| 10751 | u32 access = error_code & | ||
| 10752 | (PFERR_WRITE_MASK | PFERR_FETCH_MASK | PFERR_USER_MASK); | ||
| 10754 | 10753 | ||
| 10755 | if (!(error_code & PFERR_PRESENT_MASK) || | 10754 | if (!(error_code & PFERR_PRESENT_MASK) || |
| 10756 | vcpu->arch.walk_mmu->gva_to_gpa(vcpu, gva, error_code, &fault) != UNMAPPED_GVA) { | 10755 | vcpu->arch.walk_mmu->gva_to_gpa(vcpu, gva, access, &fault) != UNMAPPED_GVA) { |
| 10757 | /* | 10756 | /* |
| 10758 | * If vcpu->arch.walk_mmu->gva_to_gpa succeeded, the page | 10757 | * If vcpu->arch.walk_mmu->gva_to_gpa succeeded, the page |
| 10759 | * tables probably do not match the TLB. Just proceed | 10758 | * tables probably do not match the TLB. Just proceed |
| @@ -58,7 +58,7 @@ __cmdline_find_option_bool(const char *cmdline, int max_cmdline_size, · 57 unmodified lines | |||
| 58 | state = st_wordcmp; | 58 | state = st_wordcmp; |
| 59 | opptr = option; | 59 | opptr = option; |
| 60 | wstart = pos; | 60 | wstart = pos; |
| 61 | /* fall through */ | 61 | fallthrough; |
| 62 | 62 | ||
| 63 | case st_wordcmp: | 63 | case st_wordcmp: |
| 64 | if (!*opptr) { | 64 | if (!*opptr) { |
| @@ -89,7 +89,7 @@ __cmdline_find_option_bool(const char *cmdline, int max_cmdline_size, · 24 unmodified lines | |||
| 89 | break; | 89 | break; |
| 90 | } | 90 | } |
| 91 | state = st_wordskip; | 91 | state = st_wordskip; |
| 92 | /* fall through */ | 92 | fallthrough; |
| 93 | 93 | ||
| 94 | case st_wordskip: | 94 | case st_wordskip: |
| 95 | if (!c) | 95 | if (!c) |
| @@ -151,7 +151,7 @@ __cmdline_find_option(const char *cmdline, int max_cmdline_size, · 55 unmodified lines | |||
| 151 | 151 | ||
| 152 | state = st_wordcmp; | 152 | state = st_wordcmp; |
| 153 | opptr = option; | 153 | opptr = option; |
| 154 | /* fall through */ | 154 | fallthrough; |
| 155 | 155 | ||
| 156 | case st_wordcmp: | 156 | case st_wordcmp: |
| 157 | if ((c == '=') && !*opptr) { | 157 | if ((c == '=') && !*opptr) { |
| @@ -172,7 +172,7 @@ __cmdline_find_option(const char *cmdline, int max_cmdline_size, · 14 unmodified lines | |||
| 172 | break; | 172 | break; |
| 173 | } | 173 | } |
| 174 | state = st_wordskip; | 174 | state = st_wordskip; |
| 175 | /* fall through */ | 175 | fallthrough; |
| 176 | 176 | ||
| 177 | case st_wordskip: | 177 | case st_wordskip: |
| 178 | if (myisspace(c)) | 178 | if (myisspace(c)) |
| @@ -179,7 +179,7 @@ static int resolve_default_seg(struct insn *insn, struct pt_regs *regs, int off) · 178 unmodified lines | |||
| 179 | if (insn->addr_bytes == 2) | 179 | if (insn->addr_bytes == 2) |
| 180 | return -EINVAL; | 180 | return -EINVAL; |
| 181 | 181 | ||
| 182 | /* fall through */ | 182 | fallthrough; |
| 183 | 183 | ||
| 184 | case -EDOM: | 184 | case -EDOM: |
| 185 | case offsetof(struct pt_regs, bx): | 185 | case offsetof(struct pt_regs, bx): |
| @@ -362,7 +362,6 @@ static short get_segment_selector(struct pt_regs *regs, int seg_reg_idx) · 176 unmodified lines | |||
| 362 | case INAT_SEG_REG_GS: | 362 | case INAT_SEG_REG_GS: |
| 363 | return vm86regs->gs; | 363 | return vm86regs->gs; |
| 364 | case INAT_SEG_REG_IGNORE: | 364 | case INAT_SEG_REG_IGNORE: |
| 365 | /* fall through */ | ||
| 366 | default: | 365 | default: |
| 367 | return -EINVAL; | 366 | return -EINVAL; |
| 368 | } | 367 | } |
| @@ -386,7 +385,6 @@ static short get_segment_selector(struct pt_regs *regs, int seg_reg_idx) · 17 unmodified lines | |||
| 386 | */ | 385 | */ |
| 387 | return get_user_gs(regs); | 386 | return get_user_gs(regs); |
| 388 | case INAT_SEG_REG_IGNORE: | 387 | case INAT_SEG_REG_IGNORE: |
| 389 | /* fall through */ | ||
| 390 | default: | 388 | default: |
| 391 | return -EINVAL; | 389 | return -EINVAL; |
| 392 | } | 390 | } |
| @@ -786,7 +784,7 @@ int insn_get_code_seg_params(struct pt_regs *regs) · 393 unmodified lines | |||
| 786 | */ | 784 | */ |
| 787 | return INSN_CODE_SEG_PARAMS(4, 8); | 785 | return INSN_CODE_SEG_PARAMS(4, 8); |
| 788 | case 3: /* Invalid setting. CS.L=1, CS.D=1 */ | 786 | case 3: /* Invalid setting. CS.L=1, CS.D=1 */ |
| 789 | /* fall through */ | 787 | fallthrough; |
| 790 | default: | 788 | default: |
| 791 | return -EINVAL; | 789 | return -EINVAL; |
| 792 | } | 790 | } |
| @@ -186,7 +186,7 @@ void FPU_printall(void) · 185 unmodified lines | |||
| 186 | case TAG_Special: | 186 | case TAG_Special: |
| 187 | /* Update tagi for the printk below */ | 187 | /* Update tagi for the printk below */ |
| 188 | tagi = FPU_Special(r); | 188 | tagi = FPU_Special(r); |
| 189 | /* fall through */ | 189 | fallthrough; |
| 190 | case TAG_Valid: | 190 | case TAG_Valid: |
| 191 | printk("st(%d) %c .%04lx %04lx %04lx %04lx e%+-6d ", i, | 191 | printk("st(%d) %c .%04lx %04lx %04lx %04lx e%+-6d ", i, |
| 192 | getsign(r) ? '-' : '+', | 192 | getsign(r) ? '-' : '+', |
| @@ -1352,7 +1352,7 @@ static void fyl2xp1(FPU_REG *st0_ptr, u_char st0_tag) · 1351 unmodified lines | |||
| 1352 | case TW_Denormal: | 1352 | case TW_Denormal: |
| 1353 | if (denormal_operand() < 0) | 1353 | if (denormal_operand() < 0) |
| 1354 | return; | 1354 | return; |
| 1355 | /* fall through */ | 1355 | fallthrough; |
| 1356 | case TAG_Zero: | 1356 | case TAG_Zero: |
| 1357 | case TAG_Valid: | 1357 | case TAG_Valid: |
| 1358 | setsign(st0_ptr, getsign(st0_ptr) ^ getsign(st1_ptr)); | 1358 | setsign(st0_ptr, getsign(st0_ptr) ^ getsign(st1_ptr)); |
| @@ -574,7 +574,7 @@ static bool memremap_should_map_decrypted(resource_size_t phys_addr, · 573 unmodified lines | |||
| 574 | /* For SEV, these areas are encrypted */ | 574 | /* For SEV, these areas are encrypted */ |
| 575 | if (sev_active()) | 575 | if (sev_active()) |
| 576 | break; | 576 | break; |
| 577 | /* Fallthrough */ | 577 | fallthrough; |
| 578 | 578 | ||
| 579 | case E820_TYPE_PRAM: | 579 | case E820_TYPE_PRAM: |
| 580 | return true; | 580 | return true; |
| @@ -555,21 +555,12 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, · 554 unmodified lines | |||
| 555 | this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen); | 555 | this_cpu_write(cpu_tlbstate.ctxs[new_asid].tlb_gen, next_tlb_gen); |
| 556 | load_new_mm_cr3(next->pgd, new_asid, true); | 556 | load_new_mm_cr3(next->pgd, new_asid, true); |
| 557 | 557 | ||
| 558 | /* | 558 | trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL); |
| 559 | * NB: This gets called via leave_mm() in the idle path | ||
| 560 | * where RCU functions differently. Tracing normally | ||
| 561 | * uses RCU, so we need to use the _rcuidle variant. | ||
| 562 | * | ||
| 563 | * (There is no good reason for this. The idle code should | ||
| 564 | * be rearranged to call this before rcu_idle_enter().) | ||
| 565 | */ | ||
| 566 | trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, TLB_FLUSH_ALL); | ||
| 567 | } else { | 559 | } else { |
| 568 | /* The new ASID is already up to date. */ | 560 | /* The new ASID is already up to date. */ |
| 569 | load_new_mm_cr3(next->pgd, new_asid, false); | 561 | load_new_mm_cr3(next->pgd, new_asid, false); |
| 570 | 562 | ||
| 571 | /* See above wrt _rcuidle. */ | 563 | trace_tlb_flush(TLB_FLUSH_ON_TASK_SWITCH, 0); |
| 572 | trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, 0); | ||
| 573 | } | 564 | } |
| 574 | 565 | ||
| 575 | /* Make sure we write CR3 before loaded_mm. */ | 566 | /* Make sure we write CR3 before loaded_mm. */ |
| @@ -26,6 +26,7 @@ · 25 unmodified lines | |||
| 26 | #include <asm/xen/pci.h> | 26 | #include <asm/xen/pci.h> |
| 27 | #include <asm/xen/cpuid.h> | 27 | #include <asm/xen/cpuid.h> |
| 28 | #include <asm/apic.h> | 28 | #include <asm/apic.h> |
| 29 | #include <asm/acpi.h> | ||
| 29 | #include <asm/i8259.h> | 30 | #include <asm/i8259.h> |
| 30 | 31 | ||
| 31 | static int xen_pcifront_enable_irq(struct pci_dev *dev) | 32 | static int xen_pcifront_enable_irq(struct pci_dev *dev) |
| @@ -49,7 +49,6 @@ · 48 unmodified lines | |||
| 49 | #include <asm/efi.h> | 49 | #include <asm/efi.h> |
| 50 | #include <asm/e820/api.h> | 50 | #include <asm/e820/api.h> |
| 51 | #include <asm/time.h> | 51 | #include <asm/time.h> |
| 52 | #include <asm/set_memory.h> | ||
| 53 | #include <asm/tlbflush.h> | 52 | #include <asm/tlbflush.h> |
| 54 | #include <asm/x86_init.h> | 53 | #include <asm/x86_init.h> |
| 55 | #include <asm/uv/uv.h> | 54 | #include <asm/uv/uv.h> |
| @@ -496,74 +495,6 @@ void __init efi_init(void) · 440 unmodified lines | |||
| 496 | efi_print_memmap(); | 495 | efi_print_memmap(); |
| 497 | } | 496 | } |
| 498 | 497 | ||
| 499 | #if defined(CONFIG_X86_32) | ||
| 500 | |||
| 501 | void __init efi_set_executable(efi_memory_desc_t *md, bool executable) | ||
| 502 | { | ||
| 503 | u64 addr, npages; | ||
| 504 | |||
| 505 | addr = md->virt_addr; | ||
| 506 | npages = md->num_pages; | ||
| 507 | |||
| 508 | memrange_efi_to_native(&addr, &npages); | ||
| 509 | |||
| 510 | if (executable) | ||
| 511 | set_memory_x(addr, npages); | ||
| 512 | else | ||
| 513 | set_memory_nx(addr, npages); | ||
| 514 | } | ||
| 515 | |||
| 516 | void __init runtime_code_page_mkexec(void) | ||
| 517 | { | ||
| 518 | efi_memory_desc_t *md; | ||
| 519 | |||
| 520 | /* Make EFI runtime service code area executable */ | ||
| 521 | for_each_efi_memory_desc(md) { | ||
| 522 | if (md->type != EFI_RUNTIME_SERVICES_CODE) | ||
| 523 | continue; | ||
| 524 | |||
| 525 | efi_set_executable(md, true); | ||
| 526 | } | ||
| 527 | } | ||
| 528 | |||
| 529 | void __init efi_memory_uc(u64 addr, unsigned long size) | ||
| 530 | { | ||
| 531 | unsigned long page_shift = 1UL << EFI_PAGE_SHIFT; | ||
| 532 | u64 npages; | ||
| 533 | |||
| 534 | npages = round_up(size, page_shift) / page_shift; | ||
| 535 | memrange_efi_to_native(&addr, &npages); | ||
| 536 | set_memory_uc(addr, npages); | ||
| 537 | } | ||
| 538 | |||
| 539 | void __init old_map_region(efi_memory_desc_t *md) | ||
| 540 | { | ||
| 541 | u64 start_pfn, end_pfn, end; | ||
| 542 | unsigned long size; | ||
| 543 | void *va; | ||
| 544 | |||
| 545 | start_pfn = PFN_DOWN(md->phys_addr); | ||
| 546 | size = md->num_pages << PAGE_SHIFT; | ||
| 547 | end = md->phys_addr + size; | ||
| 548 | end_pfn = PFN_UP(end); | ||
| 549 | |||
| 550 | if (pfn_range_is_mapped(start_pfn, end_pfn)) { | ||
| 551 | va = __va(md->phys_addr); | ||
| 552 | |||
| 553 | if (!(md->attribute & EFI_MEMORY_WB)) | ||
| 554 | efi_memory_uc((u64)(unsigned long)va, size); | ||
| 555 | } else | ||
| 556 | va = efi_ioremap(md->phys_addr, size, | ||
| 557 | md->type, md->attribute); | ||
| 558 | |||
| 559 | md->virt_addr = (u64) (unsigned long) va; | ||
| 560 | if (!va) | ||
| 561 | pr_err("ioremap of 0x%llX failed!\n", | ||
| 562 | (unsigned long long)md->phys_addr); | ||
| 563 | } | ||
| 564 | |||
| 565 | #endif | ||
| 566 | |||
| 567 | /* Merge contiguous regions of the same type and attribute */ | 498 | /* Merge contiguous regions of the same type and attribute */ |
| 568 | static void __init efi_merge_regions(void) | 499 | static void __init efi_merge_regions(void) |
| 569 | { | 500 | { |
| @@ -29,9 +29,35 @@ · 28 unmodified lines | |||
| 29 | #include <asm/io.h> | 29 | #include <asm/io.h> |
| 30 | #include <asm/desc.h> | 30 | #include <asm/desc.h> |
| 31 | #include <asm/page.h> | 31 | #include <asm/page.h> |
| 32 | #include <asm/set_memory.h> | ||
| 32 | #include <asm/tlbflush.h> | 33 | #include <asm/tlbflush.h> |
| 33 | #include <asm/efi.h> | 34 | #include <asm/efi.h> |
| 34 | 35 | ||
| 36 | void __init efi_map_region(efi_memory_desc_t *md) | ||
| 37 | { | ||
| 38 | u64 start_pfn, end_pfn, end; | ||
| 39 | unsigned long size; | ||
| 40 | void *va; | ||
| 41 | |||
| 42 | start_pfn = PFN_DOWN(md->phys_addr); | ||
| 43 | size = md->num_pages << PAGE_SHIFT; | ||
| 44 | end = md->phys_addr + size; | ||
| 45 | end_pfn = PFN_UP(end); | ||
| 46 | |||
| 47 | if (pfn_range_is_mapped(start_pfn, end_pfn)) { | ||
| 48 | va = __va(md->phys_addr); | ||
| 49 | |||
| 50 | if (!(md->attribute & EFI_MEMORY_WB)) | ||
| 51 | set_memory_uc((unsigned long)va, md->num_pages); | ||
| 52 | } else { | ||
| 53 | va = ioremap_cache(md->phys_addr, size); | ||
| 54 | } | ||
| 55 | |||
| 56 | md->virt_addr = (unsigned long)va; | ||
| 57 | if (!va) | ||
| 58 | pr_err("ioremap of 0x%llX failed!\n", md->phys_addr); | ||
| 59 | } | ||
| 60 | |||
| 35 | /* | 61 | /* |
| 36 | * To make EFI call EFI runtime service in physical addressing mode we need | 62 | * To make EFI call EFI runtime service in physical addressing mode we need |
| 37 | * prolog/epilog before/after the invocation to claim the EFI runtime service | 63 | * prolog/epilog before/after the invocation to claim the EFI runtime service |
| @@ -58,11 +84,6 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 20 unmodified lines | |||
| 58 | return 0; | 84 | return 0; |
| 59 | } | 85 | } |
| 60 | 86 | ||
| 61 | void __init efi_map_region(efi_memory_desc_t *md) | ||
| 62 | { | ||
| 63 | old_map_region(md); | ||
| 64 | } | ||
| 65 | |||
| 66 | void __init efi_map_region_fixed(efi_memory_desc_t *md) {} | 87 | void __init efi_map_region_fixed(efi_memory_desc_t *md) {} |
| 67 | void __init parse_efi_setup(u64 phys_addr, u32 data_len) {} | 88 | void __init parse_efi_setup(u64 phys_addr, u32 data_len) {} |
| 68 | 89 | ||
| @@ -107,6 +128,15 @@ efi_status_t __init efi_set_virtual_address_map(unsigned long memory_map_size, · 38 unmodified lines | |||
| 107 | 128 | ||
| 108 | void __init efi_runtime_update_mappings(void) | 129 | void __init efi_runtime_update_mappings(void) |
| 109 | { | 130 | { |
| 110 | if (__supported_pte_mask & _PAGE_NX) | 131 | if (__supported_pte_mask & _PAGE_NX) { |
| 111 | runtime_code_page_mkexec(); | 132 | efi_memory_desc_t *md; |
| 133 | |||
| 134 | /* Make EFI runtime service code area executable */ | ||
| 135 | for_each_efi_memory_desc(md) { | ||
| 136 | if (md->type != EFI_RUNTIME_SERVICES_CODE) | ||
| 137 | continue; | ||
| 138 | |||
| 139 | set_memory_x(md->virt_addr, md->num_pages); | ||
| 140 | } | ||
| 141 | } | ||
| 112 | } | 142 | } |
| @@ -259,6 +259,8 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages) · 258 unmodified lines | |||
| 259 | npages = (__end_rodata - __start_rodata) >> PAGE_SHIFT; | 259 | npages = (__end_rodata - __start_rodata) >> PAGE_SHIFT; |
| 260 | rodata = __pa(__start_rodata); | 260 | rodata = __pa(__start_rodata); |
| 261 | pfn = rodata >> PAGE_SHIFT; | 261 | pfn = rodata >> PAGE_SHIFT; |
| 262 | |||
| 263 | pf = _PAGE_NX | _PAGE_ENC; | ||
| 262 | if (kernel_map_pages_in_pgd(pgd, pfn, rodata, npages, pf)) { | 264 | if (kernel_map_pages_in_pgd(pgd, pfn, rodata, npages, pf)) { |
| 263 | pr_err("Failed to map kernel rodata 1:1\n"); | 265 | pr_err("Failed to map kernel rodata 1:1\n"); |
| 264 | return 1; | 266 | return 1; |
| @@ -448,7 +448,7 @@ static void do_signal(struct pt_regs *regs) · 447 unmodified lines | |||
| 448 | regs->areg[2] = -EINTR; | 448 | regs->areg[2] = -EINTR; |
| 449 | break; | 449 | break; |
| 450 | } | 450 | } |
| 451 | /* fallthrough */ | 451 | fallthrough; |
| 452 | case -ERESTARTNOINTR: | 452 | case -ERESTARTNOINTR: |
| 453 | regs->areg[2] = regs->syscall; | 453 | regs->areg[2] = regs->syscall; |
| 454 | regs->pc -= 3; | 454 | regs->pc -= 3; |
| @@ -525,7 +525,7 @@ ssize_t badblocks_store(struct badblocks *bb, const char *page, size_t len, · 524 unmodified lines | |||
| 525 | case 3: | 525 | case 3: |
| 526 | if (newline != '\n') | 526 | if (newline != '\n') |
| 527 | return -EINVAL; | 527 | return -EINVAL; |
| 528 | /* fall through */ | 528 | fallthrough; |
| 529 | case 2: | 529 | case 2: |
| 530 | if (length <= 0) | 530 | if (length <= 0) |
| 531 | return -EINVAL; | 531 | return -EINVAL; |
| @@ -332,7 +332,7 @@ static void bfqg_put(struct bfq_group *bfqg) · 331 unmodified lines | |||
| 332 | kfree(bfqg); | 332 | kfree(bfqg); |
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | void bfqg_and_blkg_get(struct bfq_group *bfqg) | 335 | static void bfqg_and_blkg_get(struct bfq_group *bfqg) |
| 336 | { | 336 | { |
| 337 | /* see comments in bfq_bic_update_cgroup for why refcounting bfqg */ | 337 | /* see comments in bfq_bic_update_cgroup for why refcounting bfqg */ |
| 338 | bfqg_get(bfqg); | 338 | bfqg_get(bfqg); |
| @@ -4980,7 +4980,7 @@ bfq_set_next_ioprio_data(struct bfq_queue *bfqq, struct bfq_io_cq *bic) · 4979 unmodified lines | |||
| 4980 | pr_err("bdi %s: bfq: bad prio class %d\n", | 4980 | pr_err("bdi %s: bfq: bad prio class %d\n", |
| 4981 | bdi_dev_name(bfqq->bfqd->queue->backing_dev_info), | 4981 | bdi_dev_name(bfqq->bfqd->queue->backing_dev_info), |
| 4982 | ioprio_class); | 4982 | ioprio_class); |
| 4983 | /* fall through */ | 4983 | fallthrough; |
| 4984 | case IOPRIO_CLASS_NONE: | 4984 | case IOPRIO_CLASS_NONE: |
| 4985 | /* | 4985 | /* |
| 4986 | * No prio set, inherit CPU scheduling settings. | 4986 | * No prio set, inherit CPU scheduling settings. |
| @@ -5112,7 +5112,7 @@ static struct bfq_queue **bfq_async_queue_prio(struct bfq_data *bfqd, · 125 unmodified lines | |||
| 5112 | return &bfqg->async_bfqq[0][ioprio]; | 5112 | return &bfqg->async_bfqq[0][ioprio]; |
| 5113 | case IOPRIO_CLASS_NONE: | 5113 | case IOPRIO_CLASS_NONE: |
| 5114 | ioprio = IOPRIO_NORM; | 5114 | ioprio = IOPRIO_NORM; |
| 5115 | /* fall through */ | 5115 | fallthrough; |
| 5116 | case IOPRIO_CLASS_BE: | 5116 | case IOPRIO_CLASS_BE: |
| 5117 | return &bfqg->async_bfqq[1][ioprio]; | 5117 | return &bfqg->async_bfqq[1][ioprio]; |
| 5118 | case IOPRIO_CLASS_IDLE: | 5118 | case IOPRIO_CLASS_IDLE: |
| @@ -986,7 +986,6 @@ struct bfq_group *bfq_find_set_group(struct bfq_data *bfqd, · 985 unmodified lines | |||
| 986 | struct blkcg_gq *bfqg_to_blkg(struct bfq_group *bfqg); | 986 | struct blkcg_gq *bfqg_to_blkg(struct bfq_group *bfqg); |
| 987 | struct bfq_group *bfqq_group(struct bfq_queue *bfqq); | 987 | struct bfq_group *bfqq_group(struct bfq_queue *bfqq); |
| 988 | struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node); | 988 | struct bfq_group *bfq_create_group_hierarchy(struct bfq_data *bfqd, int node); |
| 989 | void bfqg_and_blkg_get(struct bfq_group *bfqg); | ||
| 990 | void bfqg_and_blkg_put(struct bfq_group *bfqg); | 989 | void bfqg_and_blkg_put(struct bfq_group *bfqg); |
| 991 | 990 | ||
| 992 | #ifdef CONFIG_BFQ_GROUP_IOSCHED | 991 | #ifdef CONFIG_BFQ_GROUP_IOSCHED |
| @@ -533,9 +533,7 @@ static void bfq_get_entity(struct bfq_entity *entity) · 532 unmodified lines | |||
| 533 | bfqq->ref++; | 533 | bfqq->ref++; |
| 534 | bfq_log_bfqq(bfqq->bfqd, bfqq, "get_entity: %p %d", | 534 | bfq_log_bfqq(bfqq->bfqd, bfqq, "get_entity: %p %d", |
| 535 | bfqq, bfqq->ref); | 535 | bfqq, bfqq->ref); |
| 536 | } else | 536 | } |
| 537 | bfqg_and_blkg_get(container_of(entity, struct bfq_group, | ||
| 538 | entity)); | ||
| 539 | } | 537 | } |
| 540 | 538 | ||
| 541 | /** | 539 | /** |
| @@ -649,14 +647,8 @@ static void bfq_forget_entity(struct bfq_service_tree *st, · 107 unmodified lines | |||
| 649 | 647 | ||
| 650 | entity->on_st_or_in_serv = false; | 648 | entity->on_st_or_in_serv = false; |
| 651 | st->wsum -= entity->weight; | 649 | st->wsum -= entity->weight; |
| 652 | if (is_in_service) | 650 | if (bfqq && !is_in_service) |
| 653 | return; | ||
| 654 | |||
| 655 | if (bfqq) | ||
| 656 | bfq_put_queue(bfqq); | 651 | bfq_put_queue(bfqq); |
| 657 | else | ||
| 658 | bfqg_and_blkg_put(container_of(entity, struct bfq_group, | ||
| 659 | entity)); | ||
| 660 | } | 652 | } |
| 661 | 653 | ||
| 662 | /** | 654 | /** |
| @@ -740,8 +740,8 @@ static inline bool page_is_mergeable(const struct bio_vec *bv, · 739 unmodified lines | |||
| 740 | struct page *page, unsigned int len, unsigned int off, | 740 | struct page *page, unsigned int len, unsigned int off, |
| 741 | bool *same_page) | 741 | bool *same_page) |
| 742 | { | 742 | { |
| 743 | phys_addr_t vec_end_addr = page_to_phys(bv->bv_page) + | 743 | size_t bv_end = bv->bv_offset + bv->bv_len; |
| 744 | bv->bv_offset + bv->bv_len - 1; | 744 | phys_addr_t vec_end_addr = page_to_phys(bv->bv_page) + bv_end - 1; |
| 745 | phys_addr_t page_addr = page_to_phys(page); | 745 | phys_addr_t page_addr = page_to_phys(page); |
| 746 | 746 | ||
| 747 | if (vec_end_addr + 1 != page_addr + off) | 747 | if (vec_end_addr + 1 != page_addr + off) |
| @@ -750,9 +750,9 @@ static inline bool page_is_mergeable(const struct bio_vec *bv, · 2 unmodified lines | |||
| 750 | return false; | 750 | return false; |
| 751 | 751 | ||
| 752 | *same_page = ((vec_end_addr & PAGE_MASK) == page_addr); | 752 | *same_page = ((vec_end_addr & PAGE_MASK) == page_addr); |
| 753 | if (!*same_page && pfn_to_page(PFN_DOWN(vec_end_addr)) + 1 != page) | 753 | if (*same_page) |
| 754 | return false; | 754 | return true; |
| 755 | return true; | 755 | return (bv->bv_page + bv_end / PAGE_SIZE) == (page + off / PAGE_SIZE); |
| 756 | } | 756 | } |
| 757 | 757 | ||
| 758 | /* | 758 | /* |
| @@ -1152,13 +1152,15 @@ int blkcg_init_queue(struct request_queue *q) · 1151 unmodified lines | |||
| 1152 | if (preloaded) | 1152 | if (preloaded) |
| 1153 | radix_tree_preload_end(); | 1153 | radix_tree_preload_end(); |
| 1154 | 1154 | ||
| 1155 | ret = blk_iolatency_init(q); | 1155 | ret = blk_throtl_init(q); |
| 1156 | if (ret) | 1156 | if (ret) |
| 1157 | goto err_destroy_all; | 1157 | goto err_destroy_all; |
| 1158 | 1158 | ||
| 1159 | ret = blk_throtl_init(q); | 1159 | ret = blk_iolatency_init(q); |
| 1160 | if (ret) | 1160 | if (ret) { |
| 1161 | blk_throtl_exit(q); | ||
| 1161 | goto err_destroy_all; | 1162 | goto err_destroy_all; |
| 1163 | } | ||
| 1162 | return 0; | 1164 | return 0; |
| 1163 | 1165 | ||
| 1164 | err_destroy_all: | 1166 | err_destroy_all: |
| @@ -154,7 +154,7 @@ static inline unsigned get_max_io_size(struct request_queue *q, · 153 unmodified lines | |||
| 154 | if (max_sectors > start_offset) | 154 | if (max_sectors > start_offset) |
| 155 | return max_sectors - start_offset; | 155 | return max_sectors - start_offset; |
| 156 | 156 | ||
| 157 | return sectors & (lbs - 1); | 157 | return sectors & ~(lbs - 1); |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | static inline unsigned get_max_segment_size(const struct request_queue *q, | 160 | static inline unsigned get_max_segment_size(const struct request_queue *q, |
| @@ -533,10 +533,17 @@ int __blk_rq_map_sg(struct request_queue *q, struct request *rq, · 372 unmodified lines | |||
| 533 | } | 533 | } |
| 534 | EXPORT_SYMBOL(__blk_rq_map_sg); | 534 | EXPORT_SYMBOL(__blk_rq_map_sg); |
| 535 | 535 | ||
| 536 | static inline unsigned int blk_rq_get_max_segments(struct request *rq) | ||
| 537 | { | ||
| 538 | if (req_op(rq) == REQ_OP_DISCARD) | ||
| 539 | return queue_max_discard_segments(rq->q); | ||
| 540 | return queue_max_segments(rq->q); | ||
| 541 | } | ||
| 542 | |||
| 536 | static inline int ll_new_hw_segment(struct request *req, struct bio *bio, | 543 | static inline int ll_new_hw_segment(struct request *req, struct bio *bio, |
| 537 | unsigned int nr_phys_segs) | 544 | unsigned int nr_phys_segs) |
| 538 | { | 545 | { |
| 539 | if (req->nr_phys_segments + nr_phys_segs > queue_max_segments(req->q)) | 546 | if (req->nr_phys_segments + nr_phys_segs > blk_rq_get_max_segments(req)) |
| 540 | goto no_merge; | 547 | goto no_merge; |
| 541 | 548 | ||
| 542 | if (blk_integrity_merge_bio(req->q, req, bio) == false) | 549 | if (blk_integrity_merge_bio(req->q, req, bio) == false) |
| @@ -624,7 +631,7 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req, · 81 unmodified lines | |||
| 624 | return 0; | 631 | return 0; |
| 625 | 632 | ||
| 626 | total_phys_segments = req->nr_phys_segments + next->nr_phys_segments; | 633 | total_phys_segments = req->nr_phys_segments + next->nr_phys_segments; |
| 627 | if (total_phys_segments > queue_max_segments(q)) | 634 | if (total_phys_segments > blk_rq_get_max_segments(req)) |
| 628 | return 0; | 635 | return 0; |
| 629 | 636 | ||
| 630 | if (blk_integrity_merge_rq(q, req, next) == false) | 637 | if (blk_integrity_merge_rq(q, req, next) == false) |
| @@ -78,6 +78,15 @@ void blk_mq_sched_restart(struct blk_mq_hw_ctx *hctx) · 77 unmodified lines | |||
| 78 | return; | 78 | return; |
| 79 | clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state); | 79 | clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state); |
| 80 | 80 | ||
| 81 | /* | ||
| 82 | * Order clearing SCHED_RESTART and list_empty_careful(&hctx->dispatch) | ||
| 83 | * in blk_mq_run_hw_queue(). Its pair is the barrier in | ||
| 84 | * blk_mq_dispatch_rq_list(). So dispatch code won't see SCHED_RESTART, | ||
| 85 | * meantime new request added to hctx->dispatch is missed to check in | ||
| 86 | * blk_mq_run_hw_queue(). | ||
| 87 | */ | ||
| 88 | smp_mb(); | ||
| 89 | |||
| 81 | blk_mq_run_hw_queue(hctx, true); | 90 | blk_mq_run_hw_queue(hctx, true); |
| 82 | } | 91 | } |
| 83 | 92 | ||
| @@ -1437,6 +1437,15 @@ out: · 1436 unmodified lines | |||
| 1437 | list_splice_tail_init(list, &hctx->dispatch); | 1437 | list_splice_tail_init(list, &hctx->dispatch); |
| 1438 | spin_unlock(&hctx->lock); | 1438 | spin_unlock(&hctx->lock); |
| 1439 | 1439 | ||
| 1440 | /* | ||
| 1441 | * Order adding requests to hctx->dispatch and checking | ||
| 1442 | * SCHED_RESTART flag. The pair of this smp_mb() is the one | ||
| 1443 | * in blk_mq_sched_restart(). Avoid restart code path to | ||
| 1444 | * miss the new added requests to hctx->dispatch, meantime | ||
| 1445 | * SCHED_RESTART is observed here. | ||
| 1446 | */ | ||
| 1447 | smp_mb(); | ||
| 1448 | |||
| 1440 | /* | 1449 | /* |
| 1441 | * If SCHED_RESTART was set by the caller of this function and | 1450 | * If SCHED_RESTART was set by the caller of this function and |
| 1442 | * it is no longer set that means that it was cleared by another | 1451 | * it is no longer set that means that it was cleared by another |
| @@ -1834,6 +1843,7 @@ void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq, · 391 unmodified lines | |||
| 1834 | /** | 1843 | /** |
| 1835 | * blk_mq_request_bypass_insert - Insert a request at dispatch list. | 1844 | * blk_mq_request_bypass_insert - Insert a request at dispatch list. |
| 1836 | * @rq: Pointer to request to be inserted. | 1845 | * @rq: Pointer to request to be inserted. |
| 1846 | * @at_head: true if the request should be inserted at the head of the list. | ||
| 1837 | * @run_queue: If we should run the hardware queue after inserting the request. | 1847 | * @run_queue: If we should run the hardware queue after inserting the request. |
| 1838 | * | 1848 | * |
| 1839 | * Should only be used carefully, when the caller knows we want to | 1849 | * Should only be used carefully, when the caller knows we want to |
| @@ -2016,7 +2026,8 @@ insert: · 176 unmodified lines | |||
| 2016 | if (bypass_insert) | 2026 | if (bypass_insert) |
| 2017 | return BLK_STS_RESOURCE; | 2027 | return BLK_STS_RESOURCE; |
| 2018 | 2028 | ||
| 2019 | blk_mq_request_bypass_insert(rq, false, run_queue); | 2029 | blk_mq_sched_insert_request(rq, false, run_queue, false); |
| 2030 | |||
| 2020 | return BLK_STS_OK; | 2031 | return BLK_STS_OK; |
| 2021 | } | 2032 | } |
| 2022 | 2033 | ||
| @@ -528,7 +528,7 @@ static inline bool wbt_should_throttle(struct rq_wb *rwb, struct bio *bio) · 527 unmodified lines | |||
| 528 | if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) == | 528 | if ((bio->bi_opf & (REQ_SYNC | REQ_IDLE)) == |
| 529 | (REQ_SYNC | REQ_IDLE)) | 529 | (REQ_SYNC | REQ_IDLE)) |
| 530 | return false; | 530 | return false; |
| 531 | /* fallthrough */ | 531 | fallthrough; |
| 532 | case REQ_OP_DISCARD: | 532 | case REQ_OP_DISCARD: |
| 533 | return true; | 533 | return true; |
| 534 | default: | 534 | default: |
| @@ -378,7 +378,7 @@ struct request_queue *bsg_setup_queue(struct device *dev, const char *name, · 377 unmodified lines | |||
| 378 | bset->timeout_fn = timeout; | 378 | bset->timeout_fn = timeout; |
| 379 | 379 | ||
| 380 | set = &bset->tag_set; | 380 | set = &bset->tag_set; |
| 381 | set->ops = &bsg_mq_ops, | 381 | set->ops = &bsg_mq_ops; |
| 382 | set->nr_hw_queues = 1; | 382 | set->nr_hw_queues = 1; |
| 383 | set->queue_depth = 128; | 383 | set->queue_depth = 128; |
| 384 | set->numa_node = NUMA_NO_NODE; | 384 | set->numa_node = NUMA_NO_NODE; |
| @@ -71,7 +71,7 @@ int ioprio_check_cap(int ioprio) · 70 unmodified lines | |||
| 71 | case IOPRIO_CLASS_RT: | 71 | case IOPRIO_CLASS_RT: |
| 72 | if (!capable(CAP_SYS_ADMIN)) | 72 | if (!capable(CAP_SYS_ADMIN)) |
| 73 | return -EPERM; | 73 | return -EPERM; |
| 74 | /* fall through */ | 74 | fallthrough; |
| 75 | /* rt has prio field too */ | 75 | /* rt has prio field too */ |
| 76 | case IOPRIO_CLASS_BE: | 76 | case IOPRIO_CLASS_BE: |
| 77 | if (data >= IOPRIO_BE_NR || data < 0) | 77 | if (data >= IOPRIO_BE_NR || data < 0) |
| @@ -16,6 +16,7 @@ · 15 unmodified lines | |||
| 16 | #include <linux/module.h> | 16 | #include <linux/module.h> |
| 17 | #include <linux/net.h> | 17 | #include <linux/net.h> |
| 18 | #include <linux/rwsem.h> | 18 | #include <linux/rwsem.h> |
| 19 | #include <linux/sched.h> | ||
| 19 | #include <linux/sched/signal.h> | 20 | #include <linux/sched/signal.h> |
| 20 | #include <linux/security.h> | 21 | #include <linux/security.h> |
| 21 | 22 | ||
| @@ -845,9 +846,15 @@ int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, · 823 unmodified lines | |||
| 845 | } | 846 | } |
| 846 | 847 | ||
| 847 | lock_sock(sk); | 848 | lock_sock(sk); |
| 848 | if (ctx->init && (init || !ctx->more)) { | 849 | if (ctx->init && !ctx->more) { |
| 849 | err = -EINVAL; | 850 | if (ctx->used) { |
| 850 | goto unlock; | 851 | err = -EINVAL; |
| 852 | goto unlock; | ||
| 853 | } | ||
| 854 | |||
| 855 | pr_info_once( | ||
| 856 | "%s sent an empty control message without MSG_MORE.\n", | ||
| 857 | current->comm); | ||
| 851 | } | 858 | } |
| 852 | ctx->init = true; | 859 | ctx->init = true; |
| 853 | 860 | ||
| @@ -1521,7 +1521,7 @@ static int drbg_prepare_hrng(struct drbg_state *drbg) · 1520 unmodified lines | |||
| 1521 | 1521 | ||
| 1522 | case -EALREADY: | 1522 | case -EALREADY: |
| 1523 | err = 0; | 1523 | err = 0; |
| 1524 | /* fall through */ | 1524 | fallthrough; |
| 1525 | 1525 | ||
| 1526 | default: | 1526 | default: |
| 1527 | drbg->random_ready.func = NULL; | 1527 | drbg->random_ready.func = NULL; |
| @@ -2348,121 +2348,121 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) · 2347 unmodified lines | |||
| 2348 | test_hash_speed(alg, sec, generic_hash_speed_template); | 2348 | test_hash_speed(alg, sec, generic_hash_speed_template); |
| 2349 | break; | 2349 | break; |
| 2350 | } | 2350 | } |
| 2351 | /* fall through */ | 2351 | fallthrough; |
| 2352 | case 301: | 2352 | case 301: |
| 2353 | test_hash_speed("md4", sec, generic_hash_speed_template); | 2353 | test_hash_speed("md4", sec, generic_hash_speed_template); |
| 2354 | if (mode > 300 && mode < 400) break; | 2354 | if (mode > 300 && mode < 400) break; |
| 2355 | /* fall through */ | 2355 | fallthrough; |
| 2356 | case 302: | 2356 | case 302: |
| 2357 | test_hash_speed("md5", sec, generic_hash_speed_template); | 2357 | test_hash_speed("md5", sec, generic_hash_speed_template); |
| 2358 | if (mode > 300 && mode < 400) break; | 2358 | if (mode > 300 && mode < 400) break; |
| 2359 | /* fall through */ | 2359 | fallthrough; |
| 2360 | case 303: | 2360 | case 303: |
| 2361 | test_hash_speed("sha1", sec, generic_hash_speed_template); | 2361 | test_hash_speed("sha1", sec, generic_hash_speed_template); |
| 2362 | if (mode > 300 && mode < 400) break; | 2362 | if (mode > 300 && mode < 400) break; |
| 2363 | /* fall through */ | 2363 | fallthrough; |
| 2364 | case 304: | 2364 | case 304: |
| 2365 | test_hash_speed("sha256", sec, generic_hash_speed_template); | 2365 | test_hash_speed("sha256", sec, generic_hash_speed_template); |
| 2366 | if (mode > 300 && mode < 400) break; | 2366 | if (mode > 300 && mode < 400) break; |
| 2367 | /* fall through */ | 2367 | fallthrough; |
| 2368 | case 305: | 2368 | case 305: |
| 2369 | test_hash_speed("sha384", sec, generic_hash_speed_template); | 2369 | test_hash_speed("sha384", sec, generic_hash_speed_template); |
| 2370 | if (mode > 300 && mode < 400) break; | 2370 | if (mode > 300 && mode < 400) break; |
| 2371 | /* fall through */ | 2371 | fallthrough; |
| 2372 | case 306: | 2372 | case 306: |
| 2373 | test_hash_speed("sha512", sec, generic_hash_speed_template); | 2373 | test_hash_speed("sha512", sec, generic_hash_speed_template); |
| 2374 | if (mode > 300 && mode < 400) break; | 2374 | if (mode > 300 && mode < 400) break; |
| 2375 | /* fall through */ | 2375 | fallthrough; |
| 2376 | case 307: | 2376 | case 307: |
| 2377 | test_hash_speed("wp256", sec, generic_hash_speed_template); | 2377 | test_hash_speed("wp256", sec, generic_hash_speed_template); |
| 2378 | if (mode > 300 && mode < 400) break; | 2378 | if (mode > 300 && mode < 400) break; |
| 2379 | /* fall through */ | 2379 | fallthrough; |
| 2380 | case 308: | 2380 | case 308: |
| 2381 | test_hash_speed("wp384", sec, generic_hash_speed_template); | 2381 | test_hash_speed("wp384", sec, generic_hash_speed_template); |
| 2382 | if (mode > 300 && mode < 400) break; | 2382 | if (mode > 300 && mode < 400) break; |
| 2383 | /* fall through */ | 2383 | fallthrough; |
| 2384 | case 309: | 2384 | case 309: |
| 2385 | test_hash_speed("wp512", sec, generic_hash_speed_template); | 2385 | test_hash_speed("wp512", sec, generic_hash_speed_template); |
| 2386 | if (mode > 300 && mode < 400) break; | 2386 | if (mode > 300 && mode < 400) break; |
| 2387 | /* fall through */ | 2387 | fallthrough; |
| 2388 | case 310: | 2388 | case 310: |
| 2389 | test_hash_speed("tgr128", sec, generic_hash_speed_template); | 2389 | test_hash_speed("tgr128", sec, generic_hash_speed_template); |
| 2390 | if (mode > 300 && mode < 400) break; | 2390 | if (mode > 300 && mode < 400) break; |
| 2391 | /* fall through */ | 2391 | fallthrough; |
| 2392 | case 311: | 2392 | case 311: |
| 2393 | test_hash_speed("tgr160", sec, generic_hash_speed_template); | 2393 | test_hash_speed("tgr160", sec, generic_hash_speed_template); |
| 2394 | if (mode > 300 && mode < 400) break; | 2394 | if (mode > 300 && mode < 400) break; |
| 2395 | /* fall through */ | 2395 | fallthrough; |
| 2396 | case 312: | 2396 | case 312: |
| 2397 | test_hash_speed("tgr192", sec, generic_hash_speed_template); | 2397 | test_hash_speed("tgr192", sec, generic_hash_speed_template); |
| 2398 | if (mode > 300 && mode < 400) break; | 2398 | if (mode > 300 && mode < 400) break; |
| 2399 | /* fall through */ | 2399 | fallthrough; |
| 2400 | case 313: | 2400 | case 313: |
| 2401 | test_hash_speed("sha224", sec, generic_hash_speed_template); | 2401 | test_hash_speed("sha224", sec, generic_hash_speed_template); |
| 2402 | if (mode > 300 && mode < 400) break; | 2402 | if (mode > 300 && mode < 400) break; |
| 2403 | /* fall through */ | 2403 | fallthrough; |
| 2404 | case 314: | 2404 | case 314: |
| 2405 | test_hash_speed("rmd128", sec, generic_hash_speed_template); | 2405 | test_hash_speed("rmd128", sec, generic_hash_speed_template); |
| 2406 | if (mode > 300 && mode < 400) break; | 2406 | if (mode > 300 && mode < 400) break; |
| 2407 | /* fall through */ | 2407 | fallthrough; |
| 2408 | case 315: | 2408 | case 315: |
| 2409 | test_hash_speed("rmd160", sec, generic_hash_speed_template); | 2409 | test_hash_speed("rmd160", sec, generic_hash_speed_template); |
| 2410 | if (mode > 300 && mode < 400) break; | 2410 | if (mode > 300 && mode < 400) break; |
| 2411 | /* fall through */ | 2411 | fallthrough; |
| 2412 | case 316: | 2412 | case 316: |
| 2413 | test_hash_speed("rmd256", sec, generic_hash_speed_template); | 2413 | test_hash_speed("rmd256", sec, generic_hash_speed_template); |
| 2414 | if (mode > 300 && mode < 400) break; | 2414 | if (mode > 300 && mode < 400) break; |
| 2415 | /* fall through */ | 2415 | fallthrough; |
| 2416 | case 317: | 2416 | case 317: |
| 2417 | test_hash_speed("rmd320", sec, generic_hash_speed_template); | 2417 | test_hash_speed("rmd320", sec, generic_hash_speed_template); |
| 2418 | if (mode > 300 && mode < 400) break; | 2418 | if (mode > 300 && mode < 400) break; |
| 2419 | /* fall through */ | 2419 | fallthrough; |
| 2420 | case 318: | 2420 | case 318: |
| 2421 | test_hash_speed("ghash-generic", sec, hash_speed_template_16); | 2421 | test_hash_speed("ghash-generic", sec, hash_speed_template_16); |
| 2422 | if (mode > 300 && mode < 400) break; | 2422 | if (mode > 300 && mode < 400) break; |
| 2423 | /* fall through */ | 2423 | fallthrough; |
| 2424 | case 319: | 2424 | case 319: |
| 2425 | test_hash_speed("crc32c", sec, generic_hash_speed_template); | 2425 | test_hash_speed("crc32c", sec, generic_hash_speed_template); |
| 2426 | if (mode > 300 && mode < 400) break; | 2426 | if (mode > 300 && mode < 400) break; |
| 2427 | /* fall through */ | 2427 | fallthrough; |
| 2428 | case 320: | 2428 | case 320: |
| 2429 | test_hash_speed("crct10dif", sec, generic_hash_speed_template); | 2429 | test_hash_speed("crct10dif", sec, generic_hash_speed_template); |
| 2430 | if (mode > 300 && mode < 400) break; | 2430 | if (mode > 300 && mode < 400) break; |
| 2431 | /* fall through */ | 2431 | fallthrough; |
| 2432 | case 321: | 2432 | case 321: |
| 2433 | test_hash_speed("poly1305", sec, poly1305_speed_template); | 2433 | test_hash_speed("poly1305", sec, poly1305_speed_template); |
| 2434 | if (mode > 300 && mode < 400) break; | 2434 | if (mode > 300 && mode < 400) break; |
| 2435 | /* fall through */ | 2435 | fallthrough; |
| 2436 | case 322: | 2436 | case 322: |
| 2437 | test_hash_speed("sha3-224", sec, generic_hash_speed_template); | 2437 | test_hash_speed("sha3-224", sec, generic_hash_speed_template); |
| 2438 | if (mode > 300 && mode < 400) break; | 2438 | if (mode > 300 && mode < 400) break; |
| 2439 | /* fall through */ | 2439 | fallthrough; |
| 2440 | case 323: | 2440 | case 323: |
| 2441 | test_hash_speed("sha3-256", sec, generic_hash_speed_template); | 2441 | test_hash_speed("sha3-256", sec, generic_hash_speed_template); |
| 2442 | if (mode > 300 && mode < 400) break; | 2442 | if (mode > 300 && mode < 400) break; |
| 2443 | /* fall through */ | 2443 | fallthrough; |
| 2444 | case 324: | 2444 | case 324: |
| 2445 | test_hash_speed("sha3-384", sec, generic_hash_speed_template); | 2445 | test_hash_speed("sha3-384", sec, generic_hash_speed_template); |
| 2446 | if (mode > 300 && mode < 400) break; | 2446 | if (mode > 300 && mode < 400) break; |
| 2447 | /* fall through */ | 2447 | fallthrough; |
| 2448 | case 325: | 2448 | case 325: |
| 2449 | test_hash_speed("sha3-512", sec, generic_hash_speed_template); | 2449 | test_hash_speed("sha3-512", sec, generic_hash_speed_template); |
| 2450 | if (mode > 300 && mode < 400) break; | 2450 | if (mode > 300 && mode < 400) break; |
| 2451 | /* fall through */ | 2451 | fallthrough; |
| 2452 | case 326: | 2452 | case 326: |
| 2453 | test_hash_speed("sm3", sec, generic_hash_speed_template); | 2453 | test_hash_speed("sm3", sec, generic_hash_speed_template); |
| 2454 | if (mode > 300 && mode < 400) break; | 2454 | if (mode > 300 && mode < 400) break; |
| 2455 | /* fall through */ | 2455 | fallthrough; |
| 2456 | case 327: | 2456 | case 327: |
| 2457 | test_hash_speed("streebog256", sec, | 2457 | test_hash_speed("streebog256", sec, |
| 2458 | generic_hash_speed_template); | 2458 | generic_hash_speed_template); |
| 2459 | if (mode > 300 && mode < 400) break; | 2459 | if (mode > 300 && mode < 400) break; |
| 2460 | /* fall through */ | 2460 | fallthrough; |
| 2461 | case 328: | 2461 | case 328: |
| 2462 | test_hash_speed("streebog512", sec, | 2462 | test_hash_speed("streebog512", sec, |
| 2463 | generic_hash_speed_template); | 2463 | generic_hash_speed_template); |
| 2464 | if (mode > 300 && mode < 400) break; | 2464 | if (mode > 300 && mode < 400) break; |
| 2465 | /* fall through */ | 2465 | fallthrough; |
| 2466 | case 399: | 2466 | case 399: |
| 2467 | break; | 2467 | break; |
| 2468 | 2468 | ||
| @@ -2471,121 +2471,121 @@ static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb) · 2 unmodified lines | |||
| 2471 | test_ahash_speed(alg, sec, generic_hash_speed_template); | 2471 | test_ahash_speed(alg, sec, generic_hash_speed_template); |
| 2472 | break; | 2472 | break; |
| 2473 | } | 2473 | } |
| 2474 | /* fall through */ | 2474 | fallthrough; |
| 2475 | case 401: | 2475 | case 401: |
| 2476 | test_ahash_speed("md4", sec, generic_hash_speed_template); | 2476 | test_ahash_speed("md4", sec, generic_hash_speed_template); |
| 2477 | if (mode > 400 && mode < 500) break; | 2477 | if (mode > 400 && mode < 500) break; |
| 2478 | /* fall through */ | 2478 | fallthrough; |
| 2479 | case 402: | 2479 | case 402: |
| 2480 | test_ahash_speed("md5", sec, generic_hash_speed_template); | 2480 | test_ahash_speed("md5", sec, generic_hash_speed_template); |
| 2481 | if (mode > 400 && mode < 500) break; | 2481 | if (mode > 400 && mode < 500) break; |
| 2482 | /* fall through */ | 2482 | fallthrough; |
| 2483 | case 403: | 2483 | case 403: |
| 2484 | test_ahash_speed("sha1", sec, generic_hash_speed_template); | 2484 | test_ahash_speed("sha1", sec, generic_hash_speed_template); |
| 2485 | if (mode > 400 && mode < 500) break; | 2485 | if (mode > 400 && mode < 500) break; |
| 2486 | /* fall through */ | 2486 | fallthrough; |
| 2487 | case 404: | 2487 | case 404: |
| 2488 | test_ahash_speed("sha256", sec, generic_hash_speed_template); | 2488 | test_ahash_speed("sha256", sec, generic_hash_speed_template); |
| 2489 | if (mode > 400 && mode < 500) break; | 2489 | if (mode > 400 && mode < 500) break; |
| 2490 | /* fall through */ | 2490 | fallthrough; |
| 2491 | case 405: | 2491 | case 405: |
| 2492 | test_ahash_speed("sha384", sec, generic_hash_speed_template); | 2492 | test_ahash_speed("sha384", sec, generic_hash_speed_template); |
| 2493 | if (mode > 400 && mode < 500) break; | 2493 | if (mode > 400 && mode < 500) break; |
| 2494 | /* fall through */ | 2494 | fallthrough; |
| 2495 | case 406: | 2495 | case 406: |
| 2496 | test_ahash_speed("sha512", sec, generic_hash_speed_template); | 2496 | test_ahash_speed("sha512", sec, generic_hash_speed_template); |
| 2497 | if (mode > 400 && mode < 500) break; | 2497 | if (mode > 400 && mode < 500) break; |
| 2498 | /* fall through */ | 2498 | fallthrough; |
| 2499 | case 407: | 2499 | case 407: |
| 2500 | test_ahash_speed("wp256", sec, generic_hash_speed_template); | 2500 | test_ahash_speed("wp256", sec, generic_hash_speed_template); |
| 2501 | if (mode > 400 && mode < 500) break; | 2501 | if (mode > 400 && mode < 500) break; |
| 2502 | /* fall through */ | 2502 | fallthrough; |
| 2503 | case 408: | 2503 | case 408: |
| 2504 | test_ahash_speed("wp384", sec, generic_hash_speed_template); | 2504 | test_ahash_speed("wp384", sec, generic_hash_speed_template); |
| 2505 | if (mode > 400 && mode < 500) break; | 2505 | if (mode > 400 && mode < 500) break; |
| 2506 | /* fall through */ | 2506 | fallthrough; |
| 2507 | case 409: | 2507 | case 409: |
| 2508 | test_ahash_speed("wp512", sec, generic_hash_speed_template); | 2508 | test_ahash_speed("wp512", sec, generic_hash_speed_template); |
| 2509 | if (mode > 400 && mode < 500) break; | 2509 | if (mode > 400 && mode < 500) break; |
| 2510 | /* fall through */ | 2510 | fallthrough; |
| 2511 | case 410: | 2511 | case 410: |
| 2512 | test_ahash_speed("tgr128", sec, generic_hash_speed_template); | 2512 | test_ahash_speed("tgr128", sec, generic_hash_speed_template); |
| 2513 | if (mode > 400 && mode < 500) break; | 2513 | if (mode > 400 && mode < 500) break; |
| 2514 | /* fall through */ | 2514 | fallthrough; |
| 2515 | case 411: | 2515 | case 411: |
| 2516 | test_ahash_speed("tgr160", sec, generic_hash_speed_template); | 2516 | test_ahash_speed("tgr160", sec, generic_hash_speed_template); |
| 2517 | if (mode > 400 && mode < 500) break; | 2517 | if (mode > 400 && mode < 500) break; |
| 2518 | /* fall through */ | 2518 | fallthrough; |
| 2519 | case 412: | 2519 | case 412: |
| 2520 | test_ahash_speed("tgr192", sec, generic_hash_speed_template); | 2520 | test_ahash_speed("tgr192", sec, generic_hash_speed_template); |
| 2521 | if (mode > 400 && mode < 500) break; | 2521 | if (mode > 400 && mode < 500) break; |
| 2522 | /* fall through */ | 2522 | fallthrough; |
| 2523 | case 413: | 2523 | case 413: |
| 2524 | test_ahash_speed("sha224", sec, generic_hash_speed_template); | 2524 | test_ahash_speed("sha224", sec, generic_hash_speed_template); |
| 2525 | if (mode > 400 && mode < 500) break; | 2525 | if (mode > 400 && mode < 500) break; |
| 2526 | /* fall through */ | 2526 | fallthrough; |
| 2527 | case 414: | 2527 | case 414: |
| 2528 | test_ahash_speed("rmd128", sec, generic_hash_speed_template); | 2528 | test_ahash_speed("rmd128", sec, generic_hash_speed_template); |
| 2529 | if (mode > 400 && mode < 500) break; | 2529 | if (mode > 400 && mode < 500) break; |
| 2530 | /* fall through */ | 2530 | fallthrough; |
| 2531 | case 415: | 2531 | case 415: |
| 2532 | test_ahash_speed("rmd160", sec, generic_hash_speed_template); | 2532 | test_ahash_speed("rmd160", sec, generic_hash_speed_template); |
| 2533 | if (mode > 400 && mode < 500) break; | 2533 | if (mode > 400 && mode < 500) break; |
| 2534 | /* fall through */ | 2534 | fallthrough; |
| 2535 | case 416: | 2535 | case 416: |
| 2536 | test_ahash_speed("rmd256", sec, generic_hash_speed_template); | 2536 | test_ahash_speed("rmd256", sec, generic_hash_speed_template); |
| 2537 | if (mode > 400 && mode < 500) break; | 2537 | if (mode > 400 && mode < 500) break; |
| 2538 | /* fall through */ | 2538 | fallthrough; |
| 2539 | case 417: | 2539 | case 417: |
| 2540 | test_ahash_speed("rmd320", sec, generic_hash_speed_template); | 2540 | test_ahash_speed("rmd320", sec, generic_hash_speed_template); |
| 2541 | if (mode > 400 && mode < 500) break; | 2541 | if (mode > 400 && mode < 500) break; |
| 2542 | /* fall through */ | 2542 | fallthrough; |
| 2543 | case 418: | 2543 | case 418: |
| 2544 | test_ahash_speed("sha3-224", sec, generic_hash_speed_template); | 2544 | test_ahash_speed("sha3-224", sec, generic_hash_speed_template); |
| 2545 | if (mode > 400 && mode < 500) break; | 2545 | if (mode > 400 && mode < 500) break; |
| 2546 | /* fall through */ | 2546 | fallthrough; |
| 2547 | case 419: | 2547 | case 419: |
| 2548 | test_ahash_speed("sha3-256", sec, generic_hash_speed_template); | 2548 | test_ahash_speed("sha3-256", sec, generic_hash_speed_template); |
| 2549 | if (mode > 400 && mode < 500) break; | 2549 | if (mode > 400 && mode < 500) break; |
| 2550 | /* fall through */ | 2550 | fallthrough; |
| 2551 | case 420: | 2551 | case 420: |
| 2552 | test_ahash_speed("sha3-384", sec, generic_hash_speed_template); | 2552 | test_ahash_speed("sha3-384", sec, generic_hash_speed_template); |
| 2553 | if (mode > 400 && mode < 500) break; | 2553 | if (mode > 400 && mode < 500) break; |
| 2554 | /* fall through */ | 2554 | fallthrough; |
| 2555 | case 421: | 2555 | case 421: |
| 2556 | test_ahash_speed("sha3-512", sec, generic_hash_speed_template); | 2556 | test_ahash_speed("sha3-512", sec, generic_hash_speed_template); |
| 2557 | if (mode > 400 && mode < 500) break; | 2557 | if (mode > 400 && mode < 500) break; |
| 2558 | /* fall through */ | 2558 | fallthrough; |
| 2559 | case 422: | 2559 | case 422: |
| 2560 | test_mb_ahash_speed("sha1", sec, generic_hash_speed_template, | 2560 | test_mb_ahash_speed("sha1", sec, generic_hash_speed_template, |
| 2561 | num_mb); | 2561 | num_mb); |
| 2562 | if (mode > 400 && mode < 500) break; | 2562 | if (mode > 400 && mode < 500) break; |
| 2563 | /* fall through */ | 2563 | fallthrough; |
| 2564 | case 423: | 2564 | case 423: |
| 2565 | test_mb_ahash_speed("sha256", sec, generic_hash_speed_template, | 2565 | test_mb_ahash_speed("sha256", sec, generic_hash_speed_template, |
| 2566 | num_mb); | 2566 | num_mb); |
| 2567 | if (mode > 400 && mode < 500) break; | 2567 | if (mode > 400 && mode < 500) break; |
| 2568 | /* fall through */ | 2568 | fallthrough; |
| 2569 | case 424: | 2569 | case 424: |
| 2570 | test_mb_ahash_speed("sha512", sec, generic_hash_speed_template, | 2570 | test_mb_ahash_speed("sha512", sec, generic_hash_speed_template, |
| 2571 | num_mb); | 2571 | num_mb); |
| 2572 | if (mode > 400 && mode < 500) break; | 2572 | if (mode > 400 && mode < 500) break; |
| 2573 | /* fall through */ | 2573 | fallthrough; |
| 2574 | case 425: | 2574 | case 425: |
| 2575 | test_mb_ahash_speed("sm3", sec, generic_hash_speed_template, | 2575 | test_mb_ahash_speed("sm3", sec, generic_hash_speed_template, |
| 2576 | num_mb); | 2576 | num_mb); |
| 2577 | if (mode > 400 && mode < 500) break; | 2577 | if (mode > 400 && mode < 500) break; |
| 2578 | /* fall through */ | 2578 | fallthrough; |
| 2579 | case 426: | 2579 | case 426: |
| 2580 | test_mb_ahash_speed("streebog256", sec, | 2580 | test_mb_ahash_speed("streebog256", sec, |
| 2581 | generic_hash_speed_template, num_mb); | 2581 | generic_hash_speed_template, num_mb); |
| 2582 | if (mode > 400 && mode < 500) break; | 2582 | if (mode > 400 && mode < 500) break; |
| 2583 | /* fall through */ | 2583 | fallthrough; |
| 2584 | case 427: | 2584 | case 427: |
| 2585 | test_mb_ahash_speed("streebog512", sec, | 2585 | test_mb_ahash_speed("streebog512", sec, |
| 2586 | generic_hash_speed_template, num_mb); | 2586 | generic_hash_speed_template, num_mb); |
| 2587 | if (mode > 400 && mode < 500) break; | 2587 | if (mode > 400 && mode < 500) break; |
| 2588 | /* fall through */ | 2588 | fallthrough; |
| 2589 | case 499: | 2589 | case 499: |
| 2590 | break; | 2590 | break; |
| 2591 | 2591 | ||
| @@ -290,7 +290,7 @@ static int vt_notifier_call(struct notifier_block *blk, · 289 unmodified lines | |||
| 290 | break; | 290 | break; |
| 291 | case '\t': | 291 | case '\t': |
| 292 | c = ' '; | 292 | c = ' '; |
| 293 | /* Fallthrough */ | 293 | fallthrough; |
| 294 | default: | 294 | default: |
| 295 | if (c < 32) | 295 | if (c < 32) |
| 296 | /* Ignore other control sequences */ | 296 | /* Ignore other control sequences */ |
| @@ -42,6 +42,11 @@ config SPEAKUP · 41 unmodified lines | |||
| 42 | one of the listed synthesizers, you should say n. | 42 | one of the listed synthesizers, you should say n. |
| 43 | 43 | ||
| 44 | if SPEAKUP | 44 | if SPEAKUP |
| 45 | |||
| 46 | config SPEAKUP_SERIALIO | ||
| 47 | def_bool y | ||
| 48 | depends on ISA || COMPILE_TEST | ||
| 49 | |||
| 45 | config SPEAKUP_SYNTH_ACNTSA | 50 | config SPEAKUP_SYNTH_ACNTSA |
| 46 | tristate "Accent SA synthesizer support" | 51 | tristate "Accent SA synthesizer support" |
| 47 | help | 52 | help |
| @@ -52,7 +57,7 @@ config SPEAKUP_SYNTH_ACNTSA · 4 unmodified lines | |||
| 52 | 57 | ||
| 53 | config SPEAKUP_SYNTH_ACNTPC | 58 | config SPEAKUP_SYNTH_ACNTPC |
| 54 | tristate "Accent PC synthesizer support" | 59 | tristate "Accent PC synthesizer support" |
| 55 | depends on ISA || COMPILE_TEST | 60 | depends on SPEAKUP_SERIALIO |
| 56 | help | 61 | help |
| 57 | This is the Speakup driver for the accent pc | 62 | This is the Speakup driver for the accent pc |
| 58 | synthesizer. You can say y to build it into the kernel, | 63 | synthesizer. You can say y to build it into the kernel, |
| @@ -104,7 +109,7 @@ config SPEAKUP_SYNTH_DECEXT · 45 unmodified lines | |||
| 104 | 109 | ||
| 105 | config SPEAKUP_SYNTH_DECPC | 110 | config SPEAKUP_SYNTH_DECPC |
| 106 | depends on m | 111 | depends on m |
| 107 | depends on ISA || COMPILE_TEST | 112 | depends on SPEAKUP_SERIALIO |
| 108 | tristate "DECtalk PC (big ISA card) synthesizer support" | 113 | tristate "DECtalk PC (big ISA card) synthesizer support" |
| 109 | help | 114 | help |
| 110 | 115 | ||
| @@ -127,7 +132,7 @@ config SPEAKUP_SYNTH_DECPC · 16 unmodified lines | |||
| 127 | 132 | ||
| 128 | config SPEAKUP_SYNTH_DTLK | 133 | config SPEAKUP_SYNTH_DTLK |
| 129 | tristate "DoubleTalk PC synthesizer support" | 134 | tristate "DoubleTalk PC synthesizer support" |
| 130 | depends on ISA || COMPILE_TEST | 135 | depends on SPEAKUP_SERIALIO |
| 131 | help | 136 | help |
| 132 | 137 | ||
| 133 | This is the Speakup driver for the internal DoubleTalk | 138 | This is the Speakup driver for the internal DoubleTalk |
| @@ -138,7 +143,7 @@ config SPEAKUP_SYNTH_DTLK · 4 unmodified lines | |||
| 138 | 143 | ||
| 139 | config SPEAKUP_SYNTH_KEYPC | 144 | config SPEAKUP_SYNTH_KEYPC |
| 140 | tristate "Keynote Gold PC synthesizer support" | 145 | tristate "Keynote Gold PC synthesizer support" |
| 141 | depends on ISA || COMPILE_TEST | 146 | depends on SPEAKUP_SERIALIO |
| 142 | help | 147 | help |
| 143 | 148 | ||
| 144 | This is the Speakup driver for the Keynote Gold | 149 | This is the Speakup driver for the Keynote Gold |
| @@ -25,8 +25,8 @@ speakup-y := \ · 24 unmodified lines | |||
| 25 | keyhelp.o \ | 25 | keyhelp.o \ |
| 26 | kobjects.o \ | 26 | kobjects.o \ |
| 27 | selection.o \ | 27 | selection.o \ |
| 28 | serialio.o \ | ||
| 29 | spk_ttyio.o \ | 28 | spk_ttyio.o \ |
| 30 | synth.o \ | 29 | synth.o \ |
| 31 | thread.o \ | 30 | thread.o \ |
| 32 | varhandlers.o | 31 | varhandlers.o |
| 32 | speakup-$(CONFIG_SPEAKUP_SERIALIO) += serialio.o | ||
| @@ -32,6 +32,7 @@ static void spk_serial_tiocmset(unsigned int set, unsigned int clear); · 31 unmodified lines | |||
| 32 | static unsigned char spk_serial_in(void); | 32 | static unsigned char spk_serial_in(void); |
| 33 | static unsigned char spk_serial_in_nowait(void); | 33 | static unsigned char spk_serial_in_nowait(void); |
| 34 | static void spk_serial_flush_buffer(void); | 34 | static void spk_serial_flush_buffer(void); |
| 35 | static int spk_serial_wait_for_xmitr(struct spk_synth *in_synth); | ||
| 35 | 36 | ||
| 36 | struct spk_io_ops spk_serial_io_ops = { | 37 | struct spk_io_ops spk_serial_io_ops = { |
| 37 | .synth_out = spk_serial_out, | 38 | .synth_out = spk_serial_out, |
| @@ -40,6 +41,7 @@ struct spk_io_ops spk_serial_io_ops = { · 2 unmodified lines | |||
| 40 | .synth_in = spk_serial_in, | 41 | .synth_in = spk_serial_in, |
| 41 | .synth_in_nowait = spk_serial_in_nowait, | 42 | .synth_in_nowait = spk_serial_in_nowait, |
| 42 | .flush_buffer = spk_serial_flush_buffer, | 43 | .flush_buffer = spk_serial_flush_buffer, |
| 44 | .wait_for_xmitr = spk_serial_wait_for_xmitr, | ||
| 43 | }; | 45 | }; |
| 44 | EXPORT_SYMBOL_GPL(spk_serial_io_ops); | 46 | EXPORT_SYMBOL_GPL(spk_serial_io_ops); |
| 45 | 47 | ||
| @@ -211,7 +213,7 @@ void spk_stop_serial_interrupt(void) · 165 unmodified lines | |||
| 211 | } | 213 | } |
| 212 | EXPORT_SYMBOL_GPL(spk_stop_serial_interrupt); | 214 | EXPORT_SYMBOL_GPL(spk_stop_serial_interrupt); |
| 213 | 215 | ||
| 214 | int spk_wait_for_xmitr(struct spk_synth *in_synth) | 216 | static int spk_serial_wait_for_xmitr(struct spk_synth *in_synth) |
| 215 | { | 217 | { |
| 216 | int tmout = SPK_XMITR_TIMEOUT; | 218 | int tmout = SPK_XMITR_TIMEOUT; |
| 217 | 219 | ||
| @@ -280,7 +282,7 @@ static void spk_serial_flush_buffer(void) · 62 unmodified lines | |||
| 280 | 282 | ||
| 281 | static int spk_serial_out(struct spk_synth *in_synth, const char ch) | 283 | static int spk_serial_out(struct spk_synth *in_synth, const char ch) |
| 282 | { | 284 | { |
| 283 | if (in_synth->alive && spk_wait_for_xmitr(in_synth)) { | 285 | if (in_synth->alive && spk_serial_wait_for_xmitr(in_synth)) { |
| 284 | outb_p(ch, speakup_info.port_tts); | 286 | outb_p(ch, speakup_info.port_tts); |
| 285 | return 1; | 287 | return 1; |
| 286 | } | 288 | } |
| @@ -295,7 +297,7 @@ const char *spk_serial_synth_immediate(struct spk_synth *synth, · 8 unmodified lines | |||
| 295 | while ((ch = *buff)) { | 297 | while ((ch = *buff)) { |
| 296 | if (ch == '\n') | 298 | if (ch == '\n') |
| 297 | ch = synth->procspeech; | 299 | ch = synth->procspeech; |
| 298 | if (spk_wait_for_xmitr(synth)) | 300 | if (spk_serial_wait_for_xmitr(synth)) |
| 299 | outb(ch, speakup_info.port_tts); | 301 | outb(ch, speakup_info.port_tts); |
| 300 | else | 302 | else |
| 301 | return buff; | 303 | return buff; |
| @@ -34,7 +34,6 @@ · 33 unmodified lines | |||
| 34 | 34 | ||
| 35 | const struct old_serial_port *spk_serial_init(int index); | 35 | const struct old_serial_port *spk_serial_init(int index); |
| 36 | void spk_stop_serial_interrupt(void); | 36 | void spk_stop_serial_interrupt(void); |
| 37 | int spk_wait_for_xmitr(struct spk_synth *in_synth); | ||
| 38 | void spk_serial_release(void); | 37 | void spk_serial_release(void); |
| 39 | void spk_ttyio_release(void); | 38 | void spk_ttyio_release(void); |
| 40 | void spk_ttyio_register_ldisc(void); | 39 | void spk_ttyio_register_ldisc(void); |
| @@ -116,6 +116,7 @@ static void spk_ttyio_tiocmset(unsigned int set, unsigned int clear); · 115 unmodified lines | |||
| 116 | static unsigned char spk_ttyio_in(void); | 116 | static unsigned char spk_ttyio_in(void); |
| 117 | static unsigned char spk_ttyio_in_nowait(void); | 117 | static unsigned char spk_ttyio_in_nowait(void); |
| 118 | static void spk_ttyio_flush_buffer(void); | 118 | static void spk_ttyio_flush_buffer(void); |
| 119 | static int spk_ttyio_wait_for_xmitr(struct spk_synth *in_synth); | ||
| 119 | 120 | ||
| 120 | struct spk_io_ops spk_ttyio_ops = { | 121 | struct spk_io_ops spk_ttyio_ops = { |
| 121 | .synth_out = spk_ttyio_out, | 122 | .synth_out = spk_ttyio_out, |
| @@ -125,6 +126,7 @@ struct spk_io_ops spk_ttyio_ops = { · 3 unmodified lines | |||
| 125 | .synth_in = spk_ttyio_in, | 126 | .synth_in = spk_ttyio_in, |
| 126 | .synth_in_nowait = spk_ttyio_in_nowait, | 127 | .synth_in_nowait = spk_ttyio_in_nowait, |
| 127 | .flush_buffer = spk_ttyio_flush_buffer, | 128 | .flush_buffer = spk_ttyio_flush_buffer, |
| 129 | .wait_for_xmitr = spk_ttyio_wait_for_xmitr, | ||
| 128 | }; | 130 | }; |
| 129 | EXPORT_SYMBOL_GPL(spk_ttyio_ops); | 131 | EXPORT_SYMBOL_GPL(spk_ttyio_ops); |
| 130 | 132 | ||
| @@ -286,6 +288,11 @@ static void spk_ttyio_tiocmset(unsigned int set, unsigned int clear) · 155 unmodified lines | |||
| 286 | mutex_unlock(&speakup_tty_mutex); | 288 | mutex_unlock(&speakup_tty_mutex); |
| 287 | } | 289 | } |
| 288 | 290 | ||
| 291 | static int spk_ttyio_wait_for_xmitr(struct spk_synth *in_synth) | ||
| 292 | { | ||
| 293 | return 1; | ||
| 294 | } | ||
| 295 | |||
| 289 | static unsigned char ttyio_in(int timeout) | 296 | static unsigned char ttyio_in(int timeout) |
| 290 | { | 297 | { |
| 291 | struct spk_ldisc_data *ldisc_data = speakup_tty->disc_data; | 298 | struct spk_ldisc_data *ldisc_data = speakup_tty->disc_data; |
| @@ -158,6 +158,7 @@ struct spk_io_ops { · 157 unmodified lines | |||
| 158 | unsigned char (*synth_in)(void); | 158 | unsigned char (*synth_in)(void); |
| 159 | unsigned char (*synth_in_nowait)(void); | 159 | unsigned char (*synth_in_nowait)(void); |
| 160 | void (*flush_buffer)(void); | 160 | void (*flush_buffer)(void); |
| 161 | int (*wait_for_xmitr)(struct spk_synth *synth); | ||
| 161 | }; | 162 | }; |
| 162 | 163 | ||
| 163 | struct spk_synth { | 164 | struct spk_synth { |
| @@ -159,7 +159,7 @@ int spk_synth_is_alive_restart(struct spk_synth *synth) · 158 unmodified lines | |||
| 159 | { | 159 | { |
| 160 | if (synth->alive) | 160 | if (synth->alive) |
| 161 | return 1; | 161 | return 1; |
| 162 | if (spk_wait_for_xmitr(synth) > 0) { | 162 | if (synth->io_ops->wait_for_xmitr(synth) > 0) { |
| 163 | /* restart */ | 163 | /* restart */ |
| 164 | synth->alive = 1; | 164 | synth->alive = 1; |
| 165 | synth_printf("%s", synth->init); | 165 | synth_printf("%s", synth->init); |
| @@ -99,8 +99,8 @@ static int fch_misc_setup(struct apd_private_data *pdata) · 98 unmodified lines | |||
| 99 | if (ret < 0) | 99 | if (ret < 0) |
| 100 | return -ENOENT; | 100 | return -ENOENT; |
| 101 | 101 | ||
| 102 | acpi_dev_get_property(adev, "is-rv", ACPI_TYPE_INTEGER, &obj); | 102 | if (!acpi_dev_get_property(adev, "is-rv", ACPI_TYPE_INTEGER, &obj)) |
| 103 | clk_data->is_rv = obj->integer.value; | 103 | clk_data->is_rv = obj->integer.value; |
| 104 | 104 | ||
| 105 | list_for_each_entry(rentry, &resource_list, node) { | 105 | list_for_each_entry(rentry, &resource_list, node) { |
| 106 | clk_data->base = devm_ioremap(&adev->dev, rentry->res->start, | 106 | clk_data->base = devm_ioremap(&adev->dev, rentry->res->start, |
| @@ -350,7 +350,7 @@ void __iomem __ref · 349 unmodified lines | |||
| 350 | 350 | ||
| 351 | pg_off = round_down(phys, PAGE_SIZE); | 351 | pg_off = round_down(phys, PAGE_SIZE); |
| 352 | pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off; | 352 | pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off; |
| 353 | virt = acpi_map(pg_off, pg_sz); | 353 | virt = acpi_map(phys, size); |
| 354 | if (!virt) { | 354 | if (!virt) { |
| 355 | mutex_unlock(&acpi_ioremap_lock); | 355 | mutex_unlock(&acpi_ioremap_lock); |
| 356 | kfree(map); | 356 | kfree(map); |
| @@ -358,7 +358,7 @@ void __iomem __ref · 1 unmodified line | |||
| 358 | } | 358 | } |
| 359 | 359 | ||
| 360 | INIT_LIST_HEAD(&map->list); | 360 | INIT_LIST_HEAD(&map->list); |
| 361 | map->virt = virt; | 361 | map->virt = (void __iomem __force *)((unsigned long)virt & PAGE_MASK); |
| 362 | map->phys = pg_off; | 362 | map->phys = pg_off; |
| 363 | map->size = pg_sz; | 363 | map->size = pg_sz; |
| 364 | map->track.refcount = 1; | 364 | map->track.refcount = 1; |
| @@ -1575,11 +1575,26 @@ static acpi_status acpi_deactivate_mem_region(acpi_handle handle, u32 level, · 1210 unmodified lines | |||
| 1575 | acpi_status acpi_release_memory(acpi_handle handle, struct resource *res, | 1575 | acpi_status acpi_release_memory(acpi_handle handle, struct resource *res, |
| 1576 | u32 level) | 1576 | u32 level) |
| 1577 | { | 1577 | { |
| 1578 | acpi_status status; | ||
| 1579 | |||
| 1578 | if (!(res->flags & IORESOURCE_MEM)) | 1580 | if (!(res->flags & IORESOURCE_MEM)) |
| 1579 | return AE_TYPE; | 1581 | return AE_TYPE; |
| 1580 | 1582 | ||
| 1581 | return acpi_walk_namespace(ACPI_TYPE_REGION, handle, level, | 1583 | status = acpi_walk_namespace(ACPI_TYPE_REGION, handle, level, |
| 1582 | acpi_deactivate_mem_region, NULL, res, NULL); | 1584 | acpi_deactivate_mem_region, NULL, |
| 1585 | res, NULL); | ||
| 1586 | if (ACPI_FAILURE(status)) | ||
| 1587 | return status; | ||
| 1588 | |||
| 1589 | /* | ||
| 1590 | * Wait for all of the mappings queued up for removal by | ||
| 1591 | * acpi_deactivate_mem_region() to actually go away. | ||
| 1592 | */ | ||
| 1593 | synchronize_rcu(); | ||
| 1594 | rcu_barrier(); | ||
| 1595 | flush_scheduled_work(); | ||
| 1596 | |||
| 1597 | return AE_OK; | ||
| 1583 | } | 1598 | } |
| 1584 | EXPORT_SYMBOL_GPL(acpi_release_memory); | 1599 | EXPORT_SYMBOL_GPL(acpi_release_memory); |
| 1585 | 1600 | ||
| @@ -470,7 +470,7 @@ static int brcm_ahci_probe(struct platform_device *pdev) · 469 unmodified lines | |||
| 470 | switch (priv->version) { | 470 | switch (priv->version) { |
| 471 | case BRCM_SATA_BCM7425: | 471 | case BRCM_SATA_BCM7425: |
| 472 | hpriv->flags |= AHCI_HFLAG_DELAY_ENGINE; | 472 | hpriv->flags |= AHCI_HFLAG_DELAY_ENGINE; |
| 473 | /* fall through */ | 473 | fallthrough; |
| 474 | case BRCM_SATA_NSP: | 474 | case BRCM_SATA_NSP: |
| 475 | hpriv->flags |= AHCI_HFLAG_NO_NCQ; | 475 | hpriv->flags |= AHCI_HFLAG_NO_NCQ; |
| 476 | priv->quirks |= BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE; | 476 | priv->quirks |= BRCM_AHCI_QUIRK_SKIP_PHY_ENABLE; |
| @@ -326,7 +326,7 @@ static int ahci_platform_get_phy(struct ahci_host_priv *hpriv, u32 port, · 325 unmodified lines | |||
| 326 | node); | 326 | node); |
| 327 | break; | 327 | break; |
| 328 | } | 328 | } |
| 329 | /* fall through */ | 329 | fallthrough; |
| 330 | case -ENODEV: | 330 | case -ENODEV: |
| 331 | /* continue normally */ | 331 | /* continue normally */ |
| 332 | hpriv->phys[port] = NULL; | 332 | hpriv->phys[port] = NULL; |
| @@ -190,7 +190,7 @@ struct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap, · 189 unmodified lines | |||
| 190 | case ATA_LITER_PMP_FIRST: | 190 | case ATA_LITER_PMP_FIRST: |
| 191 | if (sata_pmp_attached(ap)) | 191 | if (sata_pmp_attached(ap)) |
| 192 | return ap->pmp_link; | 192 | return ap->pmp_link; |
| 193 | /* fall through */ | 193 | fallthrough; |
| 194 | case ATA_LITER_HOST_FIRST: | 194 | case ATA_LITER_HOST_FIRST: |
| 195 | return &ap->link; | 195 | return &ap->link; |
| 196 | } | 196 | } |
| @@ -201,11 +201,11 @@ struct ata_link *ata_link_next(struct ata_link *link, struct ata_port *ap, · 4 unmodified lines | |||
| 201 | case ATA_LITER_HOST_FIRST: | 201 | case ATA_LITER_HOST_FIRST: |
| 202 | if (sata_pmp_attached(ap)) | 202 | if (sata_pmp_attached(ap)) |
| 203 | return ap->pmp_link; | 203 | return ap->pmp_link; |
| 204 | /* fall through */ | 204 | fallthrough; |
| 205 | case ATA_LITER_PMP_FIRST: | 205 | case ATA_LITER_PMP_FIRST: |
| 206 | if (unlikely(ap->slave_link)) | 206 | if (unlikely(ap->slave_link)) |
| 207 | return ap->slave_link; | 207 | return ap->slave_link; |
| 208 | /* fall through */ | 208 | fallthrough; |
| 209 | case ATA_LITER_EDGE: | 209 | case ATA_LITER_EDGE: |
| 210 | return NULL; | 210 | return NULL; |
| 211 | } | 211 | } |
| @@ -523,7 +523,7 @@ int atapi_cmd_type(u8 opcode) · 311 unmodified lines | |||
| 523 | case ATA_12: | 523 | case ATA_12: |
| 524 | if (atapi_passthru16) | 524 | if (atapi_passthru16) |
| 525 | return ATAPI_PASS_THRU; | 525 | return ATAPI_PASS_THRU; |
| 526 | /* fall thru */ | 526 | fallthrough; |
| 527 | default: | 527 | default: |
| 528 | return ATAPI_MISC; | 528 | return ATAPI_MISC; |
| 529 | } | 529 | } |
| @@ -1800,7 +1800,7 @@ retry: · 1270 unmodified lines | |||
| 1800 | switch (class) { | 1800 | switch (class) { |
| 1801 | case ATA_DEV_SEMB: | 1801 | case ATA_DEV_SEMB: |
| 1802 | class = ATA_DEV_ATA; /* some hard drives report SEMB sig */ | 1802 | class = ATA_DEV_ATA; /* some hard drives report SEMB sig */ |
| 1803 | /* fall through */ | 1803 | fallthrough; |
| 1804 | case ATA_DEV_ATA: | 1804 | case ATA_DEV_ATA: |
| 1805 | case ATA_DEV_ZAC: | 1805 | case ATA_DEV_ZAC: |
| 1806 | tf.command = ATA_CMD_ID_ATA; | 1806 | tf.command = ATA_CMD_ID_ATA; |
| @@ -2907,7 +2907,7 @@ int ata_bus_probe(struct ata_port *ap) · 1100 unmodified lines | |||
| 2907 | case -ENODEV: | 2907 | case -ENODEV: |
| 2908 | /* give it just one more chance */ | 2908 | /* give it just one more chance */ |
| 2909 | tries[dev->devno] = min(tries[dev->devno], 1); | 2909 | tries[dev->devno] = min(tries[dev->devno], 1); |
| 2910 | /* fall through */ | 2910 | fallthrough; |
| 2911 | case -EIO: | 2911 | case -EIO: |
| 2912 | if (tries[dev->devno] == 1) { | 2912 | if (tries[dev->devno] == 1) { |
| 2913 | /* This is the last chance, better to slow | 2913 | /* This is the last chance, better to slow |
| @@ -3158,7 +3158,7 @@ int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel) · 244 unmodified lines | |||
| 3158 | 3158 | ||
| 3159 | case ATA_DNXFER_FORCE_PIO0: | 3159 | case ATA_DNXFER_FORCE_PIO0: |
| 3160 | pio_mask &= 1; | 3160 | pio_mask &= 1; |
| 3161 | /* fall through */ | 3161 | fallthrough; |
| 3162 | case ATA_DNXFER_FORCE_PIO: | 3162 | case ATA_DNXFER_FORCE_PIO: |
| 3163 | mwdma_mask = 0; | 3163 | mwdma_mask = 0; |
| 3164 | udma_mask = 0; | 3164 | udma_mask = 0; |
| @@ -4694,7 +4694,7 @@ void ata_qc_complete(struct ata_queued_cmd *qc) · 1529 unmodified lines | |||
| 4694 | qc->tf.feature != SETFEATURES_RA_ON && | 4694 | qc->tf.feature != SETFEATURES_RA_ON && |
| 4695 | qc->tf.feature != SETFEATURES_RA_OFF) | 4695 | qc->tf.feature != SETFEATURES_RA_OFF) |
| 4696 | break; | 4696 | break; |
| 4697 | /* fall through */ | 4697 | fallthrough; |
| 4698 | case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */ | 4698 | case ATA_CMD_INIT_DEV_PARAMS: /* CHS translation changed */ |
| 4699 | case ATA_CMD_SET_MULTI: /* multi_count changed */ | 4699 | case ATA_CMD_SET_MULTI: /* multi_count changed */ |
| 4700 | /* revalidate device */ | 4700 | /* revalidate device */ |
| @@ -1576,7 +1576,7 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc, · 1575 unmodified lines | |||
| 1576 | case ATA_DEV_ZAC: | 1576 | case ATA_DEV_ZAC: |
| 1577 | if (stat & ATA_SENSE) | 1577 | if (stat & ATA_SENSE) |
| 1578 | ata_eh_request_sense(qc, qc->scsicmd); | 1578 | ata_eh_request_sense(qc, qc->scsicmd); |
| 1579 | /* fall through */ | 1579 | fallthrough; |
| 1580 | case ATA_DEV_ATA: | 1580 | case ATA_DEV_ATA: |
| 1581 | if (err & ATA_ICRC) | 1581 | if (err & ATA_ICRC) |
| 1582 | qc->err_mask |= AC_ERR_ATA_BUS; | 1582 | qc->err_mask |= AC_ERR_ATA_BUS; |
| @@ -3473,11 +3473,11 @@ static int ata_eh_handle_dev_fail(struct ata_device *dev, int err) · 1890 unmodified lines | |||
| 3473 | case -ENODEV: | 3473 | case -ENODEV: |
| 3474 | /* device missing or wrong IDENTIFY data, schedule probing */ | 3474 | /* device missing or wrong IDENTIFY data, schedule probing */ |
| 3475 | ehc->i.probe_mask |= (1 << dev->devno); | 3475 | ehc->i.probe_mask |= (1 << dev->devno); |
| 3476 | /* fall through */ | 3476 | fallthrough; |
| 3477 | case -EINVAL: | 3477 | case -EINVAL: |
| 3478 | /* give it just one more chance */ | 3478 | /* give it just one more chance */ |
| 3479 | ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1); | 3479 | ehc->tries[dev->devno] = min(ehc->tries[dev->devno], 1); |
| 3480 | /* fall through */ | 3480 | fallthrough; |
| 3481 | case -EIO: | 3481 | case -EIO: |
| 3482 | if (ehc->tries[dev->devno] == 1) { | 3482 | if (ehc->tries[dev->devno] == 1) { |
| 3483 | /* This is the last chance, better to slow | 3483 | /* This is the last chance, better to slow |
| @@ -4162,7 +4162,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd) · 4161 unmodified lines | |||
| 4162 | ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b6); | 4162 | ata_scsi_rbuf_fill(&args, ata_scsiop_inq_b6); |
| 4163 | break; | 4163 | break; |
| 4164 | } | 4164 | } |
| 4165 | /* Fallthrough */ | 4165 | fallthrough; |
| 4166 | default: | 4166 | default: |
| 4167 | ata_scsi_set_invalid_field(dev, cmd, 2, 0xff); | 4167 | ata_scsi_set_invalid_field(dev, cmd, 2, 0xff); |
| 4168 | break; | 4168 | break; |
| @@ -4198,7 +4198,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd) · 29 unmodified lines | |||
| 4198 | * turning this into a no-op. | 4198 | * turning this into a no-op. |
| 4199 | */ | 4199 | */ |
| 4200 | case SYNCHRONIZE_CACHE: | 4200 | case SYNCHRONIZE_CACHE: |
| 4201 | /* fall through */ | 4201 | fallthrough; |
| 4202 | 4202 | ||
| 4203 | /* no-op's, complete with success */ | 4203 | /* no-op's, complete with success */ |
| 4204 | case REZERO_UNIT: | 4204 | case REZERO_UNIT: |
| @@ -157,7 +157,7 @@ static int atp867x_get_active_clocks_shifted(struct ata_port *ap, · 156 unmodified lines | |||
| 157 | default: | 157 | default: |
| 158 | printk(KERN_WARNING "ATP867X: active %dclk is invalid. " | 158 | printk(KERN_WARNING "ATP867X: active %dclk is invalid. " |
| 159 | "Using 12clk.\n", clk); | 159 | "Using 12clk.\n", clk); |
| 160 | /* fall through */ | 160 | fallthrough; |
| 161 | case 9 ... 12: | 161 | case 9 ... 12: |
| 162 | clocks = 7; /* 12 clk */ | 162 | clocks = 7; /* 12 clk */ |
| 163 | break; | 163 | break; |
| @@ -190,7 +190,7 @@ static int atp867x_get_recover_clocks_shifted(unsigned int clk) · 26 unmodified lines | |||
| 190 | default: | 190 | default: |
| 191 | printk(KERN_WARNING "ATP867X: recover %dclk is invalid. " | 191 | printk(KERN_WARNING "ATP867X: recover %dclk is invalid. " |
| 192 | "Using default 12clk.\n", clk); | 192 | "Using default 12clk.\n", clk); |
| 193 | /* fall through */ | 193 | fallthrough; |
| 194 | case 12: /* default 12 clk */ | 194 | case 12: /* default 12 clk */ |
| 195 | clocks = 0; | 195 | clocks = 0; |
| 196 | break; | 196 | break; |
| @@ -369,7 +369,7 @@ static int serverworks_fixup(struct pci_dev *pdev) · 368 unmodified lines | |||
| 369 | break; | 369 | break; |
| 370 | case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: | 370 | case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE: |
| 371 | ata_pci_bmdma_clear_simplex(pdev); | 371 | ata_pci_bmdma_clear_simplex(pdev); |
| 372 | /* fall through */ | 372 | fallthrough; |
| 373 | case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE: | 373 | case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE: |
| 374 | case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2: | 374 | case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2: |
| 375 | rc = serverworks_fixup_csb(pdev); | 375 | rc = serverworks_fixup_csb(pdev); |
| @@ -2010,7 +2010,7 @@ static void mv_rw_multi_errata_sata24(struct ata_queued_cmd *qc) · 2009 unmodified lines | |||
| 2010 | break; | 2010 | break; |
| 2011 | case ATA_CMD_WRITE_MULTI_FUA_EXT: | 2011 | case ATA_CMD_WRITE_MULTI_FUA_EXT: |
| 2012 | tf->flags &= ~ATA_TFLAG_FUA; /* ugh */ | 2012 | tf->flags &= ~ATA_TFLAG_FUA; /* ugh */ |
| 2013 | /* fall through */ | 2013 | fallthrough; |
| 2014 | case ATA_CMD_WRITE_MULTI_EXT: | 2014 | case ATA_CMD_WRITE_MULTI_EXT: |
| 2015 | tf->command = ATA_CMD_PIO_WRITE_EXT; | 2015 | tf->command = ATA_CMD_PIO_WRITE_EXT; |
| 2016 | break; | 2016 | break; |
| @@ -2044,7 +2044,7 @@ static enum ata_completion_errors mv_qc_prep(struct ata_queued_cmd *qc) · 27 unmodified lines | |||
| 2044 | case ATA_PROT_DMA: | 2044 | case ATA_PROT_DMA: |
| 2045 | if (tf->command == ATA_CMD_DSM) | 2045 | if (tf->command == ATA_CMD_DSM) |
| 2046 | return AC_ERR_OK; | 2046 | return AC_ERR_OK; |
| 2047 | /* fall-thru */ | 2047 | fallthrough; |
| 2048 | case ATA_PROT_NCQ: | 2048 | case ATA_PROT_NCQ: |
| 2049 | break; /* continue below */ | 2049 | break; /* continue below */ |
| 2050 | case ATA_PROT_PIO: | 2050 | case ATA_PROT_PIO: |
| @@ -2296,7 +2296,7 @@ static unsigned int mv_qc_issue_fis(struct ata_queued_cmd *qc) · 245 unmodified lines | |||
| 2296 | switch (qc->tf.protocol) { | 2296 | switch (qc->tf.protocol) { |
| 2297 | case ATAPI_PROT_PIO: | 2297 | case ATAPI_PROT_PIO: |
| 2298 | pp->pp_flags |= MV_PP_FLAG_FAKE_ATA_BUSY; | 2298 | pp->pp_flags |= MV_PP_FLAG_FAKE_ATA_BUSY; |
| 2299 | /* fall through */ | 2299 | fallthrough; |
| 2300 | case ATAPI_PROT_NODATA: | 2300 | case ATAPI_PROT_NODATA: |
| 2301 | ap->hsm_task_state = HSM_ST_FIRST; | 2301 | ap->hsm_task_state = HSM_ST_FIRST; |
| 2302 | break; | 2302 | break; |
| @@ -2347,7 +2347,7 @@ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc) · 44 unmodified lines | |||
| 2347 | return AC_ERR_OTHER; | 2347 | return AC_ERR_OTHER; |
| 2348 | break; /* use bmdma for this */ | 2348 | break; /* use bmdma for this */ |
| 2349 | } | 2349 | } |
| 2350 | /* fall thru */ | 2350 | fallthrough; |
| 2351 | case ATA_PROT_NCQ: | 2351 | case ATA_PROT_NCQ: |
| 2352 | mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); | 2352 | mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); |
| 2353 | pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK; | 2353 | pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK; |
| @@ -2376,7 +2376,7 @@ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc) · 22 unmodified lines | |||
| 2376 | ": attempting PIO w/multiple DRQ: " | 2376 | ": attempting PIO w/multiple DRQ: " |
| 2377 | "this may fail due to h/w errata\n"); | 2377 | "this may fail due to h/w errata\n"); |
| 2378 | } | 2378 | } |
| 2379 | /* fall through */ | 2379 | fallthrough; |
| 2380 | case ATA_PROT_NODATA: | 2380 | case ATA_PROT_NODATA: |
| 2381 | case ATAPI_PROT_PIO: | 2381 | case ATAPI_PROT_PIO: |
| 2382 | case ATAPI_PROT_NODATA: | 2382 | case ATAPI_PROT_NODATA: |
| @@ -3864,7 +3864,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) · 1481 unmodified lines | |||
| 3864 | " and avoid the final two gigabytes on" | 3864 | " and avoid the final two gigabytes on" |
| 3865 | " all RocketRAID BIOS initialized drives.\n"); | 3865 | " all RocketRAID BIOS initialized drives.\n"); |
| 3866 | } | 3866 | } |
| 3867 | /* fall through */ | 3867 | fallthrough; |
| 3868 | case chip_6042: | 3868 | case chip_6042: |
| 3869 | hpriv->ops = &mv6xxx_ops; | 3869 | hpriv->ops = &mv6xxx_ops; |
| 3870 | hp_flags |= MV_HP_GEN_IIE; | 3870 | hp_flags |= MV_HP_GEN_IIE; |
| @@ -637,7 +637,7 @@ static enum ata_completion_errors pdc_qc_prep(struct ata_queued_cmd *qc) · 636 unmodified lines | |||
| 637 | switch (qc->tf.protocol) { | 637 | switch (qc->tf.protocol) { |
| 638 | case ATA_PROT_DMA: | 638 | case ATA_PROT_DMA: |
| 639 | pdc_fill_sg(qc); | 639 | pdc_fill_sg(qc); |
| 640 | /*FALLTHROUGH*/ | 640 | fallthrough; |
| 641 | case ATA_PROT_NODATA: | 641 | case ATA_PROT_NODATA: |
| 642 | i = pdc_pkt_header(&qc->tf, qc->ap->bmdma_prd_dma, | 642 | i = pdc_pkt_header(&qc->tf, qc->ap->bmdma_prd_dma, |
| 643 | qc->dev->devno, pp->pkt); | 643 | qc->dev->devno, pp->pkt); |
| @@ -652,7 +652,7 @@ static enum ata_completion_errors pdc_qc_prep(struct ata_queued_cmd *qc) · 8 unmodified lines | |||
| 652 | break; | 652 | break; |
| 653 | case ATAPI_PROT_DMA: | 653 | case ATAPI_PROT_DMA: |
| 654 | pdc_fill_sg(qc); | 654 | pdc_fill_sg(qc); |
| 655 | /*FALLTHROUGH*/ | 655 | fallthrough; |
| 656 | case ATAPI_PROT_NODATA: | 656 | case ATAPI_PROT_NODATA: |
| 657 | pdc_atapi_pkt(qc); | 657 | pdc_atapi_pkt(qc); |
| 658 | break; | 658 | break; |
| @@ -1022,11 +1022,11 @@ static unsigned int pdc_qc_issue(struct ata_queued_cmd *qc) · 363 unmodified lines | |||
| 1022 | case ATAPI_PROT_NODATA: | 1022 | case ATAPI_PROT_NODATA: |
| 1023 | if (qc->dev->flags & ATA_DFLAG_CDB_INTR) | 1023 | if (qc->dev->flags & ATA_DFLAG_CDB_INTR) |
| 1024 | break; | 1024 | break; |
| 1025 | /*FALLTHROUGH*/ | 1025 | fallthrough; |
| 1026 | case ATA_PROT_NODATA: | 1026 | case ATA_PROT_NODATA: |
| 1027 | if (qc->tf.flags & ATA_TFLAG_POLLING) | 1027 | if (qc->tf.flags & ATA_TFLAG_POLLING) |
| 1028 | break; | 1028 | break; |
| 1029 | /*FALLTHROUGH*/ | 1029 | fallthrough; |
| 1030 | case ATAPI_PROT_DMA: | 1030 | case ATAPI_PROT_DMA: |
| 1031 | case ATA_PROT_DMA: | 1031 | case ATA_PROT_DMA: |
| 1032 | pdc_packet_start(qc); | 1032 | pdc_packet_start(qc); |
| @@ -669,7 +669,7 @@ static unsigned int pdc20621_qc_issue(struct ata_queued_cmd *qc) · 668 unmodified lines | |||
| 669 | case ATA_PROT_NODATA: | 669 | case ATA_PROT_NODATA: |
| 670 | if (qc->tf.flags & ATA_TFLAG_POLLING) | 670 | if (qc->tf.flags & ATA_TFLAG_POLLING) |
| 671 | break; | 671 | break; |
| 672 | /*FALLTHROUGH*/ | 672 | fallthrough; |
| 673 | case ATA_PROT_DMA: | 673 | case ATA_PROT_DMA: |
| 674 | pdc20621_packet_start(qc); | 674 | pdc20621_packet_start(qc); |
| 675 | return 0; | 675 | return 0; |
| @@ -711,7 +711,7 @@ static void process_txdone_queue (struct fs_dev *dev, struct queue *q) · 710 unmodified lines | |||
| 711 | 711 | ||
| 712 | switch (STATUS_CODE (qe)) { | 712 | switch (STATUS_CODE (qe)) { |
| 713 | case 0x01: /* This is for AAL0 where we put the chip in streaming mode */ | 713 | case 0x01: /* This is for AAL0 where we put the chip in streaming mode */ |
| 714 | /* Fall through */ | 714 | fallthrough; |
| 715 | case 0x02: | 715 | case 0x02: |
| 716 | /* Process a real txdone entry. */ | 716 | /* Process a real txdone entry. */ |
| 717 | tmp = qe->p0; | 717 | tmp = qe->p0; |
| @@ -376,33 +376,33 @@ fore200e_shutdown(struct fore200e* fore200e) · 375 unmodified lines | |||
| 376 | case FORE200E_STATE_COMPLETE: | 376 | case FORE200E_STATE_COMPLETE: |
| 377 | kfree(fore200e->stats); | 377 | kfree(fore200e->stats); |
| 378 | 378 | ||
| 379 | /* fall through */ | 379 | fallthrough; |
| 380 | case FORE200E_STATE_IRQ: | 380 | case FORE200E_STATE_IRQ: |
| 381 | free_irq(fore200e->irq, fore200e->atm_dev); | 381 | free_irq(fore200e->irq, fore200e->atm_dev); |
| 382 | 382 | ||
| 383 | /* fall through */ | 383 | fallthrough; |
| 384 | case FORE200E_STATE_ALLOC_BUF: | 384 | case FORE200E_STATE_ALLOC_BUF: |
| 385 | fore200e_free_rx_buf(fore200e); | 385 | fore200e_free_rx_buf(fore200e); |
| 386 | 386 | ||
| 387 | /* fall through */ | 387 | fallthrough; |
| 388 | case FORE200E_STATE_INIT_BSQ: | 388 | case FORE200E_STATE_INIT_BSQ: |
| 389 | fore200e_uninit_bs_queue(fore200e); | 389 | fore200e_uninit_bs_queue(fore200e); |
| 390 | 390 | ||
| 391 | /* fall through */ | 391 | fallthrough; |
| 392 | case FORE200E_STATE_INIT_RXQ: | 392 | case FORE200E_STATE_INIT_RXQ: |
| 393 | fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.status); | 393 | fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.status); |
| 394 | fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.rpd); | 394 | fore200e_dma_chunk_free(fore200e, &fore200e->host_rxq.rpd); |
| 395 | 395 | ||
| 396 | /* fall through */ | 396 | fallthrough; |
| 397 | case FORE200E_STATE_INIT_TXQ: | 397 | case FORE200E_STATE_INIT_TXQ: |
| 398 | fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.status); | 398 | fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.status); |
| 399 | fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.tpd); | 399 | fore200e_dma_chunk_free(fore200e, &fore200e->host_txq.tpd); |
| 400 | 400 | ||
| 401 | /* fall through */ | 401 | fallthrough; |
| 402 | case FORE200E_STATE_INIT_CMDQ: | 402 | case FORE200E_STATE_INIT_CMDQ: |
| 403 | fore200e_dma_chunk_free(fore200e, &fore200e->host_cmdq.status); | 403 | fore200e_dma_chunk_free(fore200e, &fore200e->host_cmdq.status); |
| 404 | 404 | ||
| 405 | /* fall through */ | 405 | fallthrough; |
| 406 | case FORE200E_STATE_INITIALIZE: | 406 | case FORE200E_STATE_INITIALIZE: |
| 407 | /* nothing to do for that state */ | 407 | /* nothing to do for that state */ |
| 408 | 408 | ||
| @@ -415,7 +415,7 @@ fore200e_shutdown(struct fore200e* fore200e) · 6 unmodified lines | |||
| 415 | case FORE200E_STATE_MAP: | 415 | case FORE200E_STATE_MAP: |
| 416 | fore200e->bus->unmap(fore200e); | 416 | fore200e->bus->unmap(fore200e); |
| 417 | 417 | ||
| 418 | /* fall through */ | 418 | fallthrough; |
| 419 | case FORE200E_STATE_CONFIGURE: | 419 | case FORE200E_STATE_CONFIGURE: |
| 420 | /* nothing to do for that state */ | 420 | /* nothing to do for that state */ |
| 421 | 421 | ||
| @@ -1944,14 +1944,14 @@ he_tasklet(unsigned long data) · 1943 unmodified lines | |||
| 1944 | switch (type) { | 1944 | switch (type) { |
| 1945 | case ITYPE_RBRQ_THRESH: | 1945 | case ITYPE_RBRQ_THRESH: |
| 1946 | HPRINTK("rbrq%d threshold\n", group); | 1946 | HPRINTK("rbrq%d threshold\n", group); |
| 1947 | /* fall through */ | 1947 | fallthrough; |
| 1948 | case ITYPE_RBRQ_TIMER: | 1948 | case ITYPE_RBRQ_TIMER: |
| 1949 | if (he_service_rbrq(he_dev, group)) | 1949 | if (he_service_rbrq(he_dev, group)) |
| 1950 | he_service_rbpl(he_dev, group); | 1950 | he_service_rbpl(he_dev, group); |
| 1951 | break; | 1951 | break; |
| 1952 | case ITYPE_TBRQ_THRESH: | 1952 | case ITYPE_TBRQ_THRESH: |
| 1953 | HPRINTK("tbrq%d threshold\n", group); | 1953 | HPRINTK("tbrq%d threshold\n", group); |
| 1954 | /* fall through */ | 1954 | fallthrough; |
| 1955 | case ITYPE_TPD_COMPLETE: | 1955 | case ITYPE_TPD_COMPLETE: |
| 1956 | he_service_tbrq(he_dev, group); | 1956 | he_service_tbrq(he_dev, group); |
| 1957 | break; | 1957 | break; |
| @@ -192,7 +192,7 @@ static int idt77105_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg) · 191 unmodified lines | |||
| 192 | switch (cmd) { | 192 | switch (cmd) { |
| 193 | case IDT77105_GETSTATZ: | 193 | case IDT77105_GETSTATZ: |
| 194 | if (!capable(CAP_NET_ADMIN)) return -EPERM; | 194 | if (!capable(CAP_NET_ADMIN)) return -EPERM; |
| 195 | /* fall through */ | 195 | fallthrough; |
| 196 | case IDT77105_GETSTAT: | 196 | case IDT77105_GETSTAT: |
| 197 | return fetch_stats(dev, arg, cmd == IDT77105_GETSTATZ); | 197 | return fetch_stats(dev, arg, cmd == IDT77105_GETSTATZ); |
| 198 | case ATM_SETLOOP: | 198 | case ATM_SETLOOP: |
| @@ -2019,7 +2019,7 @@ static int lanai_normalize_ci(struct lanai_dev *lanai, · 2018 unmodified lines | |||
| 2019 | switch (*vpip) { | 2019 | switch (*vpip) { |
| 2020 | case ATM_VPI_ANY: | 2020 | case ATM_VPI_ANY: |
| 2021 | *vpip = 0; | 2021 | *vpip = 0; |
| 2022 | /* FALLTHROUGH */ | 2022 | fallthrough; |
| 2023 | case 0: | 2023 | case 0: |
| 2024 | break; | 2024 | break; |
| 2025 | default: | 2025 | default: |
| @@ -1447,7 +1447,7 @@ static int zatm_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg) · 1446 unmodified lines | |||
| 1447 | switch (cmd) { | 1447 | switch (cmd) { |
| 1448 | case ZATM_GETPOOLZ: | 1448 | case ZATM_GETPOOLZ: |
| 1449 | if (!capable(CAP_NET_ADMIN)) return -EPERM; | 1449 | if (!capable(CAP_NET_ADMIN)) return -EPERM; |
| 1450 | /* fall through */ | 1450 | fallthrough; |
| 1451 | case ZATM_GETPOOL: | 1451 | case ZATM_GETPOOL: |
| 1452 | { | 1452 | { |
| 1453 | struct zatm_pool_info info; | 1453 | struct zatm_pool_info info; |
| @@ -1365,7 +1365,7 @@ static void panel_process_inputs(void) · 1364 unmodified lines | |||
| 1365 | break; | 1365 | break; |
| 1366 | input->rise_timer = 0; | 1366 | input->rise_timer = 0; |
| 1367 | input->state = INPUT_ST_RISING; | 1367 | input->state = INPUT_ST_RISING; |
| 1368 | /* fall through */ | 1368 | fallthrough; |
| 1369 | case INPUT_ST_RISING: | 1369 | case INPUT_ST_RISING: |
| 1370 | if ((phys_curr & input->mask) != input->value) { | 1370 | if ((phys_curr & input->mask) != input->value) { |
| 1371 | input->state = INPUT_ST_LOW; | 1371 | input->state = INPUT_ST_LOW; |
| @@ -1378,11 +1378,11 @@ static void panel_process_inputs(void) · 6 unmodified lines | |||
| 1378 | } | 1378 | } |
| 1379 | input->high_timer = 0; | 1379 | input->high_timer = 0; |
| 1380 | input->state = INPUT_ST_HIGH; | 1380 | input->state = INPUT_ST_HIGH; |
| 1381 | /* fall through */ | 1381 | fallthrough; |
| 1382 | case INPUT_ST_HIGH: | 1382 | case INPUT_ST_HIGH: |
| 1383 | if (input_state_high(input)) | 1383 | if (input_state_high(input)) |
| 1384 | break; | 1384 | break; |
| 1385 | /* fall through */ | 1385 | fallthrough; |
| 1386 | case INPUT_ST_FALLING: | 1386 | case INPUT_ST_FALLING: |
| 1387 | input_state_falling(input); | 1387 | input_state_falling(input); |
| 1388 | } | 1388 | } |
| @@ -4264,9 +4264,9 @@ static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) · 4263 unmodified lines | |||
| 4264 | */ | 4264 | */ |
| 4265 | void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) | 4265 | void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) |
| 4266 | { | 4266 | { |
| 4267 | if (fwnode) { | 4267 | struct fwnode_handle *fn = dev->fwnode; |
| 4268 | struct fwnode_handle *fn = dev->fwnode; | ||
| 4269 | 4268 | ||
| 4269 | if (fwnode) { | ||
| 4270 | if (fwnode_is_primary(fn)) | 4270 | if (fwnode_is_primary(fn)) |
| 4271 | fn = fn->secondary; | 4271 | fn = fn->secondary; |
| 4272 | 4272 | ||
| @@ -4276,8 +4276,12 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) · 3 unmodified lines | |||
| 4276 | } | 4276 | } |
| 4277 | dev->fwnode = fwnode; | 4277 | dev->fwnode = fwnode; |
| 4278 | } else { | 4278 | } else { |
| 4279 | dev->fwnode = fwnode_is_primary(dev->fwnode) ? | 4279 | if (fwnode_is_primary(fn)) { |
| 4280 | dev->fwnode->secondary : NULL; | 4280 | dev->fwnode = fn->secondary; |
| 4281 | fn->secondary = NULL; | ||
| 4282 | } else { | ||
| 4283 | dev->fwnode = NULL; | ||
| 4284 | } | ||
| 4281 | } | 4285 | } |
| 4282 | } | 4286 | } |
| 4283 | EXPORT_SYMBOL_GPL(set_primary_fwnode); | 4287 | EXPORT_SYMBOL_GPL(set_primary_fwnode); |
| @@ -289,10 +289,10 @@ static ssize_t firmware_loading_store(struct device *dev, · 288 unmodified lines | |||
| 289 | } | 289 | } |
| 290 | break; | 290 | break; |
| 291 | } | 291 | } |
| 292 | /* fallthrough */ | 292 | fallthrough; |
| 293 | default: | 293 | default: |
| 294 | dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading); | 294 | dev_err(dev, "%s: unexpected value (%d)\n", __func__, loading); |
| 295 | /* fallthrough */ | 295 | fallthrough; |
| 296 | case -1: | 296 | case -1: |
| 297 | fw_load_abort(fw_sysfs); | 297 | fw_load_abort(fw_sysfs); |
| 298 | break; | 298 | break; |
| @@ -1606,13 +1606,17 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) · 1605 unmodified lines | |||
| 1606 | } | 1606 | } |
| 1607 | 1607 | ||
| 1608 | /* | 1608 | /* |
| 1609 | * If a device configured to wake up the system from sleep states | 1609 | * Wait for possible runtime PM transitions of the device in progress |
| 1610 | * has been suspended at run time and there's a resume request pending | 1610 | * to complete and if there's a runtime resume request pending for it, |
| 1611 | * for it, this is equivalent to the device signaling wakeup, so the | 1611 | * resume it before proceeding with invoking the system-wide suspend |
| 1612 | * system suspend operation should be aborted. | 1612 | * callbacks for it. |
| 1613 | * | ||
| 1614 | * If the system-wide suspend callbacks below change the configuration | ||
| 1615 | * of the device, they must disable runtime PM for it or otherwise | ||
| 1616 | * ensure that its runtime-resume callbacks will not be confused by that | ||
| 1617 | * change in case they are invoked going forward. | ||
| 1613 | */ | 1618 | */ |
| 1614 | if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) | 1619 | pm_runtime_barrier(dev); |
| 1615 | pm_wakeup_event(dev, 0); | ||
| 1616 | 1620 | ||
| 1617 | if (pm_wakeup_pending()) { | 1621 | if (pm_wakeup_pending()) { |
| 1618 | dev->power.direct_complete = false; | 1622 | dev->power.direct_complete = false; |
| @@ -1135,7 +1135,7 @@ noskb: if (buf) · 1134 unmodified lines | |||
| 1135 | break; | 1135 | break; |
| 1136 | } | 1136 | } |
| 1137 | bvcpy(skb, f->buf->bio, f->iter, n); | 1137 | bvcpy(skb, f->buf->bio, f->iter, n); |
| 1138 | /* fall through */ | 1138 | fallthrough; |
| 1139 | case ATA_CMD_PIO_WRITE: | 1139 | case ATA_CMD_PIO_WRITE: |
| 1140 | case ATA_CMD_PIO_WRITE_EXT: | 1140 | case ATA_CMD_PIO_WRITE_EXT: |
| 1141 | spin_lock_irq(&d->lock); | 1141 | spin_lock_irq(&d->lock); |
| @@ -1726,7 +1726,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, · 1725 unmodified lines | |||
| 1726 | /* MSch: invalidate default_params */ | 1726 | /* MSch: invalidate default_params */ |
| 1727 | default_params[drive].blocks = 0; | 1727 | default_params[drive].blocks = 0; |
| 1728 | set_capacity(floppy->disk, MAX_DISK_SIZE * 2); | 1728 | set_capacity(floppy->disk, MAX_DISK_SIZE * 2); |
| 1729 | /* Fall through */ | 1729 | fallthrough; |
| 1730 | case FDFMTEND: | 1730 | case FDFMTEND: |
| 1731 | case FDFLUSH: | 1731 | case FDFLUSH: |
| 1732 | /* invalidate the buffer track to force a reread */ | 1732 | /* invalidate the buffer track to force a reread */ |
| @@ -1733,7 +1733,7 @@ static inline void __drbd_chk_io_error_(struct drbd_device *device, · 1732 unmodified lines | |||
| 1733 | _drbd_set_state(_NS(device, disk, D_INCONSISTENT), CS_HARD, NULL); | 1733 | _drbd_set_state(_NS(device, disk, D_INCONSISTENT), CS_HARD, NULL); |
| 1734 | break; | 1734 | break; |
| 1735 | } | 1735 | } |
| 1736 | /* fall through - for DRBD_META_IO_ERROR or DRBD_FORCE_DETACH */ | 1736 | fallthrough; /* for DRBD_META_IO_ERROR or DRBD_FORCE_DETACH */ |
| 1737 | case EP_DETACH: | 1737 | case EP_DETACH: |
| 1738 | case EP_CALL_HELPER: | 1738 | case EP_CALL_HELPER: |
| 1739 | /* Remember whether we saw a READ or WRITE error. | 1739 | /* Remember whether we saw a READ or WRITE error. |
| @@ -430,7 +430,7 @@ int drbd_thread_start(struct drbd_thread *thi) · 429 unmodified lines | |||
| 430 | thi->t_state = RESTARTING; | 430 | thi->t_state = RESTARTING; |
| 431 | drbd_info(resource, "Restarting %s thread (from %s [%d])\n", | 431 | drbd_info(resource, "Restarting %s thread (from %s [%d])\n", |
| 432 | thi->name, current->comm, current->pid); | 432 | thi->name, current->comm, current->pid); |
| 433 | /* fall through */ | 433 | fallthrough; |
| 434 | case RUNNING: | 434 | case RUNNING: |
| 435 | case RESTARTING: | 435 | case RESTARTING: |
| 436 | default: | 436 | default: |
| @@ -3883,7 +3883,7 @@ static int nla_put_status_info(struct sk_buff *skb, struct drbd_device *device, · 3882 unmodified lines | |||
| 3883 | if (nla_put_u32(skb, T_helper_exit_code, | 3883 | if (nla_put_u32(skb, T_helper_exit_code, |
| 3884 | sib->helper_exit_code)) | 3884 | sib->helper_exit_code)) |
| 3885 | goto nla_put_failure; | 3885 | goto nla_put_failure; |
| 3886 | /* fall through */ | 3886 | fallthrough; |
| 3887 | case SIB_HELPER_PRE: | 3887 | case SIB_HELPER_PRE: |
| 3888 | if (nla_put_string(skb, T_helper, sib->helper_name)) | 3888 | if (nla_put_string(skb, T_helper, sib->helper_name)) |
| 3889 | goto nla_put_failure; | 3889 | goto nla_put_failure; |
| @@ -1797,7 +1797,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf · 1796 unmodified lines | |||
| 1797 | break; | 1797 | break; |
| 1798 | else | 1798 | else |
| 1799 | drbd_warn(connection, "Allocation of an epoch failed, slowing down\n"); | 1799 | drbd_warn(connection, "Allocation of an epoch failed, slowing down\n"); |
| 1800 | /* Fall through */ | 1800 | fallthrough; |
| 1801 | 1801 | ||
| 1802 | case WO_BDEV_FLUSH: | 1802 | case WO_BDEV_FLUSH: |
| 1803 | case WO_DRAIN_IO: | 1803 | case WO_DRAIN_IO: |
| @@ -2917,7 +2917,7 @@ static int receive_DataRequest(struct drbd_connection *connection, struct packet · 1113 unmodified lines | |||
| 2917 | then we would do something smarter here than reading | 2917 | then we would do something smarter here than reading |
| 2918 | the block... */ | 2918 | the block... */ |
| 2919 | peer_req->flags |= EE_RS_THIN_REQ; | 2919 | peer_req->flags |= EE_RS_THIN_REQ; |
| 2920 | /* fall through */ | 2920 | fallthrough; |
| 2921 | case P_RS_DATA_REQUEST: | 2921 | case P_RS_DATA_REQUEST: |
| 2922 | peer_req->w.cb = w_e_end_rsdata_req; | 2922 | peer_req->w.cb = w_e_end_rsdata_req; |
| 2923 | fault_type = DRBD_FAULT_RS_RD; | 2923 | fault_type = DRBD_FAULT_RS_RD; |
| @@ -3083,7 +3083,7 @@ static int drbd_asb_recover_0p(struct drbd_peer_device *peer_device) __must_hold · 159 unmodified lines | |||
| 3083 | rv = 1; | 3083 | rv = 1; |
| 3084 | break; | 3084 | break; |
| 3085 | } | 3085 | } |
| 3086 | /* Else fall through - to one of the other strategies... */ | 3086 | fallthrough; /* to one of the other strategies */ |
| 3087 | case ASB_DISCARD_OLDER_PRI: | 3087 | case ASB_DISCARD_OLDER_PRI: |
| 3088 | if (self == 0 && peer == 1) { | 3088 | if (self == 0 && peer == 1) { |
| 3089 | rv = 1; | 3089 | rv = 1; |
| @@ -3096,7 +3096,7 @@ static int drbd_asb_recover_0p(struct drbd_peer_device *peer_device) __must_hold · 6 unmodified lines | |||
| 3096 | /* Else fall through to one of the other strategies... */ | 3096 | /* Else fall through to one of the other strategies... */ |
| 3097 | drbd_warn(device, "Discard younger/older primary did not find a decision\n" | 3097 | drbd_warn(device, "Discard younger/older primary did not find a decision\n" |
| 3098 | "Using discard-least-changes instead\n"); | 3098 | "Using discard-least-changes instead\n"); |
| 3099 | /* fall through */ | 3099 | fallthrough; |
| 3100 | case ASB_DISCARD_ZERO_CHG: | 3100 | case ASB_DISCARD_ZERO_CHG: |
| 3101 | if (ch_peer == 0 && ch_self == 0) { | 3101 | if (ch_peer == 0 && ch_self == 0) { |
| 3102 | rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) | 3102 | rv = test_bit(RESOLVE_CONFLICTS, &peer_device->connection->flags) |
| @@ -3108,7 +3108,7 @@ static int drbd_asb_recover_0p(struct drbd_peer_device *peer_device) __must_hold · 5 unmodified lines | |||
| 3108 | } | 3108 | } |
| 3109 | if (after_sb_0p == ASB_DISCARD_ZERO_CHG) | 3109 | if (after_sb_0p == ASB_DISCARD_ZERO_CHG) |
| 3110 | break; | 3110 | break; |
| 3111 | /* else, fall through */ | 3111 | fallthrough; |
| 3112 | case ASB_DISCARD_LEAST_CHG: | 3112 | case ASB_DISCARD_LEAST_CHG: |
| 3113 | if (ch_self < ch_peer) | 3113 | if (ch_self < ch_peer) |
| 3114 | rv = -1; | 3114 | rv = -1; |
| @@ -3608,7 +3608,7 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device, · 493 unmodified lines | |||
| 3608 | switch (rr_conflict) { | 3608 | switch (rr_conflict) { |
| 3609 | case ASB_CALL_HELPER: | 3609 | case ASB_CALL_HELPER: |
| 3610 | drbd_khelper(device, "pri-lost"); | 3610 | drbd_khelper(device, "pri-lost"); |
| 3611 | /* fall through */ | 3611 | fallthrough; |
| 3612 | case ASB_DISCONNECT: | 3612 | case ASB_DISCONNECT: |
| 3613 | drbd_err(device, "I shall become SyncTarget, but I am primary!\n"); | 3613 | drbd_err(device, "I shall become SyncTarget, but I am primary!\n"); |
| 3614 | return C_MASK; | 3614 | return C_MASK; |
| @@ -611,7 +611,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, · 610 unmodified lines | |||
| 611 | drbd_set_out_of_sync(device, req->i.sector, req->i.size); | 611 | drbd_set_out_of_sync(device, req->i.sector, req->i.size); |
| 612 | drbd_report_io_error(device, req); | 612 | drbd_report_io_error(device, req); |
| 613 | __drbd_chk_io_error(device, DRBD_READ_ERROR); | 613 | __drbd_chk_io_error(device, DRBD_READ_ERROR); |
| 614 | /* fall through. */ | 614 | fallthrough; |
| 615 | case READ_AHEAD_COMPLETED_WITH_ERROR: | 615 | case READ_AHEAD_COMPLETED_WITH_ERROR: |
| 616 | /* it is legal to fail read-ahead, no __drbd_chk_io_error in that case. */ | 616 | /* it is legal to fail read-ahead, no __drbd_chk_io_error in that case. */ |
| 617 | mod_rq_state(req, m, RQ_LOCAL_PENDING, RQ_LOCAL_COMPLETED); | 617 | mod_rq_state(req, m, RQ_LOCAL_PENDING, RQ_LOCAL_COMPLETED); |
| @@ -836,7 +836,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, · 218 unmodified lines | |||
| 836 | } /* else: FIXME can this happen? */ | 836 | } /* else: FIXME can this happen? */ |
| 837 | break; | 837 | break; |
| 838 | } | 838 | } |
| 839 | /* else, fall through - to BARRIER_ACKED */ | 839 | fallthrough; /* to BARRIER_ACKED */ |
| 840 | 840 | ||
| 841 | case BARRIER_ACKED: | 841 | case BARRIER_ACKED: |
| 842 | /* barrier ack for READ requests does not make sense */ | 842 | /* barrier ack for READ requests does not make sense */ |
| @@ -1680,7 +1680,7 @@ static void recal_interrupt(void) · 1679 unmodified lines | |||
| 1680 | clear_bit(FD_DISK_NEWCHANGE_BIT, | 1680 | clear_bit(FD_DISK_NEWCHANGE_BIT, |
| 1681 | &drive_state[current_drive].flags); | 1681 | &drive_state[current_drive].flags); |
| 1682 | drive_state[current_drive].select_date = jiffies; | 1682 | drive_state[current_drive].select_date = jiffies; |
| 1683 | /* fall through */ | 1683 | fallthrough; |
| 1684 | default: | 1684 | default: |
| 1685 | debugt(__func__, "default"); | 1685 | debugt(__func__, "default"); |
| 1686 | /* Recalibrate moves the head by at | 1686 | /* Recalibrate moves the head by at |
| @@ -3592,7 +3592,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int · 1905 unmodified lines | |||
| 3592 | if (poll_drive(true, FD_RAW_NEED_DISK) == -EINTR) | 3592 | if (poll_drive(true, FD_RAW_NEED_DISK) == -EINTR) |
| 3593 | return -EINTR; | 3593 | return -EINTR; |
| 3594 | process_fd_request(); | 3594 | process_fd_request(); |
| 3595 | /* fall through */ | 3595 | fallthrough; |
| 3596 | case FDGETDRVSTAT: | 3596 | case FDGETDRVSTAT: |
| 3597 | outparam = &drive_state[drive]; | 3597 | outparam = &drive_state[drive]; |
| 3598 | break; | 3598 | break; |
| @@ -878,6 +878,7 @@ static void loop_config_discard(struct loop_device *lo) · 877 unmodified lines | |||
| 878 | struct file *file = lo->lo_backing_file; | 878 | struct file *file = lo->lo_backing_file; |
| 879 | struct inode *inode = file->f_mapping->host; | 879 | struct inode *inode = file->f_mapping->host; |
| 880 | struct request_queue *q = lo->lo_queue; | 880 | struct request_queue *q = lo->lo_queue; |
| 881 | u32 granularity, max_discard_sectors; | ||
| 881 | 882 | ||
| 882 | /* | 883 | /* |
| 883 | * If the backing device is a block device, mirror its zeroing | 884 | * If the backing device is a block device, mirror its zeroing |
| @@ -890,11 +891,10 @@ static void loop_config_discard(struct loop_device *lo) · 6 unmodified lines | |||
| 890 | struct request_queue *backingq; | 891 | struct request_queue *backingq; |
| 891 | 892 | ||
| 892 | backingq = bdev_get_queue(inode->i_bdev); | 893 | backingq = bdev_get_queue(inode->i_bdev); |
| 893 | blk_queue_max_discard_sectors(q, | ||
| 894 | backingq->limits.max_write_zeroes_sectors); | ||
| 895 | 894 | ||
| 896 | blk_queue_max_write_zeroes_sectors(q, | 895 | max_discard_sectors = backingq->limits.max_write_zeroes_sectors; |
| 897 | backingq->limits.max_write_zeroes_sectors); | 896 | granularity = backingq->limits.discard_granularity ?: |
| 897 | queue_physical_block_size(backingq); | ||
| 898 | 898 | ||
| 899 | /* | 899 | /* |
| 900 | * We use punch hole to reclaim the free space used by the | 900 | * We use punch hole to reclaim the free space used by the |
| @@ -903,23 +903,26 @@ static void loop_config_discard(struct loop_device *lo) · 2 unmodified lines | |||
| 903 | * useful information. | 903 | * useful information. |
| 904 | */ | 904 | */ |
| 905 | } else if (!file->f_op->fallocate || lo->lo_encrypt_key_size) { | 905 | } else if (!file->f_op->fallocate || lo->lo_encrypt_key_size) { |
| 906 | q->limits.discard_granularity = 0; | 906 | max_discard_sectors = 0; |
| 907 | q->limits.discard_alignment = 0; | 907 | granularity = 0; |
| 908 | blk_queue_max_discard_sectors(q, 0); | ||
| 909 | blk_queue_max_write_zeroes_sectors(q, 0); | ||
| 910 | 908 | ||
| 911 | } else { | 909 | } else { |
| 912 | q->limits.discard_granularity = inode->i_sb->s_blocksize; | 910 | max_discard_sectors = UINT_MAX >> 9; |
| 913 | q->limits.discard_alignment = 0; | 911 | granularity = inode->i_sb->s_blocksize; |
| 914 | |||
| 915 | blk_queue_max_discard_sectors(q, UINT_MAX >> 9); | ||
| 916 | blk_queue_max_write_zeroes_sectors(q, UINT_MAX >> 9); | ||
| 917 | } | 912 | } |
| 918 | 913 | ||
| 919 | if (q->limits.max_write_zeroes_sectors) | 914 | if (max_discard_sectors) { |
| 915 | q->limits.discard_granularity = granularity; | ||
| 916 | blk_queue_max_discard_sectors(q, max_discard_sectors); | ||
| 917 | blk_queue_max_write_zeroes_sectors(q, max_discard_sectors); | ||
| 920 | blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); | 918 | blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); |
| 921 | else | 919 | } else { |
| 920 | q->limits.discard_granularity = 0; | ||
| 921 | blk_queue_max_discard_sectors(q, 0); | ||
| 922 | blk_queue_max_write_zeroes_sectors(q, 0); | ||
| 922 | blk_queue_flag_clear(QUEUE_FLAG_DISCARD, q); | 923 | blk_queue_flag_clear(QUEUE_FLAG_DISCARD, q); |
| 924 | } | ||
| 925 | q->limits.discard_alignment = 0; | ||
| 923 | } | 926 | } |
| 924 | 927 | ||
| 925 | static void loop_unprepare_queue(struct loop_device *lo) | 928 | static void loop_unprepare_queue(struct loop_device *lo) |
| @@ -1111,8 +1114,6 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, · 185 unmodified lines | |||
| 1111 | mapping = file->f_mapping; | 1114 | mapping = file->f_mapping; |
| 1112 | inode = mapping->host; | 1115 | inode = mapping->host; |
| 1113 | 1116 | ||
| 1114 | size = get_loop_size(lo, file); | ||
| 1115 | |||
| 1116 | if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) { | 1117 | if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) { |
| 1117 | error = -EINVAL; | 1118 | error = -EINVAL; |
| 1118 | goto out_unlock; | 1119 | goto out_unlock; |
| @@ -1162,6 +1163,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, · 43 unmodified lines | |||
| 1162 | loop_update_rotational(lo); | 1163 | loop_update_rotational(lo); |
| 1163 | loop_update_dio(lo); | 1164 | loop_update_dio(lo); |
| 1164 | loop_sysfs_init(lo); | 1165 | loop_sysfs_init(lo); |
| 1166 | |||
| 1167 | size = get_loop_size(lo, file); | ||
| 1165 | loop_set_size(lo, size); | 1168 | loop_set_size(lo, size); |
| 1166 | 1169 | ||
| 1167 | set_blocksize(bdev, S_ISBLK(inode->i_mode) ? | 1170 | set_blocksize(bdev, S_ISBLK(inode->i_mode) ? |
| @@ -1719,7 +1722,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode, · 551 unmodified lines | |||
| 1719 | case LOOP_SET_BLOCK_SIZE: | 1722 | case LOOP_SET_BLOCK_SIZE: |
| 1720 | if (!(mode & FMODE_WRITE) && !capable(CAP_SYS_ADMIN)) | 1723 | if (!(mode & FMODE_WRITE) && !capable(CAP_SYS_ADMIN)) |
| 1721 | return -EPERM; | 1724 | return -EPERM; |
| 1722 | /* Fall through */ | 1725 | fallthrough; |
| 1723 | default: | 1726 | default: |
| 1724 | err = lo_simple_ioctl(lo, cmd, arg); | 1727 | err = lo_simple_ioctl(lo, cmd, arg); |
| 1725 | break; | 1728 | break; |
| @@ -1867,7 +1870,7 @@ static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode, · 141 unmodified lines | |||
| 1867 | case LOOP_SET_STATUS64: | 1870 | case LOOP_SET_STATUS64: |
| 1868 | case LOOP_CONFIGURE: | 1871 | case LOOP_CONFIGURE: |
| 1869 | arg = (unsigned long) compat_ptr(arg); | 1872 | arg = (unsigned long) compat_ptr(arg); |
| 1870 | /* fall through */ | 1873 | fallthrough; |
| 1871 | case LOOP_SET_FD: | 1874 | case LOOP_SET_FD: |
| 1872 | case LOOP_CHANGE_FD: | 1875 | case LOOP_CHANGE_FD: |
| 1873 | case LOOP_SET_BLOCK_SIZE: | 1876 | case LOOP_SET_BLOCK_SIZE: |
| @@ -1363,6 +1363,8 @@ static void nbd_set_cmd_timeout(struct nbd_device *nbd, u64 timeout) · 1362 unmodified lines | |||
| 1363 | nbd->tag_set.timeout = timeout * HZ; | 1363 | nbd->tag_set.timeout = timeout * HZ; |
| 1364 | if (timeout) | 1364 | if (timeout) |
| 1365 | blk_queue_rq_timeout(nbd->disk->queue, timeout * HZ); | 1365 | blk_queue_rq_timeout(nbd->disk->queue, timeout * HZ); |
| 1366 | else | ||
| 1367 | blk_queue_rq_timeout(nbd->disk->queue, 30 * HZ); | ||
| 1366 | } | 1368 | } |
| 1367 | 1369 | ||
| 1368 | /* Must be called with config_lock held */ | 1370 | /* Must be called with config_lock held */ |
| @@ -1147,7 +1147,7 @@ static int null_handle_rq(struct nullb_cmd *cmd) · 1146 unmodified lines | |||
| 1147 | len = bvec.bv_len; | 1147 | len = bvec.bv_len; |
| 1148 | err = null_transfer(nullb, bvec.bv_page, len, bvec.bv_offset, | 1148 | err = null_transfer(nullb, bvec.bv_page, len, bvec.bv_offset, |
| 1149 | op_is_write(req_op(rq)), sector, | 1149 | op_is_write(req_op(rq)), sector, |
| 1150 | req_op(rq) & REQ_FUA); | 1150 | rq->cmd_flags & REQ_FUA); |
| 1151 | if (err) { | 1151 | if (err) { |
| 1152 | spin_unlock_irq(&nullb->lock); | 1152 | spin_unlock_irq(&nullb->lock); |
| 1153 | return err; | 1153 | return err; |
| @@ -440,7 +440,7 @@ static void run_fsm(void) · 439 unmodified lines | |||
| 440 | pd_claimed = 1; | 440 | pd_claimed = 1; |
| 441 | if (!pi_schedule_claimed(pi_current, run_fsm)) | 441 | if (!pi_schedule_claimed(pi_current, run_fsm)) |
| 442 | return; | 442 | return; |
| 443 | /* fall through */ | 443 | fallthrough; |
| 444 | case 1: | 444 | case 1: |
| 445 | pd_claimed = 2; | 445 | pd_claimed = 2; |
| 446 | pi_current->proto->connect(pi_current); | 446 | pi_current->proto->connect(pi_current); |
| @@ -465,7 +465,7 @@ static void run_fsm(void) · 18 unmodified lines | |||
| 465 | if (stop) | 465 | if (stop) |
| 466 | return; | 466 | return; |
| 467 | } | 467 | } |
| 468 | /* fall through */ | 468 | fallthrough; |
| 469 | case Hold: | 469 | case Hold: |
| 470 | schedule_fsm(); | 470 | schedule_fsm(); |
| 471 | return; | 471 | return; |
| @@ -2641,7 +2641,7 @@ static int pkt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, · 2640 unmodified lines | |||
| 2641 | */ | 2641 | */ |
| 2642 | if (pd->refcnt == 1) | 2642 | if (pd->refcnt == 1) |
| 2643 | pkt_lock_door(pd, 0); | 2643 | pkt_lock_door(pd, 0); |
| 2644 | /* fall through */ | 2644 | fallthrough; |
| 2645 | /* | 2645 | /* |
| 2646 | * forward selected CDROM ioctls to CD-ROM, for UDF | 2646 | * forward selected CDROM ioctls to CD-ROM, for UDF |
| 2647 | */ | 2647 | */ |
| @@ -3293,7 +3293,7 @@ again: · 3292 unmodified lines | |||
| 3293 | case __RBD_OBJ_COPYUP_OBJECT_MAPS: | 3293 | case __RBD_OBJ_COPYUP_OBJECT_MAPS: |
| 3294 | if (!pending_result_dec(&obj_req->pending, result)) | 3294 | if (!pending_result_dec(&obj_req->pending, result)) |
| 3295 | return false; | 3295 | return false; |
| 3296 | /* fall through */ | 3296 | fallthrough; |
| 3297 | case RBD_OBJ_COPYUP_OBJECT_MAPS: | 3297 | case RBD_OBJ_COPYUP_OBJECT_MAPS: |
| 3298 | if (*result) { | 3298 | if (*result) { |
| 3299 | rbd_warn(rbd_dev, "snap object map update failed: %d", | 3299 | rbd_warn(rbd_dev, "snap object map update failed: %d", |
| @@ -3312,7 +3312,7 @@ again: · 12 unmodified lines | |||
| 3312 | case __RBD_OBJ_COPYUP_WRITE_OBJECT: | 3312 | case __RBD_OBJ_COPYUP_WRITE_OBJECT: |
| 3313 | if (!pending_result_dec(&obj_req->pending, result)) | 3313 | if (!pending_result_dec(&obj_req->pending, result)) |
| 3314 | return false; | 3314 | return false; |
| 3315 | /* fall through */ | 3315 | fallthrough; |
| 3316 | case RBD_OBJ_COPYUP_WRITE_OBJECT: | 3316 | case RBD_OBJ_COPYUP_WRITE_OBJECT: |
| 3317 | return true; | 3317 | return true; |
| 3318 | default: | 3318 | default: |
| @@ -3399,7 +3399,7 @@ again: · 80 unmodified lines | |||
| 3399 | case __RBD_OBJ_WRITE_COPYUP: | 3399 | case __RBD_OBJ_WRITE_COPYUP: |
| 3400 | if (!rbd_obj_advance_copyup(obj_req, result)) | 3400 | if (!rbd_obj_advance_copyup(obj_req, result)) |
| 3401 | return false; | 3401 | return false; |
| 3402 | /* fall through */ | 3402 | fallthrough; |
| 3403 | case RBD_OBJ_WRITE_COPYUP: | 3403 | case RBD_OBJ_WRITE_COPYUP: |
| 3404 | if (*result) { | 3404 | if (*result) { |
| 3405 | rbd_warn(rbd_dev, "copyup failed: %d", *result); | 3405 | rbd_warn(rbd_dev, "copyup failed: %d", *result); |
| @@ -3592,7 +3592,7 @@ again: · 186 unmodified lines | |||
| 3592 | case __RBD_IMG_OBJECT_REQUESTS: | 3592 | case __RBD_IMG_OBJECT_REQUESTS: |
| 3593 | if (!pending_result_dec(&img_req->pending, result)) | 3593 | if (!pending_result_dec(&img_req->pending, result)) |
| 3594 | return false; | 3594 | return false; |
| 3595 | /* fall through */ | 3595 | fallthrough; |
| 3596 | case RBD_IMG_OBJECT_REQUESTS: | 3596 | case RBD_IMG_OBJECT_REQUESTS: |
| 3597 | return true; | 3597 | return true; |
| 3598 | default: | 3598 | default: |
| @@ -148,7 +148,8 @@ static int process_rdma(struct rtrs_srv *sess, · 147 unmodified lines | |||
| 148 | /* Generate bio with pages pointing to the rdma buffer */ | 148 | /* Generate bio with pages pointing to the rdma buffer */ |
| 149 | bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL); | 149 | bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL); |
| 150 | if (IS_ERR(bio)) { | 150 | if (IS_ERR(bio)) { |
| 151 | rnbd_srv_err(sess_dev, "Failed to generate bio, err: %ld\n", PTR_ERR(bio)); | 151 | err = PTR_ERR(bio); |
| 152 | rnbd_srv_err(sess_dev, "Failed to generate bio, err: %d\n", err); | ||
| 152 | goto sess_dev_put; | 153 | goto sess_dev_put; |
| 153 | } | 154 | } |
| 154 | 155 | ||
| @@ -425,7 +425,7 @@ static void card_state_change(struct rsxx_cardinfo *card, · 424 unmodified lines | |||
| 425 | * Fall through so the DMA devices can be attached and | 425 | * Fall through so the DMA devices can be attached and |
| 426 | * the user can attempt to pull off their data. | 426 | * the user can attempt to pull off their data. |
| 427 | */ | 427 | */ |
| 428 | /* fall through */ | 428 | fallthrough; |
| 429 | case CARD_STATE_GOOD: | 429 | case CARD_STATE_GOOD: |
| 430 | st = rsxx_get_card_size8(card, &card->size8); | 430 | st = rsxx_get_card_size8(card, &card->size8); |
| 431 | if (st) | 431 | if (st) |
| @@ -1436,7 +1436,7 @@ static void skd_resolve_req_exception(struct skd_device *skdev, · 1435 unmodified lines | |||
| 1436 | blk_mq_requeue_request(req, true); | 1436 | blk_mq_requeue_request(req, true); |
| 1437 | break; | 1437 | break; |
| 1438 | } | 1438 | } |
| 1439 | /* fall through */ | 1439 | fallthrough; |
| 1440 | 1440 | ||
| 1441 | case SKD_CHECK_STATUS_REPORT_ERROR: | 1441 | case SKD_CHECK_STATUS_REPORT_ERROR: |
| 1442 | default: | 1442 | default: |
| @@ -126,16 +126,31 @@ static int virtblk_setup_discard_write_zeroes(struct request *req, bool unmap) · 125 unmodified lines | |||
| 126 | if (!range) | 126 | if (!range) |
| 127 | return -ENOMEM; | 127 | return -ENOMEM; |
| 128 | 128 | ||
| 129 | __rq_for_each_bio(bio, req) { | 129 | /* |
| 130 | u64 sector = bio->bi_iter.bi_sector; | 130 | * Single max discard segment means multi-range discard isn't |
| 131 | u32 num_sectors = bio->bi_iter.bi_size >> SECTOR_SHIFT; | 131 | * supported, and block layer only runs contiguity merge like |
| 132 | 132 | * normal RW request. So we can't reply on bio for retrieving | |
| 133 | range[n].flags = cpu_to_le32(flags); | 133 | * each range info. |
| 134 | range[n].num_sectors = cpu_to_le32(num_sectors); | 134 | */ |
| 135 | range[n].sector = cpu_to_le64(sector); | 135 | if (queue_max_discard_segments(req->q) == 1) { |
| 136 | n++; | 136 | range[0].flags = cpu_to_le32(flags); |
| 137 | range[0].num_sectors = cpu_to_le32(blk_rq_sectors(req)); | ||
| 138 | range[0].sector = cpu_to_le64(blk_rq_pos(req)); | ||
| 139 | n = 1; | ||
| 140 | } else { | ||
| 141 | __rq_for_each_bio(bio, req) { | ||
| 142 | u64 sector = bio->bi_iter.bi_sector; | ||
| 143 | u32 num_sectors = bio->bi_iter.bi_size >> SECTOR_SHIFT; | ||
| 144 | |||
| 145 | range[n].flags = cpu_to_le32(flags); | ||
| 146 | range[n].num_sectors = cpu_to_le32(num_sectors); | ||
| 147 | range[n].sector = cpu_to_le64(sector); | ||
| 148 | n++; | ||
| 149 | } | ||
| 137 | } | 150 | } |
| 138 | 151 | ||
| 152 | WARN_ON_ONCE(n != segments); | ||
| 153 | |||
| 139 | req->special_vec.bv_page = virt_to_page(range); | 154 | req->special_vec.bv_page = virt_to_page(range); |
| 140 | req->special_vec.bv_offset = offset_in_page(range); | 155 | req->special_vec.bv_offset = offset_in_page(range); |
| 141 | req->special_vec.bv_len = sizeof(*range) * segments; | 156 | req->special_vec.bv_len = sizeof(*range) * segments; |
| @@ -1260,7 +1260,7 @@ static int dispatch_rw_block_io(struct xen_blkif_ring *ring, · 1259 unmodified lines | |||
| 1260 | break; | 1260 | break; |
| 1261 | case BLKIF_OP_WRITE_BARRIER: | 1261 | case BLKIF_OP_WRITE_BARRIER: |
| 1262 | drain = true; | 1262 | drain = true; |
| 1263 | /* fall through */ | 1263 | fallthrough; |
| 1264 | case BLKIF_OP_FLUSH_DISKCACHE: | 1264 | case BLKIF_OP_FLUSH_DISKCACHE: |
| 1265 | ring->st_f_req++; | 1265 | ring->st_f_req++; |
| 1266 | operation = REQ_OP_WRITE; | 1266 | operation = REQ_OP_WRITE; |
| @@ -843,7 +843,7 @@ static void frontend_changed(struct xenbus_device *dev, · 842 unmodified lines | |||
| 843 | xenbus_switch_state(dev, XenbusStateClosed); | 843 | xenbus_switch_state(dev, XenbusStateClosed); |
| 844 | if (xenbus_dev_is_online(dev)) | 844 | if (xenbus_dev_is_online(dev)) |
| 845 | break; | 845 | break; |
| 846 | /* fall through */ | 846 | fallthrough; |
| 847 | /* if not online */ | 847 | /* if not online */ |
| 848 | case XenbusStateUnknown: | 848 | case XenbusStateUnknown: |
| 849 | /* implies xen_blkif_disconnect() via xen_blkbk_remove() */ | 849 | /* implies xen_blkif_disconnect() via xen_blkbk_remove() */ |
| @@ -1403,7 +1403,6 @@ static enum blk_req_status blkif_rsp_to_req_status(int rsp) · 1402 unmodified lines | |||
| 1403 | case BLKIF_RSP_EOPNOTSUPP: | 1403 | case BLKIF_RSP_EOPNOTSUPP: |
| 1404 | return REQ_EOPNOTSUPP; | 1404 | return REQ_EOPNOTSUPP; |
| 1405 | case BLKIF_RSP_ERROR: | 1405 | case BLKIF_RSP_ERROR: |
| 1406 | /* Fallthrough. */ | ||
| 1407 | default: | 1406 | default: |
| 1408 | return REQ_ERROR; | 1407 | return REQ_ERROR; |
| 1409 | } | 1408 | } |
| @@ -1643,7 +1642,7 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id) · 233 unmodified lines | |||
| 1643 | info->feature_flush = 0; | 1642 | info->feature_flush = 0; |
| 1644 | xlvbd_flush(info); | 1643 | xlvbd_flush(info); |
| 1645 | } | 1644 | } |
| 1646 | /* fall through */ | 1645 | fallthrough; |
| 1647 | case BLKIF_OP_READ: | 1646 | case BLKIF_OP_READ: |
| 1648 | case BLKIF_OP_WRITE: | 1647 | case BLKIF_OP_WRITE: |
| 1649 | if (unlikely(bret->status != BLKIF_RSP_OKAY)) | 1648 | if (unlikely(bret->status != BLKIF_RSP_OKAY)) |
| @@ -2484,7 +2483,7 @@ static void blkback_changed(struct xenbus_device *dev, · 834 unmodified lines | |||
| 2484 | case XenbusStateClosed: | 2483 | case XenbusStateClosed: |
| 2485 | if (dev->state == XenbusStateClosed) | 2484 | if (dev->state == XenbusStateClosed) |
| 2486 | break; | 2485 | break; |
| 2487 | /* fall through */ | 2486 | fallthrough; |
| 2488 | case XenbusStateClosing: | 2487 | case XenbusStateClosing: |
| 2489 | if (info) | 2488 | if (info) |
| 2490 | blkfront_closing(info); | 2489 | blkfront_closing(info); |
| @@ -1849,7 +1849,7 @@ static int sysc_clockdomain_init(struct sysc *ddata) · 1848 unmodified lines | |||
| 1849 | switch (ddata->nr_clocks) { | 1849 | switch (ddata->nr_clocks) { |
| 1850 | case 2: | 1850 | case 2: |
| 1851 | ick = ddata->clocks[SYSC_ICK]; | 1851 | ick = ddata->clocks[SYSC_ICK]; |
| 1852 | /* fallthrough */ | 1852 | fallthrough; |
| 1853 | case 1: | 1853 | case 1: |
| 1854 | fck = ddata->clocks[SYSC_FCK]; | 1854 | fck = ddata->clocks[SYSC_FCK]; |
| 1855 | break; | 1855 | break; |
| @@ -357,7 +357,7 @@ found: · 356 unmodified lines | |||
| 357 | default: | 357 | default: |
| 358 | break; | 358 | break; |
| 359 | } | 359 | } |
| 360 | /*FALLTHROUGH*/ | 360 | fallthrough; |
| 361 | default: | 361 | default: |
| 362 | bridge->driver = &ali_generic_bridge; | 362 | bridge->driver = &ali_generic_bridge; |
| 363 | } | 363 | } |
| @@ -92,8 +92,7 @@ static int ingenic_rng_probe(struct platform_device *pdev) · 91 unmodified lines | |||
| 92 | priv->base = devm_platform_ioremap_resource(pdev, 0); | 92 | priv->base = devm_platform_ioremap_resource(pdev, 0); |
| 93 | if (IS_ERR(priv->base)) { | 93 | if (IS_ERR(priv->base)) { |
| 94 | pr_err("%s: Failed to map RNG registers\n", __func__); | 94 | pr_err("%s: Failed to map RNG registers\n", __func__); |
| 95 | ret = PTR_ERR(priv->base); | 95 | return PTR_ERR(priv->base); |
| 96 | goto err_free_rng; | ||
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | priv->version = (enum ingenic_rng_version)of_device_get_match_data(&pdev->dev); | 98 | priv->version = (enum ingenic_rng_version)of_device_get_match_data(&pdev->dev); |
| @@ -106,17 +105,13 @@ static int ingenic_rng_probe(struct platform_device *pdev) · 6 unmodified lines | |||
| 106 | ret = hwrng_register(&priv->rng); | 105 | ret = hwrng_register(&priv->rng); |
| 107 | if (ret) { | 106 | if (ret) { |
| 108 | dev_err(&pdev->dev, "Failed to register hwrng\n"); | 107 | dev_err(&pdev->dev, "Failed to register hwrng\n"); |
| 109 | goto err_free_rng; | 108 | return ret; |
| 110 | } | 109 | } |
| 111 | 110 | ||
| 112 | platform_set_drvdata(pdev, priv); | 111 | platform_set_drvdata(pdev, priv); |
| 113 | 112 | ||
| 114 | dev_info(&pdev->dev, "Ingenic RNG driver registered\n"); | 113 | dev_info(&pdev->dev, "Ingenic RNG driver registered\n"); |
| 115 | return 0; | 114 | return 0; |
| 116 | |||
| 117 | err_free_rng: | ||
| 118 | kfree(priv); | ||
| 119 | return ret; | ||
| 120 | } | 115 | } |
| 121 | 116 | ||
| 122 | static int ingenic_rng_remove(struct platform_device *pdev) | 117 | static int ingenic_rng_remove(struct platform_device *pdev) |
| @@ -99,7 +99,7 @@ static void kcs_bmc_handle_data(struct kcs_bmc *kcs_bmc) · 98 unmodified lines | |||
| 99 | switch (kcs_bmc->phase) { | 99 | switch (kcs_bmc->phase) { |
| 100 | case KCS_PHASE_WRITE_START: | 100 | case KCS_PHASE_WRITE_START: |
| 101 | kcs_bmc->phase = KCS_PHASE_WRITE_DATA; | 101 | kcs_bmc->phase = KCS_PHASE_WRITE_DATA; |
| 102 | /* fall through */ | 102 | fallthrough; |
| 103 | 103 | ||
| 104 | case KCS_PHASE_WRITE_DATA: | 104 | case KCS_PHASE_WRITE_DATA: |
| 105 | if (kcs_bmc->data_in_idx < KCS_MSG_BUFSIZ) { | 105 | if (kcs_bmc->data_in_idx < KCS_MSG_BUFSIZ) { |
| @@ -734,7 +734,7 @@ static long lp_ioctl(struct file *file, unsigned int cmd, · 733 unmodified lines | |||
| 734 | ret = lp_set_timeout32(minor, (void __user *)arg); | 734 | ret = lp_set_timeout32(minor, (void __user *)arg); |
| 735 | break; | 735 | break; |
| 736 | } | 736 | } |
| 737 | /* fall through - for 64-bit */ | 737 | fallthrough; /* for 64-bit */ |
| 738 | case LPSETTIMEOUT_NEW: | 738 | case LPSETTIMEOUT_NEW: |
| 739 | ret = lp_set_timeout64(minor, (void __user *)arg); | 739 | ret = lp_set_timeout64(minor, (void __user *)arg); |
| 740 | break; | 740 | break; |
| @@ -762,7 +762,7 @@ static long lp_compat_ioctl(struct file *file, unsigned int cmd, · 21 unmodified lines | |||
| 762 | ret = lp_set_timeout32(minor, (void __user *)arg); | 762 | ret = lp_set_timeout32(minor, (void __user *)arg); |
| 763 | break; | 763 | break; |
| 764 | } | 764 | } |
| 765 | /* fall through - for x32 mode */ | 765 | fallthrough; /* for x32 mode */ |
| 766 | case LPSETTIMEOUT_NEW: | 766 | case LPSETTIMEOUT_NEW: |
| 767 | ret = lp_set_timeout64(minor, (void __user *)arg); | 767 | ret = lp_set_timeout64(minor, (void __user *)arg); |
| 768 | break; | 768 | break; |
| @@ -791,7 +791,7 @@ static loff_t memory_lseek(struct file *file, loff_t offset, int orig) · 790 unmodified lines | |||
| 791 | switch (orig) { | 791 | switch (orig) { |
| 792 | case SEEK_CUR: | 792 | case SEEK_CUR: |
| 793 | offset += file->f_pos; | 793 | offset += file->f_pos; |
| 794 | /* fall through */ | 794 | fallthrough; |
| 795 | case SEEK_SET: | 795 | case SEEK_SET: |
| 796 | /* to avoid userland mistaking f_pos=-9 as -EBADF=-9 */ | 796 | /* to avoid userland mistaking f_pos=-9 as -EBADF=-9 */ |
| 797 | if ((unsigned long long)offset >= -MAX_ERRNO) { | 797 | if ((unsigned long long)offset >= -MAX_ERRNO) { |
| @@ -286,7 +286,7 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, · 285 unmodified lines | |||
| 286 | #ifdef CONFIG_PPC | 286 | #ifdef CONFIG_PPC |
| 287 | case OBSOLETE_PMAC_NVRAM_GET_OFFSET: | 287 | case OBSOLETE_PMAC_NVRAM_GET_OFFSET: |
| 288 | pr_warn("nvram: Using obsolete PMAC_NVRAM_GET_OFFSET ioctl\n"); | 288 | pr_warn("nvram: Using obsolete PMAC_NVRAM_GET_OFFSET ioctl\n"); |
| 289 | /* fall through */ | 289 | fallthrough; |
| 290 | case IOC_NVRAM_GET_OFFSET: | 290 | case IOC_NVRAM_GET_OFFSET: |
| 291 | ret = -EINVAL; | 291 | ret = -EINVAL; |
| 292 | #ifdef CONFIG_PPC_PMAC | 292 | #ifdef CONFIG_PPC_PMAC |
| @@ -653,9 +653,8 @@ config ATCPIT100_TIMER · 652 unmodified lines | |||
| 653 | This option enables support for the Andestech ATCPIT100 timers. | 653 | This option enables support for the Andestech ATCPIT100 timers. |
| 654 | 654 | ||
| 655 | config RISCV_TIMER | 655 | config RISCV_TIMER |
| 656 | bool "Timer for the RISC-V platform" | 656 | bool "Timer for the RISC-V platform" if COMPILE_TEST |
| 657 | depends on GENERIC_SCHED_CLOCK && RISCV | 657 | depends on GENERIC_SCHED_CLOCK && RISCV |
| 658 | default y | ||
| 659 | select TIMER_PROBE | 658 | select TIMER_PROBE |
| 660 | select TIMER_OF | 659 | select TIMER_OF |
| 661 | help | 660 | help |
| @@ -663,6 +662,15 @@ config RISCV_TIMER · 1 unmodified line | |||
| 663 | is accessed via both the SBI and the rdcycle instruction. This is | 662 | is accessed via both the SBI and the rdcycle instruction. This is |
| 664 | required for all RISC-V systems. | 663 | required for all RISC-V systems. |
| 665 | 664 | ||
| 665 | config CLINT_TIMER | ||
| 666 | bool "CLINT Timer for the RISC-V platform" if COMPILE_TEST | ||
| 667 | depends on GENERIC_SCHED_CLOCK && RISCV | ||
| 668 | select TIMER_PROBE | ||
| 669 | select TIMER_OF | ||
| 670 | help | ||
| 671 | This option enables the CLINT timer for RISC-V systems. The CLINT | ||
| 672 | driver is usually used for NoMMU RISC-V systems. | ||
| 673 | |||
| 666 | config CSKY_MP_TIMER | 674 | config CSKY_MP_TIMER |
| 667 | bool "SMP Timer for the C-SKY platform" if COMPILE_TEST | 675 | bool "SMP Timer for the C-SKY platform" if COMPILE_TEST |
| 668 | depends on CSKY | 676 | depends on CSKY |
| @@ -89,6 +89,7 @@ obj-$(CONFIG_CLKSRC_ST_LPC) += clksrc_st_lpc.o · 88 unmodified lines | |||
| 89 | obj-$(CONFIG_X86_NUMACHIP) += numachip.o | 89 | obj-$(CONFIG_X86_NUMACHIP) += numachip.o |
| 90 | obj-$(CONFIG_ATCPIT100_TIMER) += timer-atcpit100.o | 90 | obj-$(CONFIG_ATCPIT100_TIMER) += timer-atcpit100.o |
| 91 | obj-$(CONFIG_RISCV_TIMER) += timer-riscv.o | 91 | obj-$(CONFIG_RISCV_TIMER) += timer-riscv.o |
| 92 | obj-$(CONFIG_CLINT_TIMER) += timer-clint.o | ||
| 92 | obj-$(CONFIG_CSKY_MP_TIMER) += timer-mp-csky.o | 93 | obj-$(CONFIG_CSKY_MP_TIMER) += timer-mp-csky.o |
| 93 | obj-$(CONFIG_GX6605S_TIMER) += timer-gx6605s.o | 94 | obj-$(CONFIG_GX6605S_TIMER) += timer-gx6605s.o |
| 94 | obj-$(CONFIG_HYPERV_TIMER) += hyperv_timer.o | 95 | obj-$(CONFIG_HYPERV_TIMER) += hyperv_timer.o |
| @@ -309,7 +309,7 @@ static int ttc_rate_change_clocksource_cb(struct notifier_block *nb, · 308 unmodified lines | |||
| 309 | /* restore original register value */ | 309 | /* restore original register value */ |
| 310 | writel_relaxed(ttccs->scale_clk_ctrl_reg_old, | 310 | writel_relaxed(ttccs->scale_clk_ctrl_reg_old, |
| 311 | ttccs->ttc.base_addr + TTC_CLK_CNTRL_OFFSET); | 311 | ttccs->ttc.base_addr + TTC_CLK_CNTRL_OFFSET); |
| 312 | /* fall through */ | 312 | fallthrough; |
| 313 | default: | 313 | default: |
| 314 | return NOTIFY_DONE; | 314 | return NOTIFY_DONE; |
| 315 | } | 315 | } |
| @@ -392,7 +392,7 @@ static int ttc_rate_change_clockevent_cb(struct notifier_block *nb, · 76 unmodified lines | |||
| 392 | 392 | ||
| 393 | clockevents_update_freq(&ttcce->ce, ndata->new_rate / PRESCALE); | 393 | clockevents_update_freq(&ttcce->ce, ndata->new_rate / PRESCALE); |
| 394 | 394 | ||
| 395 | /* fall through */ | 395 | fallthrough; |
| 396 | case PRE_RATE_CHANGE: | 396 | case PRE_RATE_CHANGE: |
| 397 | case ABORT_RATE_CHANGE: | 397 | case ABORT_RATE_CHANGE: |
| 398 | default: | 398 | default: |
| @@ -0,0 +1,226 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 2 | /* | ||
| 3 | * Copyright (C) 2020 Western Digital Corporation or its affiliates. | ||
| 4 | * | ||
| 5 | * Most of the M-mode (i.e. NoMMU) RISC-V systems usually have a | ||
| 6 | * CLINT MMIO timer device. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #define pr_fmt(fmt) "clint: " fmt | ||
| 10 | #include <linux/bitops.h> | ||
| 11 | #include <linux/clocksource.h> | ||
| 12 | #include <linux/clockchips.h> | ||
| 13 | #include <linux/cpu.h> | ||
| 14 | #include <linux/delay.h> | ||
| 15 | #include <linux/module.h> | ||
| 16 | #include <linux/of_address.h> | ||
| 17 | #include <linux/sched_clock.h> | ||
| 18 | #include <linux/io-64-nonatomic-lo-hi.h> | ||
| 19 | #include <linux/interrupt.h> | ||
| 20 | #include <linux/of_irq.h> | ||
| 21 | #include <linux/smp.h> | ||
| 22 | |||
| 23 | #define CLINT_IPI_OFF 0 | ||
| 24 | #define CLINT_TIMER_CMP_OFF 0x4000 | ||
| 25 | #define CLINT_TIMER_VAL_OFF 0xbff8 | ||
| 26 | |||
| 27 | /* CLINT manages IPI and Timer for RISC-V M-mode */ | ||
| 28 | static u32 __iomem *clint_ipi_base; | ||
| 29 | static u64 __iomem *clint_timer_cmp; | ||
| 30 | static u64 __iomem *clint_timer_val; | ||
| 31 | static unsigned long clint_timer_freq; | ||
| 32 | static unsigned int clint_timer_irq; | ||
| 33 | |||
| 34 | static void clint_send_ipi(const struct cpumask *target) | ||
| 35 | { | ||
| 36 | unsigned int cpu; | ||
| 37 | |||
| 38 | for_each_cpu(cpu, target) | ||
| 39 | writel(1, clint_ipi_base + cpuid_to_hartid_map(cpu)); | ||
| 40 | } | ||
| 41 | |||
| 42 | static void clint_clear_ipi(void) | ||
| 43 | { | ||
| 44 | writel(0, clint_ipi_base + cpuid_to_hartid_map(smp_processor_id())); | ||
| 45 | } | ||
| 46 | |||
| 47 | static struct riscv_ipi_ops clint_ipi_ops = { | ||
| 48 | .ipi_inject = clint_send_ipi, | ||
| 49 | .ipi_clear = clint_clear_ipi, | ||
| 50 | }; | ||
| 51 | |||
| 52 | #ifdef CONFIG_64BIT | ||
| 53 | #define clint_get_cycles() readq_relaxed(clint_timer_val) | ||
| 54 | #else | ||
| 55 | #define clint_get_cycles() readl_relaxed(clint_timer_val) | ||
| 56 | #define clint_get_cycles_hi() readl_relaxed(((u32 *)clint_timer_val) + 1) | ||
| 57 | #endif | ||
| 58 | |||
| 59 | #ifdef CONFIG_64BIT | ||
| 60 | static u64 notrace clint_get_cycles64(void) | ||
| 61 | { | ||
| 62 | return clint_get_cycles(); | ||
| 63 | } | ||
| 64 | #else /* CONFIG_64BIT */ | ||
| 65 | static u64 notrace clint_get_cycles64(void) | ||
| 66 | { | ||
| 67 | u32 hi, lo; | ||
| 68 | |||
| 69 | do { | ||
| 70 | hi = clint_get_cycles_hi(); | ||
| 71 | lo = clint_get_cycles(); | ||
| 72 | } while (hi != clint_get_cycles_hi()); | ||
| 73 | |||
| 74 | return ((u64)hi << 32) | lo; | ||
| 75 | } | ||
| 76 | #endif /* CONFIG_64BIT */ | ||
| 77 | |||
| 78 | static u64 clint_rdtime(struct clocksource *cs) | ||
| 79 | { | ||
| 80 | return clint_get_cycles64(); | ||
| 81 | } | ||
| 82 | |||
| 83 | static struct clocksource clint_clocksource = { | ||
| 84 | .name = "clint_clocksource", | ||
| 85 | .rating = 300, | ||
| 86 | .mask = CLOCKSOURCE_MASK(64), | ||
| 87 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | ||
| 88 | .read = clint_rdtime, | ||
| 89 | }; | ||
| 90 | |||
| 91 | static int clint_clock_next_event(unsigned long delta, | ||
| 92 | struct clock_event_device *ce) | ||
| 93 | { | ||
| 94 | void __iomem *r = clint_timer_cmp + | ||
| 95 | cpuid_to_hartid_map(smp_processor_id()); | ||
| 96 | |||
| 97 | csr_set(CSR_IE, IE_TIE); | ||
| 98 | writeq_relaxed(clint_get_cycles64() + delta, r); | ||
| 99 | return 0; | ||
| 100 | } | ||
| 101 | |||
| 102 | static DEFINE_PER_CPU(struct clock_event_device, clint_clock_event) = { | ||
| 103 | .name = "clint_clockevent", | ||
| 104 | .features = CLOCK_EVT_FEAT_ONESHOT, | ||
| 105 | .rating = 100, | ||
| 106 | .set_next_event = clint_clock_next_event, | ||
| 107 | }; | ||
| 108 | |||
| 109 | static int clint_timer_starting_cpu(unsigned int cpu) | ||
| 110 | { | ||
| 111 | struct clock_event_device *ce = per_cpu_ptr(&clint_clock_event, cpu); | ||
| 112 | |||
| 113 | ce->cpumask = cpumask_of(cpu); | ||
| 114 | clockevents_config_and_register(ce, clint_timer_freq, 100, 0x7fffffff); | ||
| 115 | |||
| 116 | enable_percpu_irq(clint_timer_irq, | ||
| 117 | irq_get_trigger_type(clint_timer_irq)); | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | static int clint_timer_dying_cpu(unsigned int cpu) | ||
| 122 | { | ||
| 123 | disable_percpu_irq(clint_timer_irq); | ||
| 124 | return 0; | ||
| 125 | } | ||
| 126 | |||
| 127 | static irqreturn_t clint_timer_interrupt(int irq, void *dev_id) | ||
| 128 | { | ||
| 129 | struct clock_event_device *evdev = this_cpu_ptr(&clint_clock_event); | ||
| 130 | |||
| 131 | csr_clear(CSR_IE, IE_TIE); | ||
| 132 | evdev->event_handler(evdev); | ||
| 133 | |||
| 134 | return IRQ_HANDLED; | ||
| 135 | } | ||
| 136 | |||
| 137 | static int __init clint_timer_init_dt(struct device_node *np) | ||
| 138 | { | ||
| 139 | int rc; | ||
| 140 | u32 i, nr_irqs; | ||
| 141 | void __iomem *base; | ||
| 142 | struct of_phandle_args oirq; | ||
| 143 | |||
| 144 | /* | ||
| 145 | * Ensure that CLINT device interrupts are either RV_IRQ_TIMER or | ||
| 146 | * RV_IRQ_SOFT. If it's anything else then we ignore the device. | ||
| 147 | */ | ||
| 148 | nr_irqs = of_irq_count(np); | ||
| 149 | for (i = 0; i < nr_irqs; i++) { | ||
| 150 | if (of_irq_parse_one(np, i, &oirq)) { | ||
| 151 | pr_err("%pOFP: failed to parse irq %d.\n", np, i); | ||
| 152 | continue; | ||
| 153 | } | ||
| 154 | |||
| 155 | if ((oirq.args_count != 1) || | ||
| 156 | (oirq.args[0] != RV_IRQ_TIMER && | ||
| 157 | oirq.args[0] != RV_IRQ_SOFT)) { | ||
| 158 | pr_err("%pOFP: invalid irq %d (hwirq %d)\n", | ||
| 159 | np, i, oirq.args[0]); | ||
| 160 | return -ENODEV; | ||
| 161 | } | ||
| 162 | |||
| 163 | /* Find parent irq domain and map timer irq */ | ||
| 164 | if (!clint_timer_irq && | ||
| 165 | oirq.args[0] == RV_IRQ_TIMER && | ||
| 166 | irq_find_host(oirq.np)) | ||
| 167 | clint_timer_irq = irq_of_parse_and_map(np, i); | ||
| 168 | } | ||
| 169 | |||
| 170 | /* If CLINT timer irq not found then fail */ | ||
| 171 | if (!clint_timer_irq) { | ||
| 172 | pr_err("%pOFP: timer irq not found\n", np); | ||
| 173 | return -ENODEV; | ||
| 174 | } | ||
| 175 | |||
| 176 | base = of_iomap(np, 0); | ||
| 177 | if (!base) { | ||
| 178 | pr_err("%pOFP: could not map registers\n", np); | ||
| 179 | return -ENODEV; | ||
| 180 | } | ||
| 181 | |||
| 182 | clint_ipi_base = base + CLINT_IPI_OFF; | ||
| 183 | clint_timer_cmp = base + CLINT_TIMER_CMP_OFF; | ||
| 184 | clint_timer_val = base + CLINT_TIMER_VAL_OFF; | ||
| 185 | clint_timer_freq = riscv_timebase; | ||
| 186 | |||
| 187 | pr_info("%pOFP: timer running at %ld Hz\n", np, clint_timer_freq); | ||
| 188 | |||
| 189 | rc = clocksource_register_hz(&clint_clocksource, clint_timer_freq); | ||
| 190 | if (rc) { | ||
| 191 | pr_err("%pOFP: clocksource register failed [%d]\n", np, rc); | ||
| 192 | goto fail_iounmap; | ||
| 193 | } | ||
| 194 | |||
| 195 | sched_clock_register(clint_get_cycles64, 64, clint_timer_freq); | ||
| 196 | |||
| 197 | rc = request_percpu_irq(clint_timer_irq, clint_timer_interrupt, | ||
| 198 | "clint-timer", &clint_clock_event); | ||
| 199 | if (rc) { | ||
| 200 | pr_err("registering percpu irq failed [%d]\n", rc); | ||
| 201 | goto fail_iounmap; | ||
| 202 | } | ||
| 203 | |||
| 204 | rc = cpuhp_setup_state(CPUHP_AP_CLINT_TIMER_STARTING, | ||
| 205 | "clockevents/clint/timer:starting", | ||
| 206 | clint_timer_starting_cpu, | ||
| 207 | clint_timer_dying_cpu); | ||
| 208 | if (rc) { | ||
| 209 | pr_err("%pOFP: cpuhp setup state failed [%d]\n", np, rc); | ||
| 210 | goto fail_free_irq; | ||
| 211 | } | ||
| 212 | |||
| 213 | riscv_set_ipi_ops(&clint_ipi_ops); | ||
| 214 | clint_clear_ipi(); | ||
| 215 | |||
| 216 | return 0; | ||
| 217 | |||
| 218 | fail_free_irq: | ||
| 219 | free_irq(clint_timer_irq, &clint_clock_event); | ||
| 220 | fail_iounmap: | ||
| 221 | iounmap(base); | ||
| 222 | return rc; | ||
| 223 | } | ||
| 224 | |||
| 225 | TIMER_OF_DECLARE(clint_timer, "riscv,clint0", clint_timer_init_dt); | ||
| 226 | TIMER_OF_DECLARE(clint_timer1, "sifive,clint0", clint_timer_init_dt); | ||
| @@ -19,26 +19,13 @@ · 18 unmodified lines | |||
| 19 | #include <linux/of_irq.h> | 19 | #include <linux/of_irq.h> |
| 20 | #include <asm/smp.h> | 20 | #include <asm/smp.h> |
| 21 | #include <asm/sbi.h> | 21 | #include <asm/sbi.h> |
| 22 | 22 | #include <asm/timex.h> | |
| 23 | u64 __iomem *riscv_time_cmp; | ||
| 24 | u64 __iomem *riscv_time_val; | ||
| 25 | |||
| 26 | static inline void mmio_set_timer(u64 val) | ||
| 27 | { | ||
| 28 | void __iomem *r; | ||
| 29 | |||
| 30 | r = riscv_time_cmp + cpuid_to_hartid_map(smp_processor_id()); | ||
| 31 | writeq_relaxed(val, r); | ||
| 32 | } | ||
| 33 | 23 | ||
| 34 | static int riscv_clock_next_event(unsigned long delta, | 24 | static int riscv_clock_next_event(unsigned long delta, |
| 35 | struct clock_event_device *ce) | 25 | struct clock_event_device *ce) |
| 36 | { | 26 | { |
| 37 | csr_set(CSR_IE, IE_TIE); | 27 | csr_set(CSR_IE, IE_TIE); |
| 38 | if (IS_ENABLED(CONFIG_RISCV_SBI)) | 28 | sbi_set_timer(get_cycles64() + delta); |
| 39 | sbi_set_timer(get_cycles64() + delta); | ||
| 40 | else | ||
| 41 | mmio_set_timer(get_cycles64() + delta); | ||
| 42 | return 0; | 29 | return 0; |
| 43 | } | 30 | } |
| 44 | 31 | ||
| @@ -703,8 +703,7 @@ static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf) · 702 unmodified lines | |||
| 703 | freq = arch_freq_get_on_cpu(policy->cpu); | 703 | freq = arch_freq_get_on_cpu(policy->cpu); |
| 704 | if (freq) | 704 | if (freq) |
| 705 | ret = sprintf(buf, "%u\n", freq); | 705 | ret = sprintf(buf, "%u\n", freq); |
| 706 | else if (cpufreq_driver && cpufreq_driver->setpolicy && | 706 | else if (cpufreq_driver->setpolicy && cpufreq_driver->get) |
| 707 | cpufreq_driver->get) | ||
| 708 | ret = sprintf(buf, "%u\n", cpufreq_driver->get(policy->cpu)); | 707 | ret = sprintf(buf, "%u\n", cpufreq_driver->get(policy->cpu)); |
| 709 | else | 708 | else |
| 710 | ret = sprintf(buf, "%u\n", policy->cur); | 709 | ret = sprintf(buf, "%u\n", policy->cur); |
| @@ -129,7 +129,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c) · 128 unmodified lines | |||
| 129 | return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE); | 129 | return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE); |
| 130 | case 0x0D: /* Pentium M (Dothan) */ | 130 | case 0x0D: /* Pentium M (Dothan) */ |
| 131 | p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS; | 131 | p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS; |
| 132 | /* fall through */ | 132 | fallthrough; |
| 133 | case 0x09: /* Pentium M (Banias) */ | 133 | case 0x09: /* Pentium M (Banias) */ |
| 134 | return speedstep_get_frequency(SPEEDSTEP_CPU_PM); | 134 | return speedstep_get_frequency(SPEEDSTEP_CPU_PM); |
| 135 | } | 135 | } |
| @@ -366,7 +366,7 @@ enum speedstep_processor speedstep_detect_processor(void) · 365 unmodified lines | |||
| 366 | } else | 366 | } else |
| 367 | return SPEEDSTEP_CPU_PIII_C; | 367 | return SPEEDSTEP_CPU_PIII_C; |
| 368 | } | 368 | } |
| 369 | /* fall through */ | 369 | fallthrough; |
| 370 | default: | 370 | default: |
| 371 | return 0; | 371 | return 0; |
| 372 | } | 372 | } |
| @@ -56,9 +56,11 @@ struct read_counters_work { · 55 unmodified lines | |||
| 56 | 56 | ||
| 57 | static struct workqueue_struct *read_counters_wq; | 57 | static struct workqueue_struct *read_counters_wq; |
| 58 | 58 | ||
| 59 | static enum cluster get_cpu_cluster(u8 cpu) | 59 | static void get_cpu_cluster(void *cluster) |
| 60 | { | 60 | { |
| 61 | return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); | 61 | u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; |
| 62 | |||
| 63 | *((uint32_t *)cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); | ||
| 62 | } | 64 | } |
| 63 | 65 | ||
| 64 | /* | 66 | /* |
| @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) · 121 unmodified lines | |||
| 186 | static int tegra194_cpufreq_init(struct cpufreq_policy *policy) | 188 | static int tegra194_cpufreq_init(struct cpufreq_policy *policy) |
| 187 | { | 189 | { |
| 188 | struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); | 190 | struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); |
| 189 | int cl = get_cpu_cluster(policy->cpu); | ||
| 190 | u32 cpu; | 191 | u32 cpu; |
| 192 | u32 cl; | ||
| 193 | |||
| 194 | smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); | ||
| 191 | 195 | ||
| 192 | if (cl >= data->num_clusters) | 196 | if (cl >= data->num_clusters) |
| 193 | return -EINVAL; | 197 | return -EINVAL; |
| @@ -86,11 +86,11 @@ static unsigned long dra7_efuse_xlate(struct ti_cpufreq_data *opp_data, · 85 unmodified lines | |||
| 86 | case DRA76_EFUSE_HAS_PLUS_MPU_OPP: | 86 | case DRA76_EFUSE_HAS_PLUS_MPU_OPP: |
| 87 | case DRA76_EFUSE_HAS_ALL_MPU_OPP: | 87 | case DRA76_EFUSE_HAS_ALL_MPU_OPP: |
| 88 | calculated_efuse |= DRA76_EFUSE_PLUS_MPU_OPP; | 88 | calculated_efuse |= DRA76_EFUSE_PLUS_MPU_OPP; |
| 89 | /* Fall through */ | 89 | fallthrough; |
| 90 | case DRA7_EFUSE_HAS_ALL_MPU_OPP: | 90 | case DRA7_EFUSE_HAS_ALL_MPU_OPP: |
| 91 | case DRA7_EFUSE_HAS_HIGH_MPU_OPP: | 91 | case DRA7_EFUSE_HAS_HIGH_MPU_OPP: |
| 92 | calculated_efuse |= DRA7_EFUSE_HIGH_MPU_OPP; | 92 | calculated_efuse |= DRA7_EFUSE_HIGH_MPU_OPP; |
| 93 | /* Fall through */ | 93 | fallthrough; |
| 94 | case DRA7_EFUSE_HAS_OD_MPU_OPP: | 94 | case DRA7_EFUSE_HAS_OD_MPU_OPP: |
| 95 | calculated_efuse |= DRA7_EFUSE_OD_MPU_OPP; | 95 | calculated_efuse |= DRA7_EFUSE_OD_MPU_OPP; |
| 96 | } | 96 | } |
| @@ -22,6 +22,7 @@ · 21 unmodified lines | |||
| 22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
| 23 | #include <linux/suspend.h> | 23 | #include <linux/suspend.h> |
| 24 | #include <linux/tick.h> | 24 | #include <linux/tick.h> |
| 25 | #include <linux/mmu_context.h> | ||
| 25 | #include <trace/events/power.h> | 26 | #include <trace/events/power.h> |
| 26 | 27 | ||
| 27 | #include "cpuidle.h" | 28 | #include "cpuidle.h" |
| @@ -145,21 +146,24 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv, · 117 unmodified lines | |||
| 145 | * executing it contains RCU usage regarded as invalid in the idle | 146 | * executing it contains RCU usage regarded as invalid in the idle |
| 146 | * context, so tell RCU about that. | 147 | * context, so tell RCU about that. |
| 147 | */ | 148 | */ |
| 148 | RCU_NONIDLE(tick_freeze()); | 149 | tick_freeze(); |
| 149 | /* | 150 | /* |
| 150 | * The state used here cannot be a "coupled" one, because the "coupled" | 151 | * The state used here cannot be a "coupled" one, because the "coupled" |
| 151 | * cpuidle mechanism enables interrupts and doing that with timekeeping | 152 | * cpuidle mechanism enables interrupts and doing that with timekeeping |
| 152 | * suspended is generally unsafe. | 153 | * suspended is generally unsafe. |
| 153 | */ | 154 | */ |
| 154 | stop_critical_timings(); | 155 | stop_critical_timings(); |
| 156 | rcu_idle_enter(); | ||
| 155 | drv->states[index].enter_s2idle(dev, drv, index); | 157 | drv->states[index].enter_s2idle(dev, drv, index); |
| 156 | WARN_ON(!irqs_disabled()); | 158 | if (WARN_ON_ONCE(!irqs_disabled())) |
| 159 | local_irq_disable(); | ||
| 157 | /* | 160 | /* |
| 158 | * timekeeping_resume() that will be called by tick_unfreeze() for the | 161 | * timekeeping_resume() that will be called by tick_unfreeze() for the |
| 159 | * first CPU executing it calls functions containing RCU read-side | 162 | * first CPU executing it calls functions containing RCU read-side |
| 160 | * critical sections, so tell RCU about that. | 163 | * critical sections, so tell RCU about that. |
| 161 | */ | 164 | */ |
| 162 | RCU_NONIDLE(tick_unfreeze()); | 165 | rcu_idle_exit(); |
| 166 | tick_unfreeze(); | ||
| 163 | start_critical_timings(); | 167 | start_critical_timings(); |
| 164 | 168 | ||
| 165 | time_end = ns_to_ktime(local_clock()); | 169 | time_end = ns_to_ktime(local_clock()); |
| @@ -225,19 +229,24 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv, · 59 unmodified lines | |||
| 225 | broadcast = false; | 229 | broadcast = false; |
| 226 | } | 230 | } |
| 227 | 231 | ||
| 232 | if (target_state->flags & CPUIDLE_FLAG_TLB_FLUSHED) | ||
| 233 | leave_mm(dev->cpu); | ||
| 234 | |||
| 228 | /* Take note of the planned idle state. */ | 235 | /* Take note of the planned idle state. */ |
| 229 | sched_idle_set_state(target_state); | 236 | sched_idle_set_state(target_state); |
| 230 | 237 | ||
| 231 | trace_cpu_idle_rcuidle(index, dev->cpu); | 238 | trace_cpu_idle(index, dev->cpu); |
| 232 | time_start = ns_to_ktime(local_clock()); | 239 | time_start = ns_to_ktime(local_clock()); |
| 233 | 240 | ||
| 234 | stop_critical_timings(); | 241 | stop_critical_timings(); |
| 242 | rcu_idle_enter(); | ||
| 235 | entered_state = target_state->enter(dev, drv, index); | 243 | entered_state = target_state->enter(dev, drv, index); |
| 244 | rcu_idle_exit(); | ||
| 236 | start_critical_timings(); | 245 | start_critical_timings(); |
| 237 | 246 | ||
| 238 | sched_clock_idle_wakeup_event(); | 247 | sched_clock_idle_wakeup_event(); |
| 239 | time_end = ns_to_ktime(local_clock()); | 248 | time_end = ns_to_ktime(local_clock()); |
| 240 | trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu); | 249 | trace_cpu_idle(PWR_EVENT_EXIT, dev->cpu); |
| 241 | 250 | ||
| 242 | /* The cpu is no longer idle or about to enter idle. */ | 251 | /* The cpu is no longer idle or about to enter idle. */ |
| 243 | sched_idle_set_state(NULL); | 252 | sched_idle_set_state(NULL); |
| @@ -873,6 +873,9 @@ config CRYPTO_DEV_SA2UL · 872 unmodified lines | |||
| 873 | select CRYPTO_AES | 873 | select CRYPTO_AES |
| 874 | select CRYPTO_AES_ARM64 | 874 | select CRYPTO_AES_ARM64 |
| 875 | select CRYPTO_ALGAPI | 875 | select CRYPTO_ALGAPI |
| 876 | select CRYPTO_SHA1 | ||
| 877 | select CRYPTO_SHA256 | ||
| 878 | select CRYPTO_SHA512 | ||
| 876 | select HW_RANDOM | 879 | select HW_RANDOM |
| 877 | select SG_SPLIT | 880 | select SG_SPLIT |
| 878 | help | 881 | help |
| @@ -2310,7 +2310,7 @@ static int artpec6_crypto_prepare_submit_hash(struct ahash_request *req) · 2309 unmodified lines | |||
| 2310 | 2310 | ||
| 2311 | case ARTPEC6_CRYPTO_PREPARE_HASH_NO_START: | 2311 | case ARTPEC6_CRYPTO_PREPARE_HASH_NO_START: |
| 2312 | ret = 0; | 2312 | ret = 0; |
| 2313 | /* Fallthrough */ | 2313 | fallthrough; |
| 2314 | 2314 | ||
| 2315 | default: | 2315 | default: |
| 2316 | artpec6_crypto_common_destroy(&req_ctx->common); | 2316 | artpec6_crypto_common_destroy(&req_ctx->common); |
| @@ -90,11 +90,11 @@ static int setup_sgio_components(struct cpt_vf *cptvf, struct buf_ptr *list, · 89 unmodified lines | |||
| 90 | case 3: | 90 | case 3: |
| 91 | sg_ptr->u.s.len2 = cpu_to_be16(list[i * 4 + 2].size); | 91 | sg_ptr->u.s.len2 = cpu_to_be16(list[i * 4 + 2].size); |
| 92 | sg_ptr->ptr2 = cpu_to_be64(list[i * 4 + 2].dma_addr); | 92 | sg_ptr->ptr2 = cpu_to_be64(list[i * 4 + 2].dma_addr); |
| 93 | /* Fall through */ | 93 | fallthrough; |
| 94 | case 2: | 94 | case 2: |
| 95 | sg_ptr->u.s.len1 = cpu_to_be16(list[i * 4 + 1].size); | 95 | sg_ptr->u.s.len1 = cpu_to_be16(list[i * 4 + 1].size); |
| 96 | sg_ptr->ptr1 = cpu_to_be64(list[i * 4 + 1].dma_addr); | 96 | sg_ptr->ptr1 = cpu_to_be64(list[i * 4 + 1].dma_addr); |
| 97 | /* Fall through */ | 97 | fallthrough; |
| 98 | case 1: | 98 | case 1: |
| 99 | sg_ptr->u.s.len0 = cpu_to_be16(list[i * 4 + 0].size); | 99 | sg_ptr->u.s.len0 = cpu_to_be16(list[i * 4 + 0].size); |
| 100 | sg_ptr->ptr0 = cpu_to_be64(list[i * 4 + 0].dma_addr); | 100 | sg_ptr->ptr0 = cpu_to_be64(list[i * 4 + 0].dma_addr); |
| @@ -135,7 +135,7 @@ static int chcr_ktls_update_connection_state(struct chcr_ktls_info *tx_info, · 134 unmodified lines | |||
| 135 | break; | 135 | break; |
| 136 | /* update to the next state and also initialize TCB */ | 136 | /* update to the next state and also initialize TCB */ |
| 137 | tx_info->connection_state = new_state; | 137 | tx_info->connection_state = new_state; |
| 138 | /* FALLTHRU */ | 138 | fallthrough; |
| 139 | case KTLS_CONN_ACT_OPEN_RPL: | 139 | case KTLS_CONN_ACT_OPEN_RPL: |
| 140 | /* if we are stuck in this state, means tcb init might not | 140 | /* if we are stuck in this state, means tcb init might not |
| 141 | * received by HW, try sending it again. | 141 | * received by HW, try sending it again. |
| @@ -150,7 +150,7 @@ static int chcr_ktls_update_connection_state(struct chcr_ktls_info *tx_info, · 8 unmodified lines | |||
| 150 | break; | 150 | break; |
| 151 | /* update to the next state and check if l2t_state is valid */ | 151 | /* update to the next state and check if l2t_state is valid */ |
| 152 | tx_info->connection_state = new_state; | 152 | tx_info->connection_state = new_state; |
| 153 | /* FALLTHRU */ | 153 | fallthrough; |
| 154 | case KTLS_CONN_SET_TCB_RPL: | 154 | case KTLS_CONN_SET_TCB_RPL: |
| 155 | /* Check if l2t state is valid, then move to ready state. */ | 155 | /* Check if l2t state is valid, then move to ready state. */ |
| 156 | if (cxgb4_check_l2t_valid(tx_info->l2te)) { | 156 | if (cxgb4_check_l2t_valid(tx_info->l2te)) { |
| @@ -140,11 +140,11 @@ static inline int setup_sgio_components(struct pci_dev *pdev, · 139 unmodified lines | |||
| 140 | case 3: | 140 | case 3: |
| 141 | sg_ptr->u.s.len2 = cpu_to_be16(list[i * 4 + 2].size); | 141 | sg_ptr->u.s.len2 = cpu_to_be16(list[i * 4 + 2].size); |
| 142 | sg_ptr->ptr2 = cpu_to_be64(list[i * 4 + 2].dma_addr); | 142 | sg_ptr->ptr2 = cpu_to_be64(list[i * 4 + 2].dma_addr); |
| 143 | /* Fall through */ | 143 | fallthrough; |
| 144 | case 2: | 144 | case 2: |
| 145 | sg_ptr->u.s.len1 = cpu_to_be16(list[i * 4 + 1].size); | 145 | sg_ptr->u.s.len1 = cpu_to_be16(list[i * 4 + 1].size); |
| 146 | sg_ptr->ptr1 = cpu_to_be64(list[i * 4 + 1].dma_addr); | 146 | sg_ptr->ptr1 = cpu_to_be64(list[i * 4 + 1].dma_addr); |
| 147 | /* Fall through */ | 147 | fallthrough; |
| 148 | case 1: | 148 | case 1: |
| 149 | sg_ptr->u.s.len0 = cpu_to_be16(list[i * 4 + 0].size); | 149 | sg_ptr->u.s.len0 = cpu_to_be16(list[i * 4 + 0].size); |
| 150 | sg_ptr->ptr0 = cpu_to_be64(list[i * 4 + 0].dma_addr); | 150 | sg_ptr->ptr0 = cpu_to_be64(list[i * 4 + 0].dma_addr); |
| @@ -131,9 +131,10 @@ static int adf_put_admin_msg_sync(struct adf_accel_dev *accel_dev, u32 ae, · 130 unmodified lines | |||
| 131 | memcpy(admin->virt_addr + offset, in, ADF_ADMINMSG_LEN); | 131 | memcpy(admin->virt_addr + offset, in, ADF_ADMINMSG_LEN); |
| 132 | ADF_CSR_WR(mailbox, mb_offset, 1); | 132 | ADF_CSR_WR(mailbox, mb_offset, 1); |
| 133 | 133 | ||
| 134 | ret = readl_poll_timeout(mailbox + mb_offset, status, | 134 | ret = read_poll_timeout(ADF_CSR_RD, status, status == 0, |
| 135 | status == 0, ADF_ADMIN_POLL_DELAY_US, | 135 | ADF_ADMIN_POLL_DELAY_US, |
| 136 | ADF_ADMIN_POLL_TIMEOUT_US); | 136 | ADF_ADMIN_POLL_TIMEOUT_US, true, |
| 137 | mailbox, mb_offset); | ||
| 137 | if (ret < 0) { | 138 | if (ret < 0) { |
| 138 | /* Response timeout */ | 139 | /* Response timeout */ |
| 139 | dev_err(&GET_DEV(accel_dev), | 140 | dev_err(&GET_DEV(accel_dev), |
| @@ -340,7 +340,7 @@ static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev) · 339 unmodified lines | |||
| 340 | /* VF is newer than PF and decides whether it is compatible */ | 340 | /* VF is newer than PF and decides whether it is compatible */ |
| 341 | if (accel_dev->vf.pf_version >= hw_data->min_iov_compat_ver) | 341 | if (accel_dev->vf.pf_version >= hw_data->min_iov_compat_ver) |
| 342 | break; | 342 | break; |
| 343 | /* fall through */ | 343 | fallthrough; |
| 344 | case ADF_PF2VF_VF_INCOMPATIBLE: | 344 | case ADF_PF2VF_VF_INCOMPATIBLE: |
| 345 | dev_err(&GET_DEV(accel_dev), | 345 | dev_err(&GET_DEV(accel_dev), |
| 346 | "PF (vers %d) and VF (vers %d) are not compatible\n", | 346 | "PF (vers %d) and VF (vers %d) are not compatible\n", |
| @@ -752,7 +752,7 @@ static int qat_uclo_init_reg(struct icp_qat_fw_loader_handle *handle, · 751 unmodified lines | |||
| 752 | case ICP_GPA_ABS: | 752 | case ICP_GPA_ABS: |
| 753 | case ICP_GPB_ABS: | 753 | case ICP_GPB_ABS: |
| 754 | ctx_mask = 0; | 754 | ctx_mask = 0; |
| 755 | /* fall through */ | 755 | fallthrough; |
| 756 | case ICP_GPA_REL: | 756 | case ICP_GPA_REL: |
| 757 | case ICP_GPB_REL: | 757 | case ICP_GPB_REL: |
| 758 | return qat_hal_init_gpr(handle, ae, ctx_mask, reg_type, | 758 | return qat_hal_init_gpr(handle, ae, ctx_mask, reg_type, |
| @@ -762,7 +762,7 @@ static int qat_uclo_init_reg(struct icp_qat_fw_loader_handle *handle, · 3 unmodified lines | |||
| 762 | case ICP_SR_RD_ABS: | 762 | case ICP_SR_RD_ABS: |
| 763 | case ICP_DR_RD_ABS: | 763 | case ICP_DR_RD_ABS: |
| 764 | ctx_mask = 0; | 764 | ctx_mask = 0; |
| 765 | /* fall through */ | 765 | fallthrough; |
| 766 | case ICP_SR_REL: | 766 | case ICP_SR_REL: |
| 767 | case ICP_DR_REL: | 767 | case ICP_DR_REL: |
| 768 | case ICP_SR_RD_REL: | 768 | case ICP_SR_RD_REL: |
| @@ -772,7 +772,7 @@ static int qat_uclo_init_reg(struct icp_qat_fw_loader_handle *handle, · 3 unmodified lines | |||
| 772 | case ICP_SR_WR_ABS: | 772 | case ICP_SR_WR_ABS: |
| 773 | case ICP_DR_WR_ABS: | 773 | case ICP_DR_WR_ABS: |
| 774 | ctx_mask = 0; | 774 | ctx_mask = 0; |
| 775 | /* fall through */ | 775 | fallthrough; |
| 776 | case ICP_SR_WR_REL: | 776 | case ICP_SR_WR_REL: |
| 777 | case ICP_DR_WR_REL: | 777 | case ICP_DR_WR_REL: |
| 778 | return qat_hal_init_wr_xfer(handle, ae, ctx_mask, reg_type, | 778 | return qat_hal_init_wr_xfer(handle, ae, ctx_mask, reg_type, |
| @@ -314,17 +314,17 @@ void cryp_save_device_context(struct cryp_device_data *device_data, · 313 unmodified lines | |||
| 314 | case CRYP_KEY_SIZE_256: | 314 | case CRYP_KEY_SIZE_256: |
| 315 | ctx->key_4_l = readl_relaxed(&src_reg->key_4_l); | 315 | ctx->key_4_l = readl_relaxed(&src_reg->key_4_l); |
| 316 | ctx->key_4_r = readl_relaxed(&src_reg->key_4_r); | 316 | ctx->key_4_r = readl_relaxed(&src_reg->key_4_r); |
| 317 | /* Fall through */ | 317 | fallthrough; |
| 318 | 318 | ||
| 319 | case CRYP_KEY_SIZE_192: | 319 | case CRYP_KEY_SIZE_192: |
| 320 | ctx->key_3_l = readl_relaxed(&src_reg->key_3_l); | 320 | ctx->key_3_l = readl_relaxed(&src_reg->key_3_l); |
| 321 | ctx->key_3_r = readl_relaxed(&src_reg->key_3_r); | 321 | ctx->key_3_r = readl_relaxed(&src_reg->key_3_r); |
| 322 | /* Fall through */ | 322 | fallthrough; |
| 323 | 323 | ||
| 324 | case CRYP_KEY_SIZE_128: | 324 | case CRYP_KEY_SIZE_128: |
| 325 | ctx->key_2_l = readl_relaxed(&src_reg->key_2_l); | 325 | ctx->key_2_l = readl_relaxed(&src_reg->key_2_l); |
| 326 | ctx->key_2_r = readl_relaxed(&src_reg->key_2_r); | 326 | ctx->key_2_r = readl_relaxed(&src_reg->key_2_r); |
| 327 | /* Fall through */ | 327 | fallthrough; |
| 328 | 328 | ||
| 329 | default: | 329 | default: |
| 330 | ctx->key_1_l = readl_relaxed(&src_reg->key_1_l); | 330 | ctx->key_1_l = readl_relaxed(&src_reg->key_1_l); |
| @@ -364,17 +364,17 @@ void cryp_restore_device_context(struct cryp_device_data *device_data, · 33 unmodified lines | |||
| 364 | case CRYP_KEY_SIZE_256: | 364 | case CRYP_KEY_SIZE_256: |
| 365 | writel_relaxed(ctx->key_4_l, ®->key_4_l); | 365 | writel_relaxed(ctx->key_4_l, ®->key_4_l); |
| 366 | writel_relaxed(ctx->key_4_r, ®->key_4_r); | 366 | writel_relaxed(ctx->key_4_r, ®->key_4_r); |
| 367 | /* Fall through */ | 367 | fallthrough; |
| 368 | 368 | ||
| 369 | case CRYP_KEY_SIZE_192: | 369 | case CRYP_KEY_SIZE_192: |
| 370 | writel_relaxed(ctx->key_3_l, ®->key_3_l); | 370 | writel_relaxed(ctx->key_3_l, ®->key_3_l); |
| 371 | writel_relaxed(ctx->key_3_r, ®->key_3_r); | 371 | writel_relaxed(ctx->key_3_r, ®->key_3_r); |
| 372 | /* Fall through */ | 372 | fallthrough; |
| 373 | 373 | ||
| 374 | case CRYP_KEY_SIZE_128: | 374 | case CRYP_KEY_SIZE_128: |
| 375 | writel_relaxed(ctx->key_2_l, ®->key_2_l); | 375 | writel_relaxed(ctx->key_2_l, ®->key_2_l); |
| 376 | writel_relaxed(ctx->key_2_r, ®->key_2_r); | 376 | writel_relaxed(ctx->key_2_r, ®->key_2_r); |
| 377 | /* Fall through */ | 377 | fallthrough; |
| 378 | 378 | ||
| 379 | default: | 379 | default: |
| 380 | writel_relaxed(ctx->key_1_l, ®->key_1_l); | 380 | writel_relaxed(ctx->key_1_l, ®->key_1_l); |
| @@ -100,6 +100,12 @@ bool __generic_fsdax_supported(struct dax_device *dax_dev, · 99 unmodified lines | |||
| 100 | return false; | 100 | return false; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | if (!dax_dev && !bdev_dax_supported(bdev, blocksize)) { | ||
| 104 | pr_debug("%s: error: dax unsupported by block device\n", | ||
| 105 | bdevname(bdev, buf)); | ||
| 106 | return false; | ||
| 107 | } | ||
| 108 | |||
| 103 | id = dax_read_lock(); | 109 | id = dax_read_lock(); |
| 104 | len = dax_direct_access(dax_dev, pgoff, 1, &kaddr, &pfn); | 110 | len = dax_direct_access(dax_dev, pgoff, 1, &kaddr, &pfn); |
| 105 | len2 = dax_direct_access(dax_dev, pgoff_end, 1, &end_kaddr, &end_pfn); | 111 | len2 = dax_direct_access(dax_dev, pgoff_end, 1, &end_kaddr, &end_pfn); |
| @@ -1767,7 +1767,7 @@ static u32 pl08x_memcpy_cctl(struct pl08x_driver_data *pl08x) · 1766 unmodified lines | |||
| 1767 | default: | 1767 | default: |
| 1768 | dev_err(&pl08x->adev->dev, | 1768 | dev_err(&pl08x->adev->dev, |
| 1769 | "illegal burst size for memcpy, set to 1\n"); | 1769 | "illegal burst size for memcpy, set to 1\n"); |
| 1770 | /* Fall through */ | 1770 | fallthrough; |
| 1771 | case PL08X_BURST_SZ_1: | 1771 | case PL08X_BURST_SZ_1: |
| 1772 | cctl |= PL080_BSIZE_1 << PL080_CONTROL_SB_SIZE_SHIFT | | 1772 | cctl |= PL080_BSIZE_1 << PL080_CONTROL_SB_SIZE_SHIFT | |
| 1773 | PL080_BSIZE_1 << PL080_CONTROL_DB_SIZE_SHIFT; | 1773 | PL080_BSIZE_1 << PL080_CONTROL_DB_SIZE_SHIFT; |
| @@ -1806,7 +1806,7 @@ static u32 pl08x_memcpy_cctl(struct pl08x_driver_data *pl08x) · 32 unmodified lines | |||
| 1806 | default: | 1806 | default: |
| 1807 | dev_err(&pl08x->adev->dev, | 1807 | dev_err(&pl08x->adev->dev, |
| 1808 | "illegal bus width for memcpy, set to 8 bits\n"); | 1808 | "illegal bus width for memcpy, set to 8 bits\n"); |
| 1809 | /* Fall through */ | 1809 | fallthrough; |
| 1810 | case PL08X_BUS_WIDTH_8_BITS: | 1810 | case PL08X_BUS_WIDTH_8_BITS: |
| 1811 | cctl |= PL080_WIDTH_8BIT << PL080_CONTROL_SWIDTH_SHIFT | | 1811 | cctl |= PL080_WIDTH_8BIT << PL080_CONTROL_SWIDTH_SHIFT | |
| 1812 | PL080_WIDTH_8BIT << PL080_CONTROL_DWIDTH_SHIFT; | 1812 | PL080_WIDTH_8BIT << PL080_CONTROL_DWIDTH_SHIFT; |
| @@ -1850,7 +1850,7 @@ static u32 pl08x_ftdmac020_memcpy_cctl(struct pl08x_driver_data *pl08x) · 37 unmodified lines | |||
| 1850 | default: | 1850 | default: |
| 1851 | dev_err(&pl08x->adev->dev, | 1851 | dev_err(&pl08x->adev->dev, |
| 1852 | "illegal bus width for memcpy, set to 8 bits\n"); | 1852 | "illegal bus width for memcpy, set to 8 bits\n"); |
| 1853 | /* Fall through */ | 1853 | fallthrough; |
| 1854 | case PL08X_BUS_WIDTH_8_BITS: | 1854 | case PL08X_BUS_WIDTH_8_BITS: |
| 1855 | cctl |= PL080_WIDTH_8BIT << FTDMAC020_LLI_SRC_WIDTH_SHIFT | | 1855 | cctl |= PL080_WIDTH_8BIT << FTDMAC020_LLI_SRC_WIDTH_SHIFT | |
| 1856 | PL080_WIDTH_8BIT << FTDMAC020_LLI_DST_WIDTH_SHIFT; | 1856 | PL080_WIDTH_8BIT << FTDMAC020_LLI_DST_WIDTH_SHIFT; |
| @@ -2612,7 +2612,7 @@ static int pl08x_of_probe(struct amba_device *adev, · 755 unmodified lines | |||
| 2612 | switch (val) { | 2612 | switch (val) { |
| 2613 | default: | 2613 | default: |
| 2614 | dev_err(&adev->dev, "illegal burst size for memcpy, set to 1\n"); | 2614 | dev_err(&adev->dev, "illegal burst size for memcpy, set to 1\n"); |
| 2615 | /* Fall through */ | 2615 | fallthrough; |
| 2616 | case 1: | 2616 | case 1: |
| 2617 | pd->memcpy_burst_size = PL08X_BURST_SZ_1; | 2617 | pd->memcpy_burst_size = PL08X_BURST_SZ_1; |
| 2618 | break; | 2618 | break; |
| @@ -2647,7 +2647,7 @@ static int pl08x_of_probe(struct amba_device *adev, · 28 unmodified lines | |||
| 2647 | switch (val) { | 2647 | switch (val) { |
| 2648 | default: | 2648 | default: |
| 2649 | dev_err(&adev->dev, "illegal bus width for memcpy, set to 8 bits\n"); | 2649 | dev_err(&adev->dev, "illegal bus width for memcpy, set to 8 bits\n"); |
| 2650 | /* Fall through */ | 2650 | fallthrough; |
| 2651 | case 8: | 2651 | case 8: |
| 2652 | pd->memcpy_bus_width = PL08X_BUS_WIDTH_8_BITS; | 2652 | pd->memcpy_bus_width = PL08X_BUS_WIDTH_8_BITS; |
| 2653 | break; | 2653 | break; |
| @@ -1163,7 +1163,7 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev, · 1162 unmodified lines | |||
| 1163 | switch (chan->feature & FSL_DMA_IP_MASK) { | 1163 | switch (chan->feature & FSL_DMA_IP_MASK) { |
| 1164 | case FSL_DMA_IP_85XX: | 1164 | case FSL_DMA_IP_85XX: |
| 1165 | chan->toggle_ext_pause = fsl_chan_toggle_ext_pause; | 1165 | chan->toggle_ext_pause = fsl_chan_toggle_ext_pause; |
| 1166 | /* Fall through */ | 1166 | fallthrough; |
| 1167 | case FSL_DMA_IP_83XX: | 1167 | case FSL_DMA_IP_83XX: |
| 1168 | chan->toggle_ext_start = fsl_chan_toggle_ext_start; | 1168 | chan->toggle_ext_start = fsl_chan_toggle_ext_start; |
| 1169 | chan->set_src_loop_size = fsl_chan_set_src_loop_size; | 1169 | chan->set_src_loop_size = fsl_chan_set_src_loop_size; |
| @@ -205,10 +205,10 @@ struct fsldma_chan { · 204 unmodified lines | |||
| 205 | #else | 205 | #else |
| 206 | static u64 fsl_ioread64(const u64 __iomem *addr) | 206 | static u64 fsl_ioread64(const u64 __iomem *addr) |
| 207 | { | 207 | { |
| 208 | u32 fsl_addr = lower_32_bits(addr); | 208 | u32 val_lo = in_le32((u32 __iomem *)addr); |
| 209 | u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32; | 209 | u32 val_hi = in_le32((u32 __iomem *)addr + 1); |
| 210 | 210 | ||
| 211 | return fsl_addr_hi | in_le32((u32 *)fsl_addr); | 211 | return ((u64)val_hi << 32) + val_lo; |
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | static void fsl_iowrite64(u64 val, u64 __iomem *addr) | 214 | static void fsl_iowrite64(u64 val, u64 __iomem *addr) |
| @@ -219,10 +219,10 @@ static void fsl_iowrite64(u64 val, u64 __iomem *addr) · 4 unmodified lines | |||
| 219 | 219 | ||
| 220 | static u64 fsl_ioread64be(const u64 __iomem *addr) | 220 | static u64 fsl_ioread64be(const u64 __iomem *addr) |
| 221 | { | 221 | { |
| 222 | u32 fsl_addr = lower_32_bits(addr); | 222 | u32 val_hi = in_be32((u32 __iomem *)addr); |
| 223 | u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32; | 223 | u32 val_lo = in_be32((u32 __iomem *)addr + 1); |
| 224 | 224 | ||
| 225 | return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1)); | 225 | return ((u64)val_hi << 32) + val_lo; |
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | static void fsl_iowrite64be(u64 val, u64 __iomem *addr) | 228 | static void fsl_iowrite64be(u64 val, u64 __iomem *addr) |
| @@ -556,7 +556,7 @@ static int imxdma_xfer_desc(struct imxdma_desc *d) · 555 unmodified lines | |||
| 556 | * We fall-through here intentionally, since a 2D transfer is | 556 | * We fall-through here intentionally, since a 2D transfer is |
| 557 | * similar to MEMCPY just adding the 2D slot configuration. | 557 | * similar to MEMCPY just adding the 2D slot configuration. |
| 558 | */ | 558 | */ |
| 559 | /* Fall through */ | 559 | fallthrough; |
| 560 | case IMXDMA_DESC_MEMCPY: | 560 | case IMXDMA_DESC_MEMCPY: |
| 561 | imx_dmav1_writel(imxdma, d->src, DMA_SAR(imxdmac->channel)); | 561 | imx_dmav1_writel(imxdma, d->src, DMA_SAR(imxdmac->channel)); |
| 562 | imx_dmav1_writel(imxdma, d->dest, DMA_DAR(imxdmac->channel)); | 562 | imx_dmav1_writel(imxdma, d->dest, DMA_DAR(imxdmac->channel)); |
| @@ -496,7 +496,7 @@ iop3xx_desc_init_xor(struct iop3xx_desc_aau *hw_desc, int src_cnt, · 495 unmodified lines | |||
| 496 | } | 496 | } |
| 497 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = edcr; | 497 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = edcr; |
| 498 | src_cnt = 24; | 498 | src_cnt = 24; |
| 499 | /* fall through */ | 499 | fallthrough; |
| 500 | case 17 ... 24: | 500 | case 17 ... 24: |
| 501 | if (!u_desc_ctrl.field.blk_ctrl) { | 501 | if (!u_desc_ctrl.field.blk_ctrl) { |
| 502 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; | 502 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; |
| @@ -510,7 +510,7 @@ iop3xx_desc_init_xor(struct iop3xx_desc_aau *hw_desc, int src_cnt, · 7 unmodified lines | |||
| 510 | } | 510 | } |
| 511 | hw_desc->src_edc[AAU_EDCR1_IDX].e_desc_ctrl = edcr; | 511 | hw_desc->src_edc[AAU_EDCR1_IDX].e_desc_ctrl = edcr; |
| 512 | src_cnt = 16; | 512 | src_cnt = 16; |
| 513 | /* fall through */ | 513 | fallthrough; |
| 514 | case 9 ... 16: | 514 | case 9 ... 16: |
| 515 | if (!u_desc_ctrl.field.blk_ctrl) | 515 | if (!u_desc_ctrl.field.blk_ctrl) |
| 516 | u_desc_ctrl.field.blk_ctrl = 0x2; /* use EDCR0 */ | 516 | u_desc_ctrl.field.blk_ctrl = 0x2; /* use EDCR0 */ |
| @@ -522,7 +522,7 @@ iop3xx_desc_init_xor(struct iop3xx_desc_aau *hw_desc, int src_cnt, · 5 unmodified lines | |||
| 522 | } | 522 | } |
| 523 | hw_desc->src_edc[AAU_EDCR0_IDX].e_desc_ctrl = edcr; | 523 | hw_desc->src_edc[AAU_EDCR0_IDX].e_desc_ctrl = edcr; |
| 524 | src_cnt = 8; | 524 | src_cnt = 8; |
| 525 | /* fall through */ | 525 | fallthrough; |
| 526 | case 2 ... 8: | 526 | case 2 ... 8: |
| 527 | shift = 1; | 527 | shift = 1; |
| 528 | for (i = 0; i < src_cnt; i++) { | 528 | for (i = 0; i < src_cnt; i++) { |
| @@ -602,19 +602,19 @@ iop_desc_init_null_xor(struct iop_adma_desc_slot *desc, int src_cnt, · 73 unmodified lines | |||
| 602 | case 25 ... 32: | 602 | case 25 ... 32: |
| 603 | u_desc_ctrl.field.blk_ctrl = 0x3; /* use EDCR[2:0] */ | 603 | u_desc_ctrl.field.blk_ctrl = 0x3; /* use EDCR[2:0] */ |
| 604 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; | 604 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; |
| 605 | /* fall through */ | 605 | fallthrough; |
| 606 | case 17 ... 24: | 606 | case 17 ... 24: |
| 607 | if (!u_desc_ctrl.field.blk_ctrl) { | 607 | if (!u_desc_ctrl.field.blk_ctrl) { |
| 608 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; | 608 | hw_desc->src_edc[AAU_EDCR2_IDX].e_desc_ctrl = 0; |
| 609 | u_desc_ctrl.field.blk_ctrl = 0x3; /* use EDCR[2:0] */ | 609 | u_desc_ctrl.field.blk_ctrl = 0x3; /* use EDCR[2:0] */ |
| 610 | } | 610 | } |
| 611 | hw_desc->src_edc[AAU_EDCR1_IDX].e_desc_ctrl = 0; | 611 | hw_desc->src_edc[AAU_EDCR1_IDX].e_desc_ctrl = 0; |
| 612 | /* fall through */ | 612 | fallthrough; |
| 613 | case 9 ... 16: | 613 | case 9 ... 16: |
| 614 | if (!u_desc_ctrl.field.blk_ctrl) | 614 | if (!u_desc_ctrl.field.blk_ctrl) |
| 615 | u_desc_ctrl.field.blk_ctrl = 0x2; /* use EDCR0 */ | 615 | u_desc_ctrl.field.blk_ctrl = 0x2; /* use EDCR0 */ |
| 616 | hw_desc->src_edc[AAU_EDCR0_IDX].e_desc_ctrl = 0; | 616 | hw_desc->src_edc[AAU_EDCR0_IDX].e_desc_ctrl = 0; |
| 617 | /* fall through */ | 617 | fallthrough; |
| 618 | case 1 ... 8: | 618 | case 1 ... 8: |
| 619 | if (!u_desc_ctrl.field.blk_ctrl && src_cnt > 4) | 619 | if (!u_desc_ctrl.field.blk_ctrl && src_cnt > 4) |
| 620 | u_desc_ctrl.field.blk_ctrl = 0x1; /* use mini-desc */ | 620 | u_desc_ctrl.field.blk_ctrl = 0x1; /* use mini-desc */ |
| @@ -483,7 +483,7 @@ static size_t nbpf_xfer_size(struct nbpf_device *nbpf, · 482 unmodified lines | |||
| 483 | 483 | ||
| 484 | default: | 484 | default: |
| 485 | pr_warn("%s(): invalid bus width %u\n", __func__, width); | 485 | pr_warn("%s(): invalid bus width %u\n", __func__, width); |
| 486 | /* fall through */ | 486 | fallthrough; |
| 487 | case DMA_SLAVE_BUSWIDTH_1_BYTE: | 487 | case DMA_SLAVE_BUSWIDTH_1_BYTE: |
| 488 | size = burst; | 488 | size = burst; |
| 489 | } | 489 | } |
| @@ -1061,16 +1061,16 @@ static bool _start(struct pl330_thread *thrd) · 1060 unmodified lines | |||
| 1061 | 1061 | ||
| 1062 | if (_state(thrd) == PL330_STATE_KILLING) | 1062 | if (_state(thrd) == PL330_STATE_KILLING) |
| 1063 | UNTIL(thrd, PL330_STATE_STOPPED) | 1063 | UNTIL(thrd, PL330_STATE_STOPPED) |
| 1064 | /* fall through */ | 1064 | fallthrough; |
| 1065 | 1065 | ||
| 1066 | case PL330_STATE_FAULTING: | 1066 | case PL330_STATE_FAULTING: |
| 1067 | _stop(thrd); | 1067 | _stop(thrd); |
| 1068 | /* fall through */ | 1068 | fallthrough; |
| 1069 | 1069 | ||
| 1070 | case PL330_STATE_KILLING: | 1070 | case PL330_STATE_KILLING: |
| 1071 | case PL330_STATE_COMPLETING: | 1071 | case PL330_STATE_COMPLETING: |
| 1072 | UNTIL(thrd, PL330_STATE_STOPPED) | 1072 | UNTIL(thrd, PL330_STATE_STOPPED) |
| 1073 | /* fall through */ | 1073 | fallthrough; |
| 1074 | 1074 | ||
| 1075 | case PL330_STATE_STOPPED: | 1075 | case PL330_STATE_STOPPED: |
| 1076 | return _trigger(thrd); | 1076 | return _trigger(thrd); |
| @@ -1121,7 +1121,6 @@ static u32 _emit_load(unsigned int dry_run, u8 buf[], · 44 unmodified lines | |||
| 1121 | 1121 | ||
| 1122 | switch (direction) { | 1122 | switch (direction) { |
| 1123 | case DMA_MEM_TO_MEM: | 1123 | case DMA_MEM_TO_MEM: |
| 1124 | /* fall through */ | ||
| 1125 | case DMA_MEM_TO_DEV: | 1124 | case DMA_MEM_TO_DEV: |
| 1126 | off += _emit_LD(dry_run, &buf[off], cond); | 1125 | off += _emit_LD(dry_run, &buf[off], cond); |
| 1127 | break; | 1126 | break; |
| @@ -1155,7 +1154,6 @@ static inline u32 _emit_store(unsigned int dry_run, u8 buf[], · 27 unmodified lines | |||
| 1155 | 1154 | ||
| 1156 | switch (direction) { | 1155 | switch (direction) { |
| 1157 | case DMA_MEM_TO_MEM: | 1156 | case DMA_MEM_TO_MEM: |
| 1158 | /* fall through */ | ||
| 1159 | case DMA_DEV_TO_MEM: | 1157 | case DMA_DEV_TO_MEM: |
| 1160 | off += _emit_ST(dry_run, &buf[off], cond); | 1158 | off += _emit_ST(dry_run, &buf[off], cond); |
| 1161 | break; | 1159 | break; |
| @@ -1216,7 +1214,6 @@ static int _bursts(struct pl330_dmac *pl330, unsigned dry_run, u8 buf[], · 54 unmodified lines | |||
| 1216 | 1214 | ||
| 1217 | switch (pxs->desc->rqtype) { | 1215 | switch (pxs->desc->rqtype) { |
| 1218 | case DMA_MEM_TO_DEV: | 1216 | case DMA_MEM_TO_DEV: |
| 1219 | /* fall through */ | ||
| 1220 | case DMA_DEV_TO_MEM: | 1217 | case DMA_DEV_TO_MEM: |
| 1221 | off += _ldst_peripheral(pl330, dry_run, &buf[off], pxs, cyc, | 1218 | off += _ldst_peripheral(pl330, dry_run, &buf[off], pxs, cyc, |
| 1222 | cond); | 1219 | cond); |
| @@ -1266,7 +1263,6 @@ static int _dregs(struct pl330_dmac *pl330, unsigned int dry_run, u8 buf[], · 43 unmodified lines | |||
| 1266 | 1263 | ||
| 1267 | switch (pxs->desc->rqtype) { | 1264 | switch (pxs->desc->rqtype) { |
| 1268 | case DMA_MEM_TO_DEV: | 1265 | case DMA_MEM_TO_DEV: |
| 1269 | /* fall through */ | ||
| 1270 | case DMA_DEV_TO_MEM: | 1266 | case DMA_DEV_TO_MEM: |
| 1271 | off += _emit_MOV(dry_run, &buf[off], CCR, dregs_ccr); | 1267 | off += _emit_MOV(dry_run, &buf[off], CCR, dregs_ccr); |
| 1272 | off += _ldst_peripheral(pl330, dry_run, &buf[off], pxs, 1, | 1268 | off += _ldst_peripheral(pl330, dry_run, &buf[off], pxs, 1, |
| @@ -383,7 +383,7 @@ static dma_async_tx_callback __ld_cleanup(struct shdma_chan *schan, bool all) · 382 unmodified lines | |||
| 383 | switch (desc->mark) { | 383 | switch (desc->mark) { |
| 384 | case DESC_COMPLETED: | 384 | case DESC_COMPLETED: |
| 385 | desc->mark = DESC_WAITING; | 385 | desc->mark = DESC_WAITING; |
| 386 | /* Fall through */ | 386 | fallthrough; |
| 387 | case DESC_WAITING: | 387 | case DESC_WAITING: |
| 388 | if (head_acked) | 388 | if (head_acked) |
| 389 | async_tx_ack(&desc->async_tx); | 389 | async_tx_ack(&desc->async_tx); |
| @@ -3375,7 +3375,7 @@ static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt) · 3374 unmodified lines | |||
| 3375 | pvt->ops = &family_types[F17_M70H_CPUS].ops; | 3375 | pvt->ops = &family_types[F17_M70H_CPUS].ops; |
| 3376 | break; | 3376 | break; |
| 3377 | } | 3377 | } |
| 3378 | /* fall through */ | 3378 | fallthrough; |
| 3379 | case 0x18: | 3379 | case 0x18: |
| 3380 | fam_type = &family_types[F17_CPUS]; | 3380 | fam_type = &family_types[F17_CPUS]; |
| 3381 | pvt->ops = &family_types[F17_CPUS].ops; | 3381 | pvt->ops = &family_types[F17_CPUS].ops; |
| @@ -55,6 +55,8 @@ static DEFINE_SPINLOCK(ghes_lock); · 54 unmodified lines | |||
| 55 | static bool __read_mostly force_load; | 55 | static bool __read_mostly force_load; |
| 56 | module_param(force_load, bool, 0); | 56 | module_param(force_load, bool, 0); |
| 57 | 57 | ||
| 58 | static bool system_scanned; | ||
| 59 | |||
| 58 | /* Memory Device - Type 17 of SMBIOS spec */ | 60 | /* Memory Device - Type 17 of SMBIOS spec */ |
| 59 | struct memdev_dmi_entry { | 61 | struct memdev_dmi_entry { |
| 60 | u8 type; | 62 | u8 type; |
| @@ -225,14 +227,12 @@ static void enumerate_dimms(const struct dmi_header *dh, void *arg) · 164 unmodified lines | |||
| 225 | 227 | ||
| 226 | static void ghes_scan_system(void) | 228 | static void ghes_scan_system(void) |
| 227 | { | 229 | { |
| 228 | static bool scanned; | 230 | if (system_scanned) |
| 229 | |||
| 230 | if (scanned) | ||
| 231 | return; | 231 | return; |
| 232 | 232 | ||
| 233 | dmi_walk(enumerate_dimms, &ghes_hw); | 233 | dmi_walk(enumerate_dimms, &ghes_hw); |
| 234 | 234 | ||
| 235 | scanned = true; | 235 | system_scanned = true; |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err) | 238 | void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err) |
| @@ -631,6 +631,8 @@ void ghes_edac_unregister(struct ghes *ghes) · 392 unmodified lines | |||
| 631 | 631 | ||
| 632 | mutex_lock(&ghes_reg_mutex); | 632 | mutex_lock(&ghes_reg_mutex); |
| 633 | 633 | ||
| 634 | system_scanned = false; | ||
| 635 | |||
| 634 | if (!refcount_dec_and_test(&ghes_refcount)) | 636 | if (!refcount_dec_and_test(&ghes_refcount)) |
| 635 | goto unlock; | 637 | goto unlock; |
| 636 | 638 | ||
| @@ -1710,9 +1710,9 @@ static void i7core_mce_output_error(struct mem_ctl_info *mci, · 1709 unmodified lines | |||
| 1710 | if (uncorrected_error) { | 1710 | if (uncorrected_error) { |
| 1711 | core_err_cnt = 1; | 1711 | core_err_cnt = 1; |
| 1712 | if (ripv) | 1712 | if (ripv) |
| 1713 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 1714 | else | ||
| 1715 | tp_event = HW_EVENT_ERR_UNCORRECTED; | 1713 | tp_event = HW_EVENT_ERR_UNCORRECTED; |
| 1714 | else | ||
| 1715 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 1716 | } else { | 1716 | } else { |
| 1717 | tp_event = HW_EVENT_ERR_CORRECTED; | 1717 | tp_event = HW_EVENT_ERR_CORRECTED; |
| 1718 | } | 1718 | } |
| @@ -198,7 +198,7 @@ static int apl_rd_reg(int port, int off, int op, void *data, size_t sz, char *na · 197 unmodified lines | |||
| 198 | switch (sz) { | 198 | switch (sz) { |
| 199 | case 8: | 199 | case 8: |
| 200 | ret = _apl_rd_reg(port, off + 4, op, (u32 *)(data + 4)); | 200 | ret = _apl_rd_reg(port, off + 4, op, (u32 *)(data + 4)); |
| 201 | /* fall through */ | 201 | fallthrough; |
| 202 | case 4: | 202 | case 4: |
| 203 | ret |= _apl_rd_reg(port, off, op, (u32 *)data); | 203 | ret |= _apl_rd_reg(port, off, op, (u32 *)data); |
| 204 | pnd2_printk(KERN_DEBUG, "%s=%x%08x ret=%d\n", name, | 204 | pnd2_printk(KERN_DEBUG, "%s=%x%08x ret=%d\n", name, |
| @@ -1155,7 +1155,7 @@ static void pnd2_mce_output_error(struct mem_ctl_info *mci, const struct mce *m, · 950 unmodified lines | |||
| 1155 | u32 optypenum = GET_BITFIELD(m->status, 4, 6); | 1155 | u32 optypenum = GET_BITFIELD(m->status, 4, 6); |
| 1156 | int rc; | 1156 | int rc; |
| 1157 | 1157 | ||
| 1158 | tp_event = uc_err ? (ripv ? HW_EVENT_ERR_FATAL : HW_EVENT_ERR_UNCORRECTED) : | 1158 | tp_event = uc_err ? (ripv ? HW_EVENT_ERR_UNCORRECTED : HW_EVENT_ERR_FATAL) : |
| 1159 | HW_EVENT_ERR_CORRECTED; | 1159 | HW_EVENT_ERR_CORRECTED; |
| 1160 | 1160 | ||
| 1161 | /* | 1161 | /* |
| @@ -2982,9 +2982,9 @@ static void sbridge_mce_output_error(struct mem_ctl_info *mci, · 2981 unmodified lines | |||
| 2982 | if (uncorrected_error) { | 2982 | if (uncorrected_error) { |
| 2983 | core_err_cnt = 1; | 2983 | core_err_cnt = 1; |
| 2984 | if (ripv) { | 2984 | if (ripv) { |
| 2985 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 2986 | } else { | ||
| 2987 | tp_event = HW_EVENT_ERR_UNCORRECTED; | 2985 | tp_event = HW_EVENT_ERR_UNCORRECTED; |
| 2986 | } else { | ||
| 2987 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 2988 | } | 2988 | } |
| 2989 | } else { | 2989 | } else { |
| 2990 | tp_event = HW_EVENT_ERR_CORRECTED; | 2990 | tp_event = HW_EVENT_ERR_CORRECTED; |
| @@ -493,9 +493,9 @@ static void skx_mce_output_error(struct mem_ctl_info *mci, · 492 unmodified lines | |||
| 493 | if (uncorrected_error) { | 493 | if (uncorrected_error) { |
| 494 | core_err_cnt = 1; | 494 | core_err_cnt = 1; |
| 495 | if (ripv) { | 495 | if (ripv) { |
| 496 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 497 | } else { | ||
| 498 | tp_event = HW_EVENT_ERR_UNCORRECTED; | 496 | tp_event = HW_EVENT_ERR_UNCORRECTED; |
| 497 | } else { | ||
| 498 | tp_event = HW_EVENT_ERR_FATAL; | ||
| 499 | } | 499 | } |
| 500 | } else { | 500 | } else { |
| 501 | tp_event = HW_EVENT_ERR_CORRECTED; | 501 | tp_event = HW_EVENT_ERR_CORRECTED; |
| @@ -957,7 +957,7 @@ static void set_broadcast_channel(struct fw_device *device, int generation) · 956 unmodified lines | |||
| 957 | device->bc_implemented = BC_IMPLEMENTED; | 957 | device->bc_implemented = BC_IMPLEMENTED; |
| 958 | break; | 958 | break; |
| 959 | } | 959 | } |
| 960 | /* else, fall through - to case address error */ | 960 | fallthrough; /* to case address error */ |
| 961 | case RCODE_ADDRESS_ERROR: | 961 | case RCODE_ADDRESS_ERROR: |
| 962 | device->bc_implemented = BC_UNIMPLEMENTED; | 962 | device->bc_implemented = BC_UNIMPLEMENTED; |
| 963 | } | 963 | } |
| @@ -277,7 +277,7 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation, · 276 unmodified lines | |||
| 277 | if ((data[0] & bit) == (data[1] & bit)) | 277 | if ((data[0] & bit) == (data[1] & bit)) |
| 278 | continue; | 278 | continue; |
| 279 | 279 | ||
| 280 | /* fall through - It's a 1394-1995 IRM, retry. */ | 280 | fallthrough; /* It's a 1394-1995 IRM, retry */ |
| 281 | default: | 281 | default: |
| 282 | if (retry) { | 282 | if (retry) { |
| 283 | retry--; | 283 | retry--; |
| @@ -54,7 +54,7 @@ static u32 *count_ports(u32 *sid, int *total_port_count, int *child_port_count) · 53 unmodified lines | |||
| 54 | switch (port_type) { | 54 | switch (port_type) { |
| 55 | case SELFID_PORT_CHILD: | 55 | case SELFID_PORT_CHILD: |
| 56 | (*child_port_count)++; | 56 | (*child_port_count)++; |
| 57 | /* fall through */ | 57 | fallthrough; |
| 58 | case SELFID_PORT_PARENT: | 58 | case SELFID_PORT_PARENT: |
| 59 | case SELFID_PORT_NCONN: | 59 | case SELFID_PORT_NCONN: |
| 60 | (*total_port_count)++; | 60 | (*total_port_count)++; |
| @@ -1097,14 +1097,14 @@ static void handle_registers(struct fw_card *card, struct fw_request *request, · 1096 unmodified lines | |||
| 1097 | rcode = RCODE_ADDRESS_ERROR; | 1097 | rcode = RCODE_ADDRESS_ERROR; |
| 1098 | break; | 1098 | break; |
| 1099 | } | 1099 | } |
| 1100 | /* else fall through */ | 1100 | fallthrough; |
| 1101 | 1101 | ||
| 1102 | case CSR_NODE_IDS: | 1102 | case CSR_NODE_IDS: |
| 1103 | /* | 1103 | /* |
| 1104 | * per IEEE 1394-2008 8.3.22.3, not IEEE 1394.1-2004 3.2.8 | 1104 | * per IEEE 1394-2008 8.3.22.3, not IEEE 1394.1-2004 3.2.8 |
| 1105 | * and 9.6, but interoperable with IEEE 1394.1-2004 bridges | 1105 | * and 9.6, but interoperable with IEEE 1394.1-2004 bridges |
| 1106 | */ | 1106 | */ |
| 1107 | /* fall through */ | 1107 | fallthrough; |
| 1108 | 1108 | ||
| 1109 | case CSR_STATE_CLEAR: | 1109 | case CSR_STATE_CLEAR: |
| 1110 | case CSR_STATE_SET: | 1110 | case CSR_STATE_SET: |
| @@ -1495,7 +1495,7 @@ static int handle_at_packet(struct context *context, · 1494 unmodified lines | |||
| 1495 | packet->ack = RCODE_GENERATION; | 1495 | packet->ack = RCODE_GENERATION; |
| 1496 | break; | 1496 | break; |
| 1497 | } | 1497 | } |
| 1498 | /* fall through */ | 1498 | fallthrough; |
| 1499 | 1499 | ||
| 1500 | default: | 1500 | default: |
| 1501 | packet->ack = RCODE_SEND_ERROR; | 1501 | packet->ack = RCODE_SEND_ERROR; |
| @@ -3054,7 +3054,7 @@ static int ohci_start_iso(struct fw_iso_context *base, · 1552 unmodified lines | |||
| 3054 | 3054 | ||
| 3055 | case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL: | 3055 | case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL: |
| 3056 | control |= IR_CONTEXT_BUFFER_FILL|IR_CONTEXT_MULTI_CHANNEL_MODE; | 3056 | control |= IR_CONTEXT_BUFFER_FILL|IR_CONTEXT_MULTI_CHANNEL_MODE; |
| 3057 | /* fall through */ | 3057 | fallthrough; |
| 3058 | case FW_ISO_CONTEXT_RECEIVE: | 3058 | case FW_ISO_CONTEXT_RECEIVE: |
| 3059 | index = ctx - ohci->ir_context_list; | 3059 | index = ctx - ohci->ir_context_list; |
| 3060 | match = (tags << 28) | (sync << 8) | ctx->base.channel; | 3060 | match = (tags << 28) | (sync << 8) | ctx->base.channel; |
| @@ -381,6 +381,7 @@ static int __init efisubsys_init(void) · 380 unmodified lines | |||
| 381 | efi_kobj = kobject_create_and_add("efi", firmware_kobj); | 381 | efi_kobj = kobject_create_and_add("efi", firmware_kobj); |
| 382 | if (!efi_kobj) { | 382 | if (!efi_kobj) { |
| 383 | pr_err("efi: Firmware registration failed.\n"); | 383 | pr_err("efi: Firmware registration failed.\n"); |
| 384 | destroy_workqueue(efi_rts_wq); | ||
| 384 | return -ENOMEM; | 385 | return -ENOMEM; |
| 385 | } | 386 | } |
| 386 | 387 | ||
| @@ -424,6 +425,7 @@ err_unregister: · 37 unmodified lines | |||
| 424 | generic_ops_unregister(); | 425 | generic_ops_unregister(); |
| 425 | err_put: | 426 | err_put: |
| 426 | kobject_put(efi_kobj); | 427 | kobject_put(efi_kobj); |
| 428 | destroy_workqueue(efi_rts_wq); | ||
| 427 | return error; | 429 | return error; |
| 428 | } | 430 | } |
| 429 | 431 | ||
| @@ -187,20 +187,28 @@ int efi_printk(const char *fmt, ...) · 186 unmodified lines | |||
| 187 | */ | 187 | */ |
| 188 | efi_status_t efi_parse_options(char const *cmdline) | 188 | efi_status_t efi_parse_options(char const *cmdline) |
| 189 | { | 189 | { |
| 190 | size_t len = strlen(cmdline) + 1; | 190 | size_t len; |
| 191 | efi_status_t status; | 191 | efi_status_t status; |
| 192 | char *str, *buf; | 192 | char *str, *buf; |
| 193 | 193 | ||
| 194 | if (!cmdline) | ||
| 195 | return EFI_SUCCESS; | ||
| 196 | |||
| 197 | len = strnlen(cmdline, COMMAND_LINE_SIZE - 1) + 1; | ||
| 194 | status = efi_bs_call(allocate_pool, EFI_LOADER_DATA, len, (void **)&buf); | 198 | status = efi_bs_call(allocate_pool, EFI_LOADER_DATA, len, (void **)&buf); |
| 195 | if (status != EFI_SUCCESS) | 199 | if (status != EFI_SUCCESS) |
| 196 | return status; | 200 | return status; |
| 197 | 201 | ||
| 198 | str = skip_spaces(memcpy(buf, cmdline, len)); | 202 | memcpy(buf, cmdline, len - 1); |
| 203 | buf[len - 1] = '\0'; | ||
| 204 | str = skip_spaces(buf); | ||
| 199 | 205 | ||
| 200 | while (*str) { | 206 | while (*str) { |
| 201 | char *param, *val; | 207 | char *param, *val; |
| 202 | 208 | ||
| 203 | str = next_arg(str, ¶m, &val); | 209 | str = next_arg(str, ¶m, &val); |
| 210 | if (!val && !strcmp(param, "--")) | ||
| 211 | break; | ||
| 204 | 212 | ||
| 205 | if (!strcmp(param, "nokaslr")) { | 213 | if (!strcmp(param, "nokaslr")) { |
| 206 | efi_nokaslr = true; | 214 | efi_nokaslr = true; |
| @@ -64,22 +64,6 @@ struct ti_sci_xfers_info { · 63 unmodified lines | |||
| 64 | spinlock_t xfer_lock; | 64 | spinlock_t xfer_lock; |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | /** | ||
| 68 | * struct ti_sci_rm_type_map - Structure representing TISCI Resource | ||
| 69 | * management representation of dev_ids. | ||
| 70 | * @dev_id: TISCI device ID | ||
| 71 | * @type: Corresponding id as identified by TISCI RM. | ||
| 72 | * | ||
| 73 | * Note: This is used only as a work around for using RM range apis | ||
| 74 | * for AM654 SoC. For future SoCs dev_id will be used as type | ||
| 75 | * for RM range APIs. In order to maintain ABI backward compatibility | ||
| 76 | * type is not being changed for AM654 SoC. | ||
| 77 | */ | ||
| 78 | struct ti_sci_rm_type_map { | ||
| 79 | u32 dev_id; | ||
| 80 | u16 type; | ||
| 81 | }; | ||
| 82 | |||
| 83 | /** | 67 | /** |
| 84 | * struct ti_sci_desc - Description of SoC integration | 68 | * struct ti_sci_desc - Description of SoC integration |
| 85 | * @default_host_id: Host identifier representing the compute entity | 69 | * @default_host_id: Host identifier representing the compute entity |
| @@ -87,14 +71,12 @@ struct ti_sci_rm_type_map { · 1 unmodified line | |||
| 87 | * @max_msgs: Maximum number of messages that can be pending | 71 | * @max_msgs: Maximum number of messages that can be pending |
| 88 | * simultaneously in the system | 72 | * simultaneously in the system |
| 89 | * @max_msg_size: Maximum size of data per message that can be handled. | 73 | * @max_msg_size: Maximum size of data per message that can be handled. |
| 90 | * @rm_type_map: RM resource type mapping structure. | ||
| 91 | */ | 74 | */ |
| 92 | struct ti_sci_desc { | 75 | struct ti_sci_desc { |
| 93 | u8 default_host_id; | 76 | u8 default_host_id; |
| 94 | int max_rx_timeout_ms; | 77 | int max_rx_timeout_ms; |
| 95 | int max_msgs; | 78 | int max_msgs; |
| 96 | int max_msg_size; | 79 | int max_msg_size; |
| 97 | struct ti_sci_rm_type_map *rm_type_map; | ||
| 98 | }; | 80 | }; |
| 99 | 81 | ||
| 100 | /** | 82 | /** |
| @@ -1710,33 +1692,6 @@ fail: · 1609 unmodified lines | |||
| 1710 | return ret; | 1692 | return ret; |
| 1711 | } | 1693 | } |
| 1712 | 1694 | ||
| 1713 | static int ti_sci_get_resource_type(struct ti_sci_info *info, u16 dev_id, | ||
| 1714 | u16 *type) | ||
| 1715 | { | ||
| 1716 | struct ti_sci_rm_type_map *rm_type_map = info->desc->rm_type_map; | ||
| 1717 | bool found = false; | ||
| 1718 | int i; | ||
| 1719 | |||
| 1720 | /* If map is not provided then assume dev_id is used as type */ | ||
| 1721 | if (!rm_type_map) { | ||
| 1722 | *type = dev_id; | ||
| 1723 | return 0; | ||
| 1724 | } | ||
| 1725 | |||
| 1726 | for (i = 0; rm_type_map[i].dev_id; i++) { | ||
| 1727 | if (rm_type_map[i].dev_id == dev_id) { | ||
| 1728 | *type = rm_type_map[i].type; | ||
| 1729 | found = true; | ||
| 1730 | break; | ||
| 1731 | } | ||
| 1732 | } | ||
| 1733 | |||
| 1734 | if (!found) | ||
| 1735 | return -EINVAL; | ||
| 1736 | |||
| 1737 | return 0; | ||
| 1738 | } | ||
| 1739 | |||
| 1740 | /** | 1695 | /** |
| 1741 | * ti_sci_get_resource_range - Helper to get a range of resources assigned | 1696 | * ti_sci_get_resource_range - Helper to get a range of resources assigned |
| 1742 | * to a host. Resource is uniquely identified by | 1697 | * to a host. Resource is uniquely identified by |
| @@ -1760,7 +1715,6 @@ static int ti_sci_get_resource_range(const struct ti_sci_handle *handle, · 17 unmodified lines | |||
| 1760 | struct ti_sci_xfer *xfer; | 1715 | struct ti_sci_xfer *xfer; |
| 1761 | struct ti_sci_info *info; | 1716 | struct ti_sci_info *info; |
| 1762 | struct device *dev; | 1717 | struct device *dev; |
| 1763 | u16 type; | ||
| 1764 | int ret = 0; | 1718 | int ret = 0; |
| 1765 | 1719 | ||
| 1766 | if (IS_ERR(handle)) | 1720 | if (IS_ERR(handle)) |
| @@ -1780,15 +1734,9 @@ static int ti_sci_get_resource_range(const struct ti_sci_handle *handle, · 13 unmodified lines | |||
| 1780 | return ret; | 1734 | return ret; |
| 1781 | } | 1735 | } |
| 1782 | 1736 | ||
| 1783 | ret = ti_sci_get_resource_type(info, dev_id, &type); | ||
| 1784 | if (ret) { | ||
| 1785 | dev_err(dev, "rm type lookup failed for %u\n", dev_id); | ||
| 1786 | goto fail; | ||
| 1787 | } | ||
| 1788 | |||
| 1789 | req = (struct ti_sci_msg_req_get_resource_range *)xfer->xfer_buf; | 1737 | req = (struct ti_sci_msg_req_get_resource_range *)xfer->xfer_buf; |
| 1790 | req->secondary_host = s_host; | 1738 | req->secondary_host = s_host; |
| 1791 | req->type = type & MSG_RM_RESOURCE_TYPE_MASK; | 1739 | req->type = dev_id & MSG_RM_RESOURCE_TYPE_MASK; |
| 1792 | req->subtype = subtype & MSG_RM_RESOURCE_SUBTYPE_MASK; | 1740 | req->subtype = subtype & MSG_RM_RESOURCE_SUBTYPE_MASK; |
| 1793 | 1741 | ||
| 1794 | ret = ti_sci_do_xfer(info, xfer); | 1742 | ret = ti_sci_do_xfer(info, xfer); |
| @@ -3260,61 +3208,50 @@ u32 ti_sci_get_num_resources(struct ti_sci_resource *res) · 1465 unmodified lines | |||
| 3260 | EXPORT_SYMBOL_GPL(ti_sci_get_num_resources); | 3208 | EXPORT_SYMBOL_GPL(ti_sci_get_num_resources); |
| 3261 | 3209 | ||
| 3262 | /** | 3210 | /** |
| 3263 | * devm_ti_sci_get_of_resource() - Get a TISCI resource assigned to a device | 3211 | * devm_ti_sci_get_resource_sets() - Get a TISCI resources assigned to a device |
| 3264 | * @handle: TISCI handle | 3212 | * @handle: TISCI handle |
| 3265 | * @dev: Device pointer to which the resource is assigned | 3213 | * @dev: Device pointer to which the resource is assigned |
| 3266 | * @dev_id: TISCI device id to which the resource is assigned | 3214 | * @dev_id: TISCI device id to which the resource is assigned |
| 3267 | * @of_prop: property name by which the resource are represented | 3215 | * @sub_types: Array of sub_types assigned corresponding to device |
| 3216 | * @sets: Number of sub_types | ||
| 3268 | * | 3217 | * |
| 3269 | * Return: Pointer to ti_sci_resource if all went well else appropriate | 3218 | * Return: Pointer to ti_sci_resource if all went well else appropriate |
| 3270 | * error pointer. | 3219 | * error pointer. |
| 3271 | */ | 3220 | */ |
| 3272 | struct ti_sci_resource * | 3221 | static struct ti_sci_resource * |
| 3273 | devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle, | 3222 | devm_ti_sci_get_resource_sets(const struct ti_sci_handle *handle, |
| 3274 | struct device *dev, u32 dev_id, char *of_prop) | 3223 | struct device *dev, u32 dev_id, u32 *sub_types, |
| 3224 | u32 sets) | ||
| 3275 | { | 3225 | { |
| 3276 | struct ti_sci_resource *res; | 3226 | struct ti_sci_resource *res; |
| 3277 | bool valid_set = false; | 3227 | bool valid_set = false; |
| 3278 | u32 resource_subtype; | ||
| 3279 | int i, ret; | 3228 | int i, ret; |
| 3280 | 3229 | ||
| 3281 | res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL); | 3230 | res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL); |
| 3282 | if (!res) | 3231 | if (!res) |
| 3283 | return ERR_PTR(-ENOMEM); | 3232 | return ERR_PTR(-ENOMEM); |
| 3284 | 3233 | ||
| 3285 | ret = of_property_count_elems_of_size(dev_of_node(dev), of_prop, | 3234 | res->sets = sets; |
| 3286 | sizeof(u32)); | ||
| 3287 | if (ret < 0) { | ||
| 3288 | dev_err(dev, "%s resource type ids not available\n", of_prop); | ||
| 3289 | return ERR_PTR(ret); | ||
| 3290 | } | ||
| 3291 | res->sets = ret; | ||
| 3292 | |||
| 3293 | res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc), | 3235 | res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc), |
| 3294 | GFP_KERNEL); | 3236 | GFP_KERNEL); |
| 3295 | if (!res->desc) | 3237 | if (!res->desc) |
| 3296 | return ERR_PTR(-ENOMEM); | 3238 | return ERR_PTR(-ENOMEM); |
| 3297 | 3239 | ||
| 3298 | for (i = 0; i < res->sets; i++) { | 3240 | for (i = 0; i < res->sets; i++) { |
| 3299 | ret = of_property_read_u32_index(dev_of_node(dev), of_prop, i, | ||
| 3300 | &resource_subtype); | ||
| 3301 | if (ret) | ||
| 3302 | return ERR_PTR(-EINVAL); | ||
| 3303 | |||
| 3304 | ret = handle->ops.rm_core_ops.get_range(handle, dev_id, | 3241 | ret = handle->ops.rm_core_ops.get_range(handle, dev_id, |
| 3305 | resource_subtype, | 3242 | sub_types[i], |
| 3306 | &res->desc[i].start, | 3243 | &res->desc[i].start, |
| 3307 | &res->desc[i].num); | 3244 | &res->desc[i].num); |
| 3308 | if (ret) { | 3245 | if (ret) { |
| 3309 | dev_dbg(dev, "dev = %d subtype %d not allocated for this host\n", | 3246 | dev_dbg(dev, "dev = %d subtype %d not allocated for this host\n", |
| 3310 | dev_id, resource_subtype); | 3247 | dev_id, sub_types[i]); |
| 3311 | res->desc[i].start = 0; | 3248 | res->desc[i].start = 0; |
| 3312 | res->desc[i].num = 0; | 3249 | res->desc[i].num = 0; |
| 3313 | continue; | 3250 | continue; |
| 3314 | } | 3251 | } |
| 3315 | 3252 | ||
| 3316 | dev_dbg(dev, "dev = %d, subtype = %d, start = %d, num = %d\n", | 3253 | dev_dbg(dev, "dev = %d, subtype = %d, start = %d, num = %d\n", |
| 3317 | dev_id, resource_subtype, res->desc[i].start, | 3254 | dev_id, sub_types[i], res->desc[i].start, |
| 3318 | res->desc[i].num); | 3255 | res->desc[i].num); |
| 3319 | 3256 | ||
| 3320 | valid_set = true; | 3257 | valid_set = true; |
| @@ -3332,6 +3269,62 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle, · 11 unmodified lines | |||
| 3332 | return ERR_PTR(-EINVAL); | 3269 | return ERR_PTR(-EINVAL); |
| 3333 | } | 3270 | } |
| 3334 | 3271 | ||
| 3272 | /** | ||
| 3273 | * devm_ti_sci_get_of_resource() - Get a TISCI resource assigned to a device | ||
| 3274 | * @handle: TISCI handle | ||
| 3275 | * @dev: Device pointer to which the resource is assigned | ||
| 3276 | * @dev_id: TISCI device id to which the resource is assigned | ||
| 3277 | * @of_prop: property name by which the resource are represented | ||
| 3278 | * | ||
| 3279 | * Return: Pointer to ti_sci_resource if all went well else appropriate | ||
| 3280 | * error pointer. | ||
| 3281 | */ | ||
| 3282 | struct ti_sci_resource * | ||
| 3283 | devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle, | ||
| 3284 | struct device *dev, u32 dev_id, char *of_prop) | ||
| 3285 | { | ||
| 3286 | struct ti_sci_resource *res; | ||
| 3287 | u32 *sub_types; | ||
| 3288 | int sets; | ||
| 3289 | |||
| 3290 | sets = of_property_count_elems_of_size(dev_of_node(dev), of_prop, | ||
| 3291 | sizeof(u32)); | ||
| 3292 | if (sets < 0) { | ||
| 3293 | dev_err(dev, "%s resource type ids not available\n", of_prop); | ||
| 3294 | return ERR_PTR(sets); | ||
| 3295 | } | ||
| 3296 | |||
| 3297 | sub_types = kcalloc(sets, sizeof(*sub_types), GFP_KERNEL); | ||
| 3298 | if (!sub_types) | ||
| 3299 | return ERR_PTR(-ENOMEM); | ||
| 3300 | |||
| 3301 | of_property_read_u32_array(dev_of_node(dev), of_prop, sub_types, sets); | ||
| 3302 | res = devm_ti_sci_get_resource_sets(handle, dev, dev_id, sub_types, | ||
| 3303 | sets); | ||
| 3304 | |||
| 3305 | kfree(sub_types); | ||
| 3306 | return res; | ||
| 3307 | } | ||
| 3308 | EXPORT_SYMBOL_GPL(devm_ti_sci_get_of_resource); | ||
| 3309 | |||
| 3310 | /** | ||
| 3311 | * devm_ti_sci_get_resource() - Get a resource range assigned to the device | ||
| 3312 | * @handle: TISCI handle | ||
| 3313 | * @dev: Device pointer to which the resource is assigned | ||
| 3314 | * @dev_id: TISCI device id to which the resource is assigned | ||
| 3315 | * @suub_type: TISCI resource subytpe representing the resource. | ||
| 3316 | * | ||
| 3317 | * Return: Pointer to ti_sci_resource if all went well else appropriate | ||
| 3318 | * error pointer. | ||
| 3319 | */ | ||
| 3320 | struct ti_sci_resource * | ||
| 3321 | devm_ti_sci_get_resource(const struct ti_sci_handle *handle, struct device *dev, | ||
| 3322 | u32 dev_id, u32 sub_type) | ||
| 3323 | { | ||
| 3324 | return devm_ti_sci_get_resource_sets(handle, dev, dev_id, &sub_type, 1); | ||
| 3325 | } | ||
| 3326 | EXPORT_SYMBOL_GPL(devm_ti_sci_get_resource); | ||
| 3327 | |||
| 3335 | static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode, | 3328 | static int tisci_reboot_handler(struct notifier_block *nb, unsigned long mode, |
| 3336 | void *cmd) | 3329 | void *cmd) |
| 3337 | { | 3330 | { |
| @@ -3352,17 +3345,6 @@ static const struct ti_sci_desc ti_sci_pmmc_k2g_desc = { · 14 unmodified lines | |||
| 3352 | /* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */ | 3345 | /* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */ |
| 3353 | .max_msgs = 20, | 3346 | .max_msgs = 20, |
| 3354 | .max_msg_size = 64, | 3347 | .max_msg_size = 64, |
| 3355 | .rm_type_map = NULL, | ||
| 3356 | }; | ||
| 3357 | |||
| 3358 | static struct ti_sci_rm_type_map ti_sci_am654_rm_type_map[] = { | ||
| 3359 | {.dev_id = 56, .type = 0x00b}, /* GIC_IRQ */ | ||
| 3360 | {.dev_id = 179, .type = 0x000}, /* MAIN_NAV_UDMASS_IA0 */ | ||
| 3361 | {.dev_id = 187, .type = 0x009}, /* MAIN_NAV_RA */ | ||
| 3362 | {.dev_id = 188, .type = 0x006}, /* MAIN_NAV_UDMAP */ | ||
| 3363 | {.dev_id = 194, .type = 0x007}, /* MCU_NAV_UDMAP */ | ||
| 3364 | {.dev_id = 195, .type = 0x00a}, /* MCU_NAV_RA */ | ||
| 3365 | {.dev_id = 0, .type = 0x000}, /* end of table */ | ||
| 3366 | }; | 3348 | }; |
| 3367 | 3349 | ||
| 3368 | /* Description for AM654 */ | 3350 | /* Description for AM654 */ |
| @@ -3373,7 +3355,6 @@ static const struct ti_sci_desc ti_sci_pmmc_am654_desc = { · 4 unmodified lines | |||
| 3373 | /* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */ | 3355 | /* Limited by MBOX_TX_QUEUE_LEN. K2G can handle upto 128 messages! */ |
| 3374 | .max_msgs = 20, | 3356 | .max_msgs = 20, |
| 3375 | .max_msg_size = 60, | 3357 | .max_msg_size = 60, |
| 3376 | .rm_type_map = ti_sci_am654_rm_type_map, | ||
| 3377 | }; | 3358 | }; |
| 3378 | 3359 | ||
| 3379 | static const struct of_device_id ti_sci_of_match[] = { | 3360 | static const struct of_device_id ti_sci_of_match[] = { |
| @@ -303,16 +303,16 @@ static int aspeed_sgpio_set_type(struct irq_data *d, unsigned int type) · 302 unmodified lines | |||
| 303 | switch (type & IRQ_TYPE_SENSE_MASK) { | 303 | switch (type & IRQ_TYPE_SENSE_MASK) { |
| 304 | case IRQ_TYPE_EDGE_BOTH: | 304 | case IRQ_TYPE_EDGE_BOTH: |
| 305 | type2 |= bit; | 305 | type2 |= bit; |
| 306 | /* fall through */ | 306 | fallthrough; |
| 307 | case IRQ_TYPE_EDGE_RISING: | 307 | case IRQ_TYPE_EDGE_RISING: |
| 308 | type0 |= bit; | 308 | type0 |= bit; |
| 309 | /* fall through */ | 309 | fallthrough; |
| 310 | case IRQ_TYPE_EDGE_FALLING: | 310 | case IRQ_TYPE_EDGE_FALLING: |
| 311 | handler = handle_edge_irq; | 311 | handler = handle_edge_irq; |
| 312 | break; | 312 | break; |
| 313 | case IRQ_TYPE_LEVEL_HIGH: | 313 | case IRQ_TYPE_LEVEL_HIGH: |
| 314 | type0 |= bit; | 314 | type0 |= bit; |
| 315 | /* fall through */ | 315 | fallthrough; |
| 316 | case IRQ_TYPE_LEVEL_LOW: | 316 | case IRQ_TYPE_LEVEL_LOW: |
| 317 | type1 |= bit; | 317 | type1 |= bit; |
| 318 | handler = handle_level_irq; | 318 | handler = handle_level_irq; |
| @@ -611,16 +611,16 @@ static int aspeed_gpio_set_type(struct irq_data *d, unsigned int type) · 610 unmodified lines | |||
| 611 | switch (type & IRQ_TYPE_SENSE_MASK) { | 611 | switch (type & IRQ_TYPE_SENSE_MASK) { |
| 612 | case IRQ_TYPE_EDGE_BOTH: | 612 | case IRQ_TYPE_EDGE_BOTH: |
| 613 | type2 |= bit; | 613 | type2 |= bit; |
| 614 | /* fall through */ | 614 | fallthrough; |
| 615 | case IRQ_TYPE_EDGE_RISING: | 615 | case IRQ_TYPE_EDGE_RISING: |
| 616 | type0 |= bit; | 616 | type0 |= bit; |
| 617 | /* fall through */ | 617 | fallthrough; |
| 618 | case IRQ_TYPE_EDGE_FALLING: | 618 | case IRQ_TYPE_EDGE_FALLING: |
| 619 | handler = handle_edge_irq; | 619 | handler = handle_edge_irq; |
| 620 | break; | 620 | break; |
| 621 | case IRQ_TYPE_LEVEL_HIGH: | 621 | case IRQ_TYPE_LEVEL_HIGH: |
| 622 | type0 |= bit; | 622 | type0 |= bit; |
| 623 | /* fall through */ | 623 | fallthrough; |
| 624 | case IRQ_TYPE_LEVEL_LOW: | 624 | case IRQ_TYPE_LEVEL_LOW: |
| 625 | type1 |= bit; | 625 | type1 |= bit; |
| 626 | handler = handle_level_irq; | 626 | handler = handle_level_irq; |
| @@ -129,7 +129,7 @@ static int ath79_gpio_irq_set_type(struct irq_data *data, · 128 unmodified lines | |||
| 129 | 129 | ||
| 130 | case IRQ_TYPE_LEVEL_HIGH: | 130 | case IRQ_TYPE_LEVEL_HIGH: |
| 131 | polarity |= mask; | 131 | polarity |= mask; |
| 132 | /* fall through */ | 132 | fallthrough; |
| 133 | case IRQ_TYPE_LEVEL_LOW: | 133 | case IRQ_TYPE_LEVEL_LOW: |
| 134 | type |= mask; | 134 | type |= mask; |
| 135 | break; | 135 | break; |
| @@ -617,14 +617,12 @@ static int sprd_eic_probe(struct platform_device *pdev) · 616 unmodified lines | |||
| 617 | sprd_eic->chip.free = sprd_eic_free; | 617 | sprd_eic->chip.free = sprd_eic_free; |
| 618 | sprd_eic->chip.set_config = sprd_eic_set_config; | 618 | sprd_eic->chip.set_config = sprd_eic_set_config; |
| 619 | sprd_eic->chip.set = sprd_eic_set; | 619 | sprd_eic->chip.set = sprd_eic_set; |
| 620 | /* fall-through */ | 620 | fallthrough; |
| 621 | case SPRD_EIC_ASYNC: | 621 | case SPRD_EIC_ASYNC: |
| 622 | /* fall-through */ | ||
| 623 | case SPRD_EIC_SYNC: | 622 | case SPRD_EIC_SYNC: |
| 624 | sprd_eic->chip.get = sprd_eic_get; | 623 | sprd_eic->chip.get = sprd_eic_get; |
| 625 | break; | 624 | break; |
| 626 | case SPRD_EIC_LATCH: | 625 | case SPRD_EIC_LATCH: |
| 627 | /* fall-through */ | ||
| 628 | default: | 626 | default: |
| 629 | break; | 627 | break; |
| 630 | } | 628 | } |
| @@ -308,7 +308,7 @@ static void stmpe_dbg_show_one(struct seq_file *s, · 307 unmodified lines | |||
| 308 | if (ret < 0) | 308 | if (ret < 0) |
| 309 | return; | 309 | return; |
| 310 | edge_det = !!(ret & mask); | 310 | edge_det = !!(ret & mask); |
| 311 | /* fall through */ | 311 | fallthrough; |
| 312 | case STMPE1801: | 312 | case STMPE1801: |
| 313 | rise_reg = stmpe->regs[STMPE_IDX_GPRER_LSB + bank]; | 313 | rise_reg = stmpe->regs[STMPE_IDX_GPRER_LSB + bank]; |
| 314 | fall_reg = stmpe->regs[STMPE_IDX_GPFER_LSB + bank]; | 314 | fall_reg = stmpe->regs[STMPE_IDX_GPFER_LSB + bank]; |
| @@ -321,7 +321,7 @@ static void stmpe_dbg_show_one(struct seq_file *s, · 6 unmodified lines | |||
| 321 | if (ret < 0) | 321 | if (ret < 0) |
| 322 | return; | 322 | return; |
| 323 | fall = !!(ret & mask); | 323 | fall = !!(ret & mask); |
| 324 | /* fall through */ | 324 | fallthrough; |
| 325 | case STMPE801: | 325 | case STMPE801: |
| 326 | case STMPE1600: | 326 | case STMPE1600: |
| 327 | irqen_reg = stmpe->regs[STMPE_IDX_IEGPIOR_LSB + bank]; | 327 | irqen_reg = stmpe->regs[STMPE_IDX_IEGPIOR_LSB + bank]; |
| @@ -1264,7 +1264,7 @@ static int acpi_gpio_package_count(const union acpi_object *obj) · 1263 unmodified lines | |||
| 1264 | switch (element->type) { | 1264 | switch (element->type) { |
| 1265 | case ACPI_TYPE_LOCAL_REFERENCE: | 1265 | case ACPI_TYPE_LOCAL_REFERENCE: |
| 1266 | element += 3; | 1266 | element += 3; |
| 1267 | /* Fallthrough */ | 1267 | fallthrough; |
| 1268 | case ACPI_TYPE_INTEGER: | 1268 | case ACPI_TYPE_INTEGER: |
| 1269 | element++; | 1269 | element++; |
| 1270 | count++; | 1270 | count++; |
| @@ -152,7 +152,7 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev, · 151 unmodified lines | |||
| 152 | dev_warn(adev->dev, | 152 | dev_warn(adev->dev, |
| 153 | "Invalid sdma engine id (%d), using engine id 0\n", | 153 | "Invalid sdma engine id (%d), using engine id 0\n", |
| 154 | engine_id); | 154 | engine_id); |
| 155 | /* fall through */ | 155 | fallthrough; |
| 156 | case 0: | 156 | case 0: |
| 157 | sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, | 157 | sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, |
| 158 | mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; | 158 | mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; |
| @@ -195,19 +195,32 @@ static uint32_t get_sdma_rlc_reg_offset(struct amdgpu_device *adev, · 194 unmodified lines | |||
| 195 | unsigned int engine_id, | 195 | unsigned int engine_id, |
| 196 | unsigned int queue_id) | 196 | unsigned int queue_id) |
| 197 | { | 197 | { |
| 198 | uint32_t sdma_engine_reg_base[2] = { | 198 | uint32_t sdma_engine_reg_base = 0; |
| 199 | SOC15_REG_OFFSET(SDMA0, 0, | 199 | uint32_t sdma_rlc_reg_offset; |
| 200 | mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL, | 200 | |
| 201 | SOC15_REG_OFFSET(SDMA1, 0, | 201 | switch (engine_id) { |
| 202 | mmSDMA1_RLC0_RB_CNTL) - mmSDMA1_RLC0_RB_CNTL | 202 | default: |
| 203 | }; | 203 | dev_warn(adev->dev, |
| 204 | uint32_t retval = sdma_engine_reg_base[engine_id] | 204 | "Invalid sdma engine id (%d), using engine id 0\n", |
| 205 | engine_id); | ||
| 206 | fallthrough; | ||
| 207 | case 0: | ||
| 208 | sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA0, 0, | ||
| 209 | mmSDMA0_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; | ||
| 210 | break; | ||
| 211 | case 1: | ||
| 212 | sdma_engine_reg_base = SOC15_REG_OFFSET(SDMA1, 0, | ||
| 213 | mmSDMA1_RLC0_RB_CNTL) - mmSDMA0_RLC0_RB_CNTL; | ||
| 214 | break; | ||
| 215 | } | ||
| 216 | |||
| 217 | sdma_rlc_reg_offset = sdma_engine_reg_base | ||
| 205 | + queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL); | 218 | + queue_id * (mmSDMA0_RLC1_RB_CNTL - mmSDMA0_RLC0_RB_CNTL); |
| 206 | 219 | ||
| 207 | pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id, | 220 | pr_debug("RLC register offset for SDMA%d RLC%d: 0x%x\n", engine_id, |
| 208 | queue_id, retval); | 221 | queue_id, sdma_rlc_reg_offset); |
| 209 | 222 | ||
| 210 | return retval; | 223 | return sdma_rlc_reg_offset; |
| 211 | } | 224 | } |
| 212 | 225 | ||
| 213 | static inline struct v9_mqd *get_mqd(void *mqd) | 226 | static inline struct v9_mqd *get_mqd(void *mqd) |
| @@ -179,6 +179,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) · 178 unmodified lines | |||
| 179 | case CHIP_VEGA20: | 179 | case CHIP_VEGA20: |
| 180 | case CHIP_ARCTURUS: | 180 | case CHIP_ARCTURUS: |
| 181 | case CHIP_SIENNA_CICHLID: | 181 | case CHIP_SIENNA_CICHLID: |
| 182 | case CHIP_NAVY_FLOUNDER: | ||
| 182 | /* enable runpm if runpm=1 */ | 183 | /* enable runpm if runpm=1 */ |
| 183 | if (amdgpu_runtime_pm > 0) | 184 | if (amdgpu_runtime_pm > 0) |
| 184 | adev->runpm = true; | 185 | adev->runpm = true; |
| @@ -678,8 +679,12 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file · 493 unmodified lines | |||
| 678 | * in the bitfields */ | 679 | * in the bitfields */ |
| 679 | if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK) | 680 | if (se_num == AMDGPU_INFO_MMR_SE_INDEX_MASK) |
| 680 | se_num = 0xffffffff; | 681 | se_num = 0xffffffff; |
| 682 | else if (se_num >= AMDGPU_GFX_MAX_SE) | ||
| 683 | return -EINVAL; | ||
| 681 | if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK) | 684 | if (sh_num == AMDGPU_INFO_MMR_SH_INDEX_MASK) |
| 682 | sh_num = 0xffffffff; | 685 | sh_num = 0xffffffff; |
| 686 | else if (sh_num >= AMDGPU_GFX_MAX_SH_PER_SE) | ||
| 687 | return -EINVAL; | ||
| 683 | 688 | ||
| 684 | if (info->read_mmr_reg.count > 128) | 689 | if (info->read_mmr_reg.count > 128) |
| 685 | return -EINVAL; | 690 | return -EINVAL; |
| @@ -522,8 +522,7 @@ static int psp_asd_load(struct psp_context *psp) · 521 unmodified lines | |||
| 522 | * add workaround to bypass it for sriov now. | 522 | * add workaround to bypass it for sriov now. |
| 523 | * TODO: add version check to make it common | 523 | * TODO: add version check to make it common |
| 524 | */ | 524 | */ |
| 525 | if (amdgpu_sriov_vf(psp->adev) || | 525 | if (amdgpu_sriov_vf(psp->adev) || !psp->asd_fw) |
| 526 | (psp->adev->asic_type == CHIP_NAVY_FLOUNDER)) | ||
| 527 | return 0; | 526 | return 0; |
| 528 | 527 | ||
| 529 | cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); | 528 | cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); |
| @@ -1243,7 +1243,6 @@ void amdgpu_ras_debugfs_remove(struct amdgpu_device *adev, · 1242 unmodified lines | |||
| 1243 | if (!obj || !obj->ent) | 1243 | if (!obj || !obj->ent) |
| 1244 | return; | 1244 | return; |
| 1245 | 1245 | ||
| 1246 | debugfs_remove(obj->ent); | ||
| 1247 | obj->ent = NULL; | 1246 | obj->ent = NULL; |
| 1248 | put_obj(obj); | 1247 | put_obj(obj); |
| 1249 | } | 1248 | } |
| @@ -1257,7 +1256,6 @@ static void amdgpu_ras_debugfs_remove_all(struct amdgpu_device *adev) · 7 unmodified lines | |||
| 1257 | amdgpu_ras_debugfs_remove(adev, &obj->head); | 1256 | amdgpu_ras_debugfs_remove(adev, &obj->head); |
| 1258 | } | 1257 | } |
| 1259 | 1258 | ||
| 1260 | debugfs_remove_recursive(con->dir); | ||
| 1261 | con->dir = NULL; | 1259 | con->dir = NULL; |
| 1262 | } | 1260 | } |
| 1263 | /* debugfs end */ | 1261 | /* debugfs end */ |
| @@ -462,7 +462,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev, · 461 unmodified lines | |||
| 462 | unsigned int pages; | 462 | unsigned int pages; |
| 463 | int i, r; | 463 | int i, r; |
| 464 | 464 | ||
| 465 | *sgt = kmalloc(sizeof(*sg), GFP_KERNEL); | 465 | *sgt = kmalloc(sizeof(**sgt), GFP_KERNEL); |
| 466 | if (!*sgt) | 466 | if (!*sgt) |
| 467 | return -ENOMEM; | 467 | return -ENOMEM; |
| 468 | 468 | ||
| @@ -7263,10 +7263,8 @@ static void gfx_v10_0_update_medium_grain_clock_gating(struct amdgpu_device *ade · 7262 unmodified lines | |||
| 7263 | def = data = RREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE); | 7263 | def = data = RREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE); |
| 7264 | data &= ~(RLC_CGTT_MGCG_OVERRIDE__GRBM_CGTT_SCLK_OVERRIDE_MASK | | 7264 | data &= ~(RLC_CGTT_MGCG_OVERRIDE__GRBM_CGTT_SCLK_OVERRIDE_MASK | |
| 7265 | RLC_CGTT_MGCG_OVERRIDE__GFXIP_MGCG_OVERRIDE_MASK | | 7265 | RLC_CGTT_MGCG_OVERRIDE__GFXIP_MGCG_OVERRIDE_MASK | |
| 7266 | RLC_CGTT_MGCG_OVERRIDE__GFXIP_MGLS_OVERRIDE_MASK); | 7266 | RLC_CGTT_MGCG_OVERRIDE__GFXIP_MGLS_OVERRIDE_MASK | |
| 7267 | 7267 | RLC_CGTT_MGCG_OVERRIDE__ENABLE_CGTS_LEGACY_MASK); | |
| 7268 | /* only for Vega10 & Raven1 */ | ||
| 7269 | data |= RLC_CGTT_MGCG_OVERRIDE__RLC_CGTT_SCLK_OVERRIDE_MASK; | ||
| 7270 | 7268 | ||
| 7271 | if (def != data) | 7269 | if (def != data) |
| 7272 | WREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE, data); | 7270 | WREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE, data); |
| @@ -3250,7 +3250,7 @@ static void gfx_v8_0_tiling_mode_table_init(struct amdgpu_device *adev) · 3249 unmodified lines | |||
| 3250 | dev_warn(adev->dev, | 3250 | dev_warn(adev->dev, |
| 3251 | "Unknown chip type (%d) in function gfx_v8_0_tiling_mode_table_init() falling through to CHIP_CARRIZO\n", | 3251 | "Unknown chip type (%d) in function gfx_v8_0_tiling_mode_table_init() falling through to CHIP_CARRIZO\n", |
| 3252 | adev->asic_type); | 3252 | adev->asic_type); |
| 3253 | /* fall through */ | 3253 | fallthrough; |
| 3254 | 3254 | ||
| 3255 | case CHIP_CARRIZO: | 3255 | case CHIP_CARRIZO: |
| 3256 | modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 3256 | modearray[0] = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
| @@ -691,6 +691,7 @@ static const struct soc15_reg_golden golden_settings_gc_9_4_1_arct[] = · 690 unmodified lines | |||
| 691 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmTCP_CHAN_STEER_5_ARCT, 0x3ff, 0x135), | 691 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmTCP_CHAN_STEER_5_ARCT, 0x3ff, 0x135), |
| 692 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_CONFIG, 0xffffffff, 0x011A0000), | 692 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_CONFIG, 0xffffffff, 0x011A0000), |
| 693 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_FIFO_SIZES, 0xffffffff, 0x00000f00), | 693 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmSQ_FIFO_SIZES, 0xffffffff, 0x00000f00), |
| 694 | SOC15_REG_GOLDEN_VALUE(GC, 0, mmTCP_UTCL1_CNTL1, 0x30000000, 0x30000000) | ||
| 694 | }; | 695 | }; |
| 695 | 696 | ||
| 696 | static const struct soc15_reg_rlcg rlcg_access_gc_9_0[] = { | 697 | static const struct soc15_reg_rlcg rlcg_access_gc_9_0[] = { |
| @@ -135,6 +135,12 @@ static void gfxhub_v2_1_init_cache_regs(struct amdgpu_device *adev) · 134 unmodified lines | |||
| 135 | { | 135 | { |
| 136 | uint32_t tmp; | 136 | uint32_t tmp; |
| 137 | 137 | ||
| 138 | /* These registers are not accessible to VF-SRIOV. | ||
| 139 | * The PF will program them instead. | ||
| 140 | */ | ||
| 141 | if (amdgpu_sriov_vf(adev)) | ||
| 142 | return; | ||
| 143 | |||
| 138 | /* Setup L2 cache */ | 144 | /* Setup L2 cache */ |
| 139 | tmp = RREG32_SOC15(GC, 0, mmGCVM_L2_CNTL); | 145 | tmp = RREG32_SOC15(GC, 0, mmGCVM_L2_CNTL); |
| 140 | tmp = REG_SET_FIELD(tmp, GCVM_L2_CNTL, ENABLE_L2_CACHE, 1); | 146 | tmp = REG_SET_FIELD(tmp, GCVM_L2_CNTL, ENABLE_L2_CACHE, 1); |
| @@ -190,6 +196,12 @@ static void gfxhub_v2_1_enable_system_domain(struct amdgpu_device *adev) · 49 unmodified lines | |||
| 190 | 196 | ||
| 191 | static void gfxhub_v2_1_disable_identity_aperture(struct amdgpu_device *adev) | 197 | static void gfxhub_v2_1_disable_identity_aperture(struct amdgpu_device *adev) |
| 192 | { | 198 | { |
| 199 | /* These registers are not accessible to VF-SRIOV. | ||
| 200 | * The PF will program them instead. | ||
| 201 | */ | ||
| 202 | if (amdgpu_sriov_vf(adev)) | ||
| 203 | return; | ||
| 204 | |||
| 193 | WREG32_SOC15(GC, 0, mmGCVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, | 205 | WREG32_SOC15(GC, 0, mmGCVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, |
| 194 | 0xFFFFFFFF); | 206 | 0xFFFFFFFF); |
| 195 | WREG32_SOC15(GC, 0, mmGCVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_HI32, | 207 | WREG32_SOC15(GC, 0, mmGCVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_HI32, |
| @@ -326,6 +338,13 @@ void gfxhub_v2_1_set_fault_enable_default(struct amdgpu_device *adev, · 130 unmodified lines | |||
| 326 | bool value) | 338 | bool value) |
| 327 | { | 339 | { |
| 328 | u32 tmp; | 340 | u32 tmp; |
| 341 | |||
| 342 | /* These registers are not accessible to VF-SRIOV. | ||
| 343 | * The PF will program them instead. | ||
| 344 | */ | ||
| 345 | if (amdgpu_sriov_vf(adev)) | ||
| 346 | return; | ||
| 347 | |||
| 329 | tmp = RREG32_SOC15(GC, 0, mmGCVM_L2_PROTECTION_FAULT_CNTL); | 348 | tmp = RREG32_SOC15(GC, 0, mmGCVM_L2_PROTECTION_FAULT_CNTL); |
| 330 | tmp = REG_SET_FIELD(tmp, GCVM_L2_PROTECTION_FAULT_CNTL, | 349 | tmp = REG_SET_FIELD(tmp, GCVM_L2_PROTECTION_FAULT_CNTL, |
| 331 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); | 350 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| @@ -1297,7 +1297,7 @@ static void gmc_v9_0_init_golden_registers(struct amdgpu_device *adev) · 1296 unmodified lines | |||
| 1297 | case CHIP_VEGA10: | 1297 | case CHIP_VEGA10: |
| 1298 | if (amdgpu_sriov_vf(adev)) | 1298 | if (amdgpu_sriov_vf(adev)) |
| 1299 | break; | 1299 | break; |
| 1300 | /* fall through */ | 1300 | fallthrough; |
| 1301 | case CHIP_VEGA20: | 1301 | case CHIP_VEGA20: |
| 1302 | soc15_program_register_sequence(adev, | 1302 | soc15_program_register_sequence(adev, |
| 1303 | golden_settings_mmhub_1_0_0, | 1303 | golden_settings_mmhub_1_0_0, |
| @@ -134,6 +134,12 @@ static void mmhub_v2_0_init_cache_regs(struct amdgpu_device *adev) · 133 unmodified lines | |||
| 134 | { | 134 | { |
| 135 | uint32_t tmp; | 135 | uint32_t tmp; |
| 136 | 136 | ||
| 137 | /* These registers are not accessible to VF-SRIOV. | ||
| 138 | * The PF will program them instead. | ||
| 139 | */ | ||
| 140 | if (amdgpu_sriov_vf(adev)) | ||
| 141 | return; | ||
| 142 | |||
| 137 | /* Setup L2 cache */ | 143 | /* Setup L2 cache */ |
| 138 | tmp = RREG32_SOC15(MMHUB, 0, mmMMVM_L2_CNTL); | 144 | tmp = RREG32_SOC15(MMHUB, 0, mmMMVM_L2_CNTL); |
| 139 | tmp = REG_SET_FIELD(tmp, MMVM_L2_CNTL, ENABLE_L2_CACHE, 1); | 145 | tmp = REG_SET_FIELD(tmp, MMVM_L2_CNTL, ENABLE_L2_CACHE, 1); |
| @@ -189,6 +195,12 @@ static void mmhub_v2_0_enable_system_domain(struct amdgpu_device *adev) · 49 unmodified lines | |||
| 189 | 195 | ||
| 190 | static void mmhub_v2_0_disable_identity_aperture(struct amdgpu_device *adev) | 196 | static void mmhub_v2_0_disable_identity_aperture(struct amdgpu_device *adev) |
| 191 | { | 197 | { |
| 198 | /* These registers are not accessible to VF-SRIOV. | ||
| 199 | * The PF will program them instead. | ||
| 200 | */ | ||
| 201 | if (amdgpu_sriov_vf(adev)) | ||
| 202 | return; | ||
| 203 | |||
| 192 | WREG32_SOC15(MMHUB, 0, | 204 | WREG32_SOC15(MMHUB, 0, |
| 193 | mmMMVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, | 205 | mmMMVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, |
| 194 | 0xFFFFFFFF); | 206 | 0xFFFFFFFF); |
| @@ -318,6 +330,13 @@ void mmhub_v2_0_gart_disable(struct amdgpu_device *adev) · 123 unmodified lines | |||
| 318 | void mmhub_v2_0_set_fault_enable_default(struct amdgpu_device *adev, bool value) | 330 | void mmhub_v2_0_set_fault_enable_default(struct amdgpu_device *adev, bool value) |
| 319 | { | 331 | { |
| 320 | u32 tmp; | 332 | u32 tmp; |
| 333 | |||
| 334 | /* These registers are not accessible to VF-SRIOV. | ||
| 335 | * The PF will program them instead. | ||
| 336 | */ | ||
| 337 | if (amdgpu_sriov_vf(adev)) | ||
| 338 | return; | ||
| 339 | |||
| 321 | tmp = RREG32_SOC15(MMHUB, 0, mmMMVM_L2_PROTECTION_FAULT_CNTL); | 340 | tmp = RREG32_SOC15(MMHUB, 0, mmMMVM_L2_PROTECTION_FAULT_CNTL); |
| 322 | tmp = REG_SET_FIELD(tmp, MMVM_L2_PROTECTION_FAULT_CNTL, | 341 | tmp = REG_SET_FIELD(tmp, MMVM_L2_PROTECTION_FAULT_CNTL, |
| 323 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); | 342 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| @@ -364,6 +364,7 @@ nv_asic_reset_method(struct amdgpu_device *adev) · 363 unmodified lines | |||
| 364 | 364 | ||
| 365 | switch (adev->asic_type) { | 365 | switch (adev->asic_type) { |
| 366 | case CHIP_SIENNA_CICHLID: | 366 | case CHIP_SIENNA_CICHLID: |
| 367 | case CHIP_NAVY_FLOUNDER: | ||
| 367 | return AMD_RESET_METHOD_MODE1; | 368 | return AMD_RESET_METHOD_MODE1; |
| 368 | default: | 369 | default: |
| 369 | if (smu_baco_is_support(smu)) | 370 | if (smu_baco_is_support(smu)) |
| @@ -179,12 +179,11 @@ static int psp_v11_0_init_microcode(struct psp_context *psp) · 178 unmodified lines | |||
| 179 | } | 179 | } |
| 180 | break; | 180 | break; |
| 181 | case CHIP_SIENNA_CICHLID: | 181 | case CHIP_SIENNA_CICHLID: |
| 182 | case CHIP_NAVY_FLOUNDER: | ||
| 182 | err = psp_init_ta_microcode(&adev->psp, chip_name); | 183 | err = psp_init_ta_microcode(&adev->psp, chip_name); |
| 183 | if (err) | 184 | if (err) |
| 184 | return err; | 185 | return err; |
| 185 | break; | 186 | break; |
| 186 | case CHIP_NAVY_FLOUNDER: | ||
| 187 | break; | ||
| 188 | default: | 187 | default: |
| 189 | BUG(); | 188 | BUG(); |
| 190 | } | 189 | } |
| @@ -6196,7 +6196,7 @@ static void si_request_link_speed_change_before_state_change(struct amdgpu_devic · 6195 unmodified lines | |||
| 6196 | si_pi->force_pcie_gen = AMDGPU_PCIE_GEN2; | 6196 | si_pi->force_pcie_gen = AMDGPU_PCIE_GEN2; |
| 6197 | if (current_link_speed == AMDGPU_PCIE_GEN2) | 6197 | if (current_link_speed == AMDGPU_PCIE_GEN2) |
| 6198 | break; | 6198 | break; |
| 6199 | /* fall through */ | 6199 | fallthrough; |
| 6200 | case AMDGPU_PCIE_GEN2: | 6200 | case AMDGPU_PCIE_GEN2: |
| 6201 | if (amdgpu_acpi_pcie_performance_request(adev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) | 6201 | if (amdgpu_acpi_pcie_performance_request(adev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) |
| 6202 | break; | 6202 | break; |
| @@ -2196,6 +2196,7 @@ void amdgpu_dm_update_connector_after_detect( · 2195 unmodified lines | |||
| 2196 | 2196 | ||
| 2197 | drm_connector_update_edid_property(connector, | 2197 | drm_connector_update_edid_property(connector, |
| 2198 | aconnector->edid); | 2198 | aconnector->edid); |
| 2199 | drm_add_edid_modes(connector, aconnector->edid); | ||
| 2199 | 2200 | ||
| 2200 | if (aconnector->dc_link->aux_mode) | 2201 | if (aconnector->dc_link->aux_mode) |
| 2201 | drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux, | 2202 | drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux, |
| @@ -2833,12 +2834,18 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) · 631 unmodified lines | |||
| 2833 | &dm_atomic_state_funcs); | 2834 | &dm_atomic_state_funcs); |
| 2834 | 2835 | ||
| 2835 | r = amdgpu_display_modeset_create_props(adev); | 2836 | r = amdgpu_display_modeset_create_props(adev); |
| 2836 | if (r) | 2837 | if (r) { |
| 2838 | dc_release_state(state->context); | ||
| 2839 | kfree(state); | ||
| 2837 | return r; | 2840 | return r; |
| 2841 | } | ||
| 2838 | 2842 | ||
| 2839 | r = amdgpu_dm_audio_init(adev); | 2843 | r = amdgpu_dm_audio_init(adev); |
| 2840 | if (r) | 2844 | if (r) { |
| 2845 | dc_release_state(state->context); | ||
| 2846 | kfree(state); | ||
| 2841 | return r; | 2847 | return r; |
| 2848 | } | ||
| 2842 | 2849 | ||
| 2843 | return 0; | 2850 | return 0; |
| 2844 | } | 2851 | } |
| @@ -2855,6 +2862,8 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm) · 10 unmodified lines | |||
| 2855 | #if defined(CONFIG_ACPI) | 2862 | #if defined(CONFIG_ACPI) |
| 2856 | struct amdgpu_dm_backlight_caps caps; | 2863 | struct amdgpu_dm_backlight_caps caps; |
| 2857 | 2864 | ||
| 2865 | memset(&caps, 0, sizeof(caps)); | ||
| 2866 | |||
| 2858 | if (dm->backlight_caps.caps_valid) | 2867 | if (dm->backlight_caps.caps_valid) |
| 2859 | return; | 2868 | return; |
| 2860 | 2869 | ||
| @@ -2893,51 +2902,50 @@ static int set_backlight_via_aux(struct dc_link *link, uint32_t brightness) · 32 unmodified lines | |||
| 2893 | return rc ? 0 : 1; | 2902 | return rc ? 0 : 1; |
| 2894 | } | 2903 | } |
| 2895 | 2904 | ||
| 2896 | static u32 convert_brightness(const struct amdgpu_dm_backlight_caps *caps, | 2905 | static int get_brightness_range(const struct amdgpu_dm_backlight_caps *caps, |
| 2897 | const uint32_t user_brightness) | 2906 | unsigned *min, unsigned *max) |
| 2898 | { | 2907 | { |
| 2899 | u32 min, max, conversion_pace; | ||
| 2900 | u32 brightness = user_brightness; | ||
| 2901 | |||
| 2902 | if (!caps) | 2908 | if (!caps) |
| 2903 | goto out; | 2909 | return 0; |
| 2904 | 2910 | ||
| 2905 | if (!caps->aux_support) { | 2911 | if (caps->aux_support) { |
| 2906 | max = caps->max_input_signal; | 2912 | // Firmware limits are in nits, DC API wants millinits. |
| 2907 | min = caps->min_input_signal; | 2913 | *max = 1000 * caps->aux_max_input_signal; |
| 2908 | /* | 2914 | *min = 1000 * caps->aux_min_input_signal; |
| 2909 | * The brightness input is in the range 0-255 | ||
| 2910 | * It needs to be rescaled to be between the | ||
| 2911 | * requested min and max input signal | ||
| 2912 | * It also needs to be scaled up by 0x101 to | ||
| 2913 | * match the DC interface which has a range of | ||
| 2914 | * 0 to 0xffff | ||
| 2915 | */ | ||
| 2916 | conversion_pace = 0x101; | ||
| 2917 | brightness = | ||
| 2918 | user_brightness | ||
| 2919 | * conversion_pace | ||
| 2920 | * (max - min) | ||
| 2921 | / AMDGPU_MAX_BL_LEVEL | ||
| 2922 | + min * conversion_pace; | ||
| 2923 | } else { | 2915 | } else { |
| 2924 | /* TODO | 2916 | // Firmware limits are 8-bit, PWM control is 16-bit. |
| 2925 | * We are doing a linear interpolation here, which is OK but | 2917 | *max = 0x101 * caps->max_input_signal; |
| 2926 | * does not provide the optimal result. We probably want | 2918 | *min = 0x101 * caps->min_input_signal; |
| 2927 | * something close to the Perceptual Quantizer (PQ) curve. | ||
| 2928 | */ | ||
| 2929 | max = caps->aux_max_input_signal; | ||
| 2930 | min = caps->aux_min_input_signal; | ||
| 2931 | |||
| 2932 | brightness = (AMDGPU_MAX_BL_LEVEL - user_brightness) * min | ||
| 2933 | + user_brightness * max; | ||
| 2934 | // Multiple the value by 1000 since we use millinits | ||
| 2935 | brightness *= 1000; | ||
| 2936 | brightness = DIV_ROUND_CLOSEST(brightness, AMDGPU_MAX_BL_LEVEL); | ||
| 2937 | } | 2919 | } |
| 2920 | return 1; | ||
| 2921 | } | ||
| 2938 | 2922 | ||
| 2939 | out: | 2923 | static u32 convert_brightness_from_user(const struct amdgpu_dm_backlight_caps *caps, |
| 2940 | return brightness; | 2924 | uint32_t brightness) |
| 2925 | { | ||
| 2926 | unsigned min, max; | ||
| 2927 | |||
| 2928 | if (!get_brightness_range(caps, &min, &max)) | ||
| 2929 | return brightness; | ||
| 2930 | |||
| 2931 | // Rescale 0..255 to min..max | ||
| 2932 | return min + DIV_ROUND_CLOSEST((max - min) * brightness, | ||
| 2933 | AMDGPU_MAX_BL_LEVEL); | ||
| 2934 | } | ||
| 2935 | |||
| 2936 | static u32 convert_brightness_to_user(const struct amdgpu_dm_backlight_caps *caps, | ||
| 2937 | uint32_t brightness) | ||
| 2938 | { | ||
| 2939 | unsigned min, max; | ||
| 2940 | |||
| 2941 | if (!get_brightness_range(caps, &min, &max)) | ||
| 2942 | return brightness; | ||
| 2943 | |||
| 2944 | if (brightness < min) | ||
| 2945 | return 0; | ||
| 2946 | // Rescale min..max to 0..255 | ||
| 2947 | return DIV_ROUND_CLOSEST(AMDGPU_MAX_BL_LEVEL * (brightness - min), | ||
| 2948 | max - min); | ||
| 2941 | } | 2949 | } |
| 2942 | 2950 | ||
| 2943 | static int amdgpu_dm_backlight_update_status(struct backlight_device *bd) | 2951 | static int amdgpu_dm_backlight_update_status(struct backlight_device *bd) |
| @@ -2953,7 +2961,7 @@ static int amdgpu_dm_backlight_update_status(struct backlight_device *bd) · 9 unmodified lines | |||
| 2953 | 2961 | ||
| 2954 | link = (struct dc_link *)dm->backlight_link; | 2962 | link = (struct dc_link *)dm->backlight_link; |
| 2955 | 2963 | ||
| 2956 | brightness = convert_brightness(&caps, bd->props.brightness); | 2964 | brightness = convert_brightness_from_user(&caps, bd->props.brightness); |
| 2957 | // Change brightness based on AUX property | 2965 | // Change brightness based on AUX property |
| 2958 | if (caps.aux_support) | 2966 | if (caps.aux_support) |
| 2959 | return set_backlight_via_aux(link, brightness); | 2967 | return set_backlight_via_aux(link, brightness); |
| @@ -2970,7 +2978,7 @@ static int amdgpu_dm_backlight_get_brightness(struct backlight_device *bd) · 10 unmodified lines | |||
| 2970 | 2978 | ||
| 2971 | if (ret == DC_ERROR_UNEXPECTED) | 2979 | if (ret == DC_ERROR_UNEXPECTED) |
| 2972 | return bd->props.brightness; | 2980 | return bd->props.brightness; |
| 2973 | return ret; | 2981 | return convert_brightness_to_user(&dm->backlight_caps, ret); |
| 2974 | } | 2982 | } |
| 2975 | 2983 | ||
| 2976 | static const struct backlight_ops amdgpu_dm_backlight_ops = { | 2984 | static const struct backlight_ops amdgpu_dm_backlight_ops = { |
| @@ -67,7 +67,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux, · 66 unmodified lines | |||
| 67 | result = dc_link_aux_transfer_raw(TO_DM_AUX(aux)->ddc_service, &payload, | 67 | result = dc_link_aux_transfer_raw(TO_DM_AUX(aux)->ddc_service, &payload, |
| 68 | &operation_result); | 68 | &operation_result); |
| 69 | 69 | ||
| 70 | if (payload.write) | 70 | if (payload.write && result >= 0) |
| 71 | result = msg->size; | 71 | result = msg->size; |
| 72 | 72 | ||
| 73 | if (result < 0) | 73 | if (result < 0) |
| @@ -1108,6 +1108,18 @@ static enum bp_result bios_parser_enable_disp_power_gating( · 1107 unmodified lines | |||
| 1108 | action); | 1108 | action); |
| 1109 | } | 1109 | } |
| 1110 | 1110 | ||
| 1111 | static enum bp_result bios_parser_enable_lvtma_control( | ||
| 1112 | struct dc_bios *dcb, | ||
| 1113 | uint8_t uc_pwr_on) | ||
| 1114 | { | ||
| 1115 | struct bios_parser *bp = BP_FROM_DCB(dcb); | ||
| 1116 | |||
| 1117 | if (!bp->cmd_tbl.enable_lvtma_control) | ||
| 1118 | return BP_RESULT_FAILURE; | ||
| 1119 | |||
| 1120 | return bp->cmd_tbl.enable_lvtma_control(bp, uc_pwr_on); | ||
| 1121 | } | ||
| 1122 | |||
| 1111 | static bool bios_parser_is_accelerated_mode( | 1123 | static bool bios_parser_is_accelerated_mode( |
| 1112 | struct dc_bios *dcb) | 1124 | struct dc_bios *dcb) |
| 1113 | { | 1125 | { |
| @@ -2208,7 +2220,9 @@ static const struct dc_vbios_funcs vbios_funcs = { · 1094 unmodified lines | |||
| 2208 | .get_board_layout_info = bios_get_board_layout_info, | 2220 | .get_board_layout_info = bios_get_board_layout_info, |
| 2209 | .pack_data_tables = bios_parser_pack_data_tables, | 2221 | .pack_data_tables = bios_parser_pack_data_tables, |
| 2210 | 2222 | ||
| 2211 | .get_atom_dc_golden_table = bios_get_atom_dc_golden_table | 2223 | .get_atom_dc_golden_table = bios_get_atom_dc_golden_table, |
| 2224 | |||
| 2225 | .enable_lvtma_control = bios_parser_enable_lvtma_control | ||
| 2212 | }; | 2226 | }; |
| 2213 | 2227 | ||
| 2214 | static bool bios_parser2_construct( | 2228 | static bool bios_parser2_construct( |
| @@ -904,6 +904,33 @@ static unsigned int get_smu_clock_info_v3_1(struct bios_parser *bp, uint8_t id) · 903 unmodified lines | |||
| 904 | return 0; | 904 | return 0; |
| 905 | } | 905 | } |
| 906 | 906 | ||
| 907 | /****************************************************************************** | ||
| 908 | ****************************************************************************** | ||
| 909 | ** | ||
| 910 | ** LVTMA CONTROL | ||
| 911 | ** | ||
| 912 | ****************************************************************************** | ||
| 913 | *****************************************************************************/ | ||
| 914 | |||
| 915 | static enum bp_result enable_lvtma_control( | ||
| 916 | struct bios_parser *bp, | ||
| 917 | uint8_t uc_pwr_on); | ||
| 918 | |||
| 919 | static void init_enable_lvtma_control(struct bios_parser *bp) | ||
| 920 | { | ||
| 921 | /* TODO add switch for table vrsion */ | ||
| 922 | bp->cmd_tbl.enable_lvtma_control = enable_lvtma_control; | ||
| 923 | |||
| 924 | } | ||
| 925 | |||
| 926 | static enum bp_result enable_lvtma_control( | ||
| 927 | struct bios_parser *bp, | ||
| 928 | uint8_t uc_pwr_on) | ||
| 929 | { | ||
| 930 | enum bp_result result = BP_RESULT_FAILURE; | ||
| 931 | return result; | ||
| 932 | } | ||
| 933 | |||
| 907 | void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp) | 934 | void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp) |
| 908 | { | 935 | { |
| 909 | init_dig_encoder_control(bp); | 936 | init_dig_encoder_control(bp); |
| @@ -919,4 +946,5 @@ void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp) · 9 unmodified lines | |||
| 919 | init_set_dce_clock(bp); | 946 | init_set_dce_clock(bp); |
| 920 | init_get_smu_clock_info(bp); | 947 | init_get_smu_clock_info(bp); |
| 921 | 948 | ||
| 949 | init_enable_lvtma_control(bp); | ||
| 922 | } | 950 | } |
| @@ -94,7 +94,8 @@ struct cmd_tbl { · 93 unmodified lines | |||
| 94 | struct bp_set_dce_clock_parameters *bp_params); | 94 | struct bp_set_dce_clock_parameters *bp_params); |
| 95 | unsigned int (*get_smu_clock_info)( | 95 | unsigned int (*get_smu_clock_info)( |
| 96 | struct bios_parser *bp, uint8_t id); | 96 | struct bios_parser *bp, uint8_t id); |
| 97 | 97 | enum bp_result (*enable_lvtma_control)(struct bios_parser *bp, | |
| 98 | uint8_t uc_pwr_on); | ||
| 98 | }; | 99 | }; |
| 99 | 100 | ||
| 100 | void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp); | 101 | void dal_firmware_parser_init_cmd_tbl(struct bios_parser *bp); |
| @@ -94,6 +94,15 @@ int rn_get_active_display_cnt_wa( · 93 unmodified lines | |||
| 94 | return display_count; | 94 | return display_count; |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | void rn_set_low_power_state(struct clk_mgr *clk_mgr_base) | ||
| 98 | { | ||
| 99 | struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); | ||
| 100 | |||
| 101 | rn_vbios_smu_set_dcn_low_power_state(clk_mgr, DCN_PWR_STATE_LOW_POWER); | ||
| 102 | /* update power state */ | ||
| 103 | clk_mgr_base->clks.pwr_state = DCN_PWR_STATE_LOW_POWER; | ||
| 104 | } | ||
| 105 | |||
| 97 | void rn_update_clocks(struct clk_mgr *clk_mgr_base, | 106 | void rn_update_clocks(struct clk_mgr *clk_mgr_base, |
| 98 | struct dc_state *context, | 107 | struct dc_state *context, |
| 99 | bool safe_to_lower) | 108 | bool safe_to_lower) |
| @@ -516,6 +525,7 @@ static struct clk_mgr_funcs dcn21_funcs = { · 416 unmodified lines | |||
| 516 | .init_clocks = rn_init_clocks, | 525 | .init_clocks = rn_init_clocks, |
| 517 | .enable_pme_wa = rn_enable_pme_wa, | 526 | .enable_pme_wa = rn_enable_pme_wa, |
| 518 | .are_clock_states_equal = rn_are_clock_states_equal, | 527 | .are_clock_states_equal = rn_are_clock_states_equal, |
| 528 | .set_low_power_state = rn_set_low_power_state, | ||
| 519 | .notify_wm_ranges = rn_notify_wm_ranges, | 529 | .notify_wm_ranges = rn_notify_wm_ranges, |
| 520 | .notify_link_rate_change = rn_notify_link_rate_change, | 530 | .notify_link_rate_change = rn_notify_link_rate_change, |
| 521 | }; | 531 | }; |
| @@ -763,6 +763,7 @@ static bool detect_dp(struct dc_link *link, · 762 unmodified lines | |||
| 763 | sink_caps->signal = dp_passive_dongle_detection(link->ddc, | 763 | sink_caps->signal = dp_passive_dongle_detection(link->ddc, |
| 764 | sink_caps, | 764 | sink_caps, |
| 765 | audio_support); | 765 | audio_support); |
| 766 | link->dpcd_caps.dongle_type = sink_caps->dongle_type; | ||
| 766 | } | 767 | } |
| 767 | 768 | ||
| 768 | return true; | 769 | return true; |
| @@ -3289,7 +3290,6 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx) · 2520 unmodified lines | |||
| 3289 | #if defined(CONFIG_DRM_AMD_DC_HDCP) | 3290 | #if defined(CONFIG_DRM_AMD_DC_HDCP) |
| 3290 | update_psp_stream_config(pipe_ctx, true); | 3291 | update_psp_stream_config(pipe_ctx, true); |
| 3291 | #endif | 3292 | #endif |
| 3292 | |||
| 3293 | dc->hwss.blank_stream(pipe_ctx); | 3293 | dc->hwss.blank_stream(pipe_ctx); |
| 3294 | 3294 | ||
| 3295 | if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) | 3295 | if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) |
| @@ -4409,9 +4409,9 @@ bool dc_link_get_backlight_level_nits(struct dc_link *link, · 4408 unmodified lines | |||
| 4409 | link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)) | 4409 | link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)) |
| 4410 | return false; | 4410 | return false; |
| 4411 | 4411 | ||
| 4412 | if (!core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_CURRENT_PEAK, | 4412 | if (core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_CURRENT_PEAK, |
| 4413 | dpcd_backlight_get.raw, | 4413 | dpcd_backlight_get.raw, |
| 4414 | sizeof(union dpcd_source_backlight_get))) | 4414 | sizeof(union dpcd_source_backlight_get)) != DC_OK) |
| 4415 | return false; | 4415 | return false; |
| 4416 | 4416 | ||
| 4417 | *backlight_millinits_avg = | 4417 | *backlight_millinits_avg = |
| @@ -4450,9 +4450,9 @@ bool dc_link_read_default_bl_aux(struct dc_link *link, uint32_t *backlight_milli · 32 unmodified lines | |||
| 4450 | link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)) | 4450 | link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)) |
| 4451 | return false; | 4451 | return false; |
| 4452 | 4452 | ||
| 4453 | if (!core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_LEVEL, | 4453 | if (core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_LEVEL, |
| 4454 | (uint8_t *) backlight_millinits, | 4454 | (uint8_t *) backlight_millinits, |
| 4455 | sizeof(uint32_t))) | 4455 | sizeof(uint32_t)) != DC_OK) |
| 4456 | return false; | 4456 | return false; |
| 4457 | 4457 | ||
| 4458 | return true; | 4458 | return true; |
| @@ -136,6 +136,10 @@ struct dc_vbios_funcs { · 135 unmodified lines | |||
| 136 | 136 | ||
| 137 | enum bp_result (*get_atom_dc_golden_table)( | 137 | enum bp_result (*get_atom_dc_golden_table)( |
| 138 | struct dc_bios *dcb); | 138 | struct dc_bios *dcb); |
| 139 | |||
| 140 | enum bp_result (*enable_lvtma_control)( | ||
| 141 | struct dc_bios *bios, | ||
| 142 | uint8_t uc_pwr_on); | ||
| 139 | }; | 143 | }; |
| 140 | 144 | ||
| 141 | struct bios_registers { | 145 | struct bios_registers { |
| @@ -233,7 +233,7 @@ struct dc_stream_state { · 232 unmodified lines | |||
| 233 | union stream_update_flags update_flags; | 233 | union stream_update_flags update_flags; |
| 234 | }; | 234 | }; |
| 235 | 235 | ||
| 236 | #define ABM_LEVEL_IMMEDIATE_DISABLE 0xFFFFFFFF | 236 | #define ABM_LEVEL_IMMEDIATE_DISABLE 255 |
| 237 | 237 | ||
| 238 | struct dc_stream_update { | 238 | struct dc_stream_update { |
| 239 | struct dc_stream_state *stream; | 239 | struct dc_stream_state *stream; |
| @@ -49,7 +49,7 @@ · 48 unmodified lines | |||
| 49 | #define DCN_PANEL_CNTL_REG_LIST()\ | 49 | #define DCN_PANEL_CNTL_REG_LIST()\ |
| 50 | DCN_PANEL_CNTL_SR(PWRSEQ_CNTL, LVTMA), \ | 50 | DCN_PANEL_CNTL_SR(PWRSEQ_CNTL, LVTMA), \ |
| 51 | DCN_PANEL_CNTL_SR(PWRSEQ_STATE, LVTMA), \ | 51 | DCN_PANEL_CNTL_SR(PWRSEQ_STATE, LVTMA), \ |
| 52 | DCE_PANEL_CNTL_SR(PWRSEQ_REF_DIV, LVTMA), \ | 52 | DCN_PANEL_CNTL_SR(PWRSEQ_REF_DIV, LVTMA), \ |
| 53 | SR(BL_PWM_CNTL), \ | 53 | SR(BL_PWM_CNTL), \ |
| 54 | SR(BL_PWM_CNTL2), \ | 54 | SR(BL_PWM_CNTL2), \ |
| 55 | SR(BL_PWM_PERIOD_CNTL), \ | 55 | SR(BL_PWM_PERIOD_CNTL), \ |
| @@ -842,6 +842,17 @@ void dce110_edp_power_control( · 841 unmodified lines | |||
| 842 | cntl.coherent = false; | 842 | cntl.coherent = false; |
| 843 | cntl.lanes_number = LANE_COUNT_FOUR; | 843 | cntl.lanes_number = LANE_COUNT_FOUR; |
| 844 | cntl.hpd_sel = link->link_enc->hpd_source; | 844 | cntl.hpd_sel = link->link_enc->hpd_source; |
| 845 | |||
| 846 | if (ctx->dc->ctx->dmub_srv && | ||
| 847 | ctx->dc->debug.dmub_command_table) { | ||
| 848 | if (cntl.action == TRANSMITTER_CONTROL_POWER_ON) | ||
| 849 | bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, | ||
| 850 | LVTMA_CONTROL_POWER_ON); | ||
| 851 | else | ||
| 852 | bp_result = ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, | ||
| 853 | LVTMA_CONTROL_POWER_OFF); | ||
| 854 | } | ||
| 855 | |||
| 845 | bp_result = link_transmitter_control(ctx->dc_bios, &cntl); | 856 | bp_result = link_transmitter_control(ctx->dc_bios, &cntl); |
| 846 | 857 | ||
| 847 | if (!power_up) | 858 | if (!power_up) |
| @@ -919,8 +930,21 @@ void dce110_edp_backlight_control( · 71 unmodified lines | |||
| 919 | /*edp 1.2*/ | 930 | /*edp 1.2*/ |
| 920 | if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON) | 931 | if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON) |
| 921 | edp_receiver_ready_T7(link); | 932 | edp_receiver_ready_T7(link); |
| 933 | |||
| 934 | if (ctx->dc->ctx->dmub_srv && | ||
| 935 | ctx->dc->debug.dmub_command_table) { | ||
| 936 | if (cntl.action == TRANSMITTER_CONTROL_BACKLIGHT_ON) | ||
| 937 | ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, | ||
| 938 | LVTMA_CONTROL_LCD_BLON); | ||
| 939 | else | ||
| 940 | ctx->dc_bios->funcs->enable_lvtma_control(ctx->dc_bios, | ||
| 941 | LVTMA_CONTROL_LCD_BLOFF); | ||
| 942 | } | ||
| 943 | |||
| 922 | link_transmitter_control(ctx->dc_bios, &cntl); | 944 | link_transmitter_control(ctx->dc_bios, &cntl); |
| 923 | 945 | ||
| 946 | |||
| 947 | |||
| 924 | if (enable && link->dpcd_sink_ext_caps.bits.oled) | 948 | if (enable && link->dpcd_sink_ext_caps.bits.oled) |
| 925 | msleep(OLED_POST_T7_DELAY); | 949 | msleep(OLED_POST_T7_DELAY); |
| 926 | 950 | ||
| @@ -1450,33 +1450,42 @@ void dcn10_init_hw(struct dc *dc) · 1449 unmodified lines | |||
| 1450 | void dcn10_power_down_on_boot(struct dc *dc) | 1450 | void dcn10_power_down_on_boot(struct dc *dc) |
| 1451 | { | 1451 | { |
| 1452 | int i = 0; | 1452 | int i = 0; |
| 1453 | struct dc_link *edp_link; | ||
| 1453 | 1454 | ||
| 1454 | if (dc->config.power_down_display_on_boot) { | 1455 | if (!dc->config.power_down_display_on_boot) |
| 1455 | struct dc_link *edp_link = get_edp_link(dc); | 1456 | return; |
| 1456 | 1457 | ||
| 1457 | if (edp_link && | 1458 | edp_link = get_edp_link(dc); |
| 1458 | edp_link->link_enc->funcs->is_dig_enabled && | 1459 | if (edp_link && |
| 1459 | edp_link->link_enc->funcs->is_dig_enabled(edp_link->link_enc) && | 1460 | edp_link->link_enc->funcs->is_dig_enabled && |
| 1460 | dc->hwseq->funcs.edp_backlight_control && | 1461 | edp_link->link_enc->funcs->is_dig_enabled(edp_link->link_enc) && |
| 1461 | dc->hwss.power_down && | 1462 | dc->hwseq->funcs.edp_backlight_control && |
| 1462 | dc->hwss.edp_power_control) { | 1463 | dc->hwss.power_down && |
| 1463 | dc->hwseq->funcs.edp_backlight_control(edp_link, false); | 1464 | dc->hwss.edp_power_control) { |
| 1464 | dc->hwss.power_down(dc); | 1465 | dc->hwseq->funcs.edp_backlight_control(edp_link, false); |
| 1465 | dc->hwss.edp_power_control(edp_link, false); | 1466 | dc->hwss.power_down(dc); |
| 1466 | } else { | 1467 | dc->hwss.edp_power_control(edp_link, false); |
| 1467 | for (i = 0; i < dc->link_count; i++) { | 1468 | } else { |
| 1468 | struct dc_link *link = dc->links[i]; | 1469 | for (i = 0; i < dc->link_count; i++) { |
| 1469 | 1470 | struct dc_link *link = dc->links[i]; | |
| 1470 | if (link->link_enc->funcs->is_dig_enabled && | ||
| 1471 | link->link_enc->funcs->is_dig_enabled(link->link_enc) && | ||
| 1472 | dc->hwss.power_down) { | ||
| 1473 | dc->hwss.power_down(dc); | ||
| 1474 | break; | ||
| 1475 | } | ||
| 1476 | 1471 | ||
| 1472 | if (link->link_enc->funcs->is_dig_enabled && | ||
| 1473 | link->link_enc->funcs->is_dig_enabled(link->link_enc) && | ||
| 1474 | dc->hwss.power_down) { | ||
| 1475 | dc->hwss.power_down(dc); | ||
| 1476 | break; | ||
| 1477 | } | 1477 | } |
| 1478 | |||
| 1478 | } | 1479 | } |
| 1479 | } | 1480 | } |
| 1481 | |||
| 1482 | /* | ||
| 1483 | * Call update_clocks with empty context | ||
| 1484 | * to send DISPLAY_OFF | ||
| 1485 | * Otherwise DISPLAY_OFF may not be asserted | ||
| 1486 | */ | ||
| 1487 | if (dc->clk_mgr->funcs->set_low_power_state) | ||
| 1488 | dc->clk_mgr->funcs->set_low_power_state(dc->clk_mgr); | ||
| 1480 | } | 1489 | } |
| 1481 | 1490 | ||
| 1482 | void dcn10_reset_hw_ctx_wrap( | 1491 | void dcn10_reset_hw_ctx_wrap( |
| @@ -1213,6 +1213,7 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont · 1212 unmodified lines | |||
| 1213 | bool video_large = false; | 1213 | bool video_large = false; |
| 1214 | bool desktop_large = false; | 1214 | bool desktop_large = false; |
| 1215 | bool dcc_disabled = false; | 1215 | bool dcc_disabled = false; |
| 1216 | bool mpo_enabled = false; | ||
| 1216 | 1217 | ||
| 1217 | for (i = 0; i < context->stream_count; i++) { | 1218 | for (i = 0; i < context->stream_count; i++) { |
| 1218 | if (context->stream_status[i].plane_count == 0) | 1219 | if (context->stream_status[i].plane_count == 0) |
| @@ -1221,6 +1222,9 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont · 2 unmodified lines | |||
| 1221 | if (context->stream_status[i].plane_count > 2) | 1222 | if (context->stream_status[i].plane_count > 2) |
| 1222 | return DC_FAIL_UNSUPPORTED_1; | 1223 | return DC_FAIL_UNSUPPORTED_1; |
| 1223 | 1224 | ||
| 1225 | if (context->stream_status[i].plane_count > 1) | ||
| 1226 | mpo_enabled = true; | ||
| 1227 | |||
| 1224 | for (j = 0; j < context->stream_status[i].plane_count; j++) { | 1228 | for (j = 0; j < context->stream_status[i].plane_count; j++) { |
| 1225 | struct dc_plane_state *plane = | 1229 | struct dc_plane_state *plane = |
| 1226 | context->stream_status[i].plane_states[j]; | 1230 | context->stream_status[i].plane_states[j]; |
| @@ -1244,6 +1248,10 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont · 17 unmodified lines | |||
| 1244 | } | 1248 | } |
| 1245 | } | 1249 | } |
| 1246 | 1250 | ||
| 1251 | /* Disable MPO in multi-display configurations. */ | ||
| 1252 | if (context->stream_count > 1 && mpo_enabled) | ||
| 1253 | return DC_FAIL_UNSUPPORTED_1; | ||
| 1254 | |||
| 1247 | /* | 1255 | /* |
| 1248 | * Workaround: On DCN10 there is UMC issue that causes underflow when | 1256 | * Workaround: On DCN10 there is UMC issue that causes underflow when |
| 1249 | * playing 4k video on 4k desktop with video downscaled and single channel | 1257 | * playing 4k video on 4k desktop with video downscaled and single channel |
| @@ -121,35 +121,35 @@ void enc1_update_generic_info_packet( · 120 unmodified lines | |||
| 121 | switch (packet_index) { | 121 | switch (packet_index) { |
| 122 | case 0: | 122 | case 0: |
| 123 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 123 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 124 | AFMT_GENERIC0_FRAME_UPDATE, 1); | 124 | AFMT_GENERIC0_IMMEDIATE_UPDATE, 1); |
| 125 | break; | 125 | break; |
| 126 | case 1: | 126 | case 1: |
| 127 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 127 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 128 | AFMT_GENERIC1_FRAME_UPDATE, 1); | 128 | AFMT_GENERIC1_IMMEDIATE_UPDATE, 1); |
| 129 | break; | 129 | break; |
| 130 | case 2: | 130 | case 2: |
| 131 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 131 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 132 | AFMT_GENERIC2_FRAME_UPDATE, 1); | 132 | AFMT_GENERIC2_IMMEDIATE_UPDATE, 1); |
| 133 | break; | 133 | break; |
| 134 | case 3: | 134 | case 3: |
| 135 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 135 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 136 | AFMT_GENERIC3_FRAME_UPDATE, 1); | 136 | AFMT_GENERIC3_IMMEDIATE_UPDATE, 1); |
| 137 | break; | 137 | break; |
| 138 | case 4: | 138 | case 4: |
| 139 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 139 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 140 | AFMT_GENERIC4_FRAME_UPDATE, 1); | 140 | AFMT_GENERIC4_IMMEDIATE_UPDATE, 1); |
| 141 | break; | 141 | break; |
| 142 | case 5: | 142 | case 5: |
| 143 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 143 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 144 | AFMT_GENERIC5_FRAME_UPDATE, 1); | 144 | AFMT_GENERIC5_IMMEDIATE_UPDATE, 1); |
| 145 | break; | 145 | break; |
| 146 | case 6: | 146 | case 6: |
| 147 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 147 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 148 | AFMT_GENERIC6_FRAME_UPDATE, 1); | 148 | AFMT_GENERIC6_IMMEDIATE_UPDATE, 1); |
| 149 | break; | 149 | break; |
| 150 | case 7: | 150 | case 7: |
| 151 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, | 151 | REG_UPDATE(AFMT_VBI_PACKET_CONTROL1, |
| 152 | AFMT_GENERIC7_FRAME_UPDATE, 1); | 152 | AFMT_GENERIC7_IMMEDIATE_UPDATE, 1); |
| 153 | break; | 153 | break; |
| 154 | default: | 154 | default: |
| 155 | break; | 155 | break; |
| @@ -281,7 +281,14 @@ struct dcn10_stream_enc_registers { · 280 unmodified lines | |||
| 281 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC2_FRAME_UPDATE, mask_sh),\ | 281 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC2_FRAME_UPDATE, mask_sh),\ |
| 282 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC3_FRAME_UPDATE, mask_sh),\ | 282 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC3_FRAME_UPDATE, mask_sh),\ |
| 283 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC4_FRAME_UPDATE, mask_sh),\ | 283 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC4_FRAME_UPDATE, mask_sh),\ |
| 284 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC0_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 285 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC1_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 286 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC2_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 287 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC3_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 284 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC4_IMMEDIATE_UPDATE, mask_sh),\ | 288 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC4_IMMEDIATE_UPDATE, mask_sh),\ |
| 289 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC5_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 290 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC6_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 291 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC7_IMMEDIATE_UPDATE, mask_sh),\ | ||
| 285 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC5_FRAME_UPDATE, mask_sh),\ | 292 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC5_FRAME_UPDATE, mask_sh),\ |
| 286 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC6_FRAME_UPDATE, mask_sh),\ | 293 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC6_FRAME_UPDATE, mask_sh),\ |
| 287 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC7_FRAME_UPDATE, mask_sh),\ | 294 | SE_SF(DIG0_AFMT_VBI_PACKET_CONTROL1, AFMT_GENERIC7_FRAME_UPDATE, mask_sh),\ |
| @@ -345,7 +352,14 @@ struct dcn10_stream_enc_registers { · 57 unmodified lines | |||
| 345 | type AFMT_GENERIC2_FRAME_UPDATE;\ | 352 | type AFMT_GENERIC2_FRAME_UPDATE;\ |
| 346 | type AFMT_GENERIC3_FRAME_UPDATE;\ | 353 | type AFMT_GENERIC3_FRAME_UPDATE;\ |
| 347 | type AFMT_GENERIC4_FRAME_UPDATE;\ | 354 | type AFMT_GENERIC4_FRAME_UPDATE;\ |
| 355 | type AFMT_GENERIC0_IMMEDIATE_UPDATE;\ | ||
| 356 | type AFMT_GENERIC1_IMMEDIATE_UPDATE;\ | ||
| 357 | type AFMT_GENERIC2_IMMEDIATE_UPDATE;\ | ||
| 358 | type AFMT_GENERIC3_IMMEDIATE_UPDATE;\ | ||
| 348 | type AFMT_GENERIC4_IMMEDIATE_UPDATE;\ | 359 | type AFMT_GENERIC4_IMMEDIATE_UPDATE;\ |
| 360 | type AFMT_GENERIC5_IMMEDIATE_UPDATE;\ | ||
| 361 | type AFMT_GENERIC6_IMMEDIATE_UPDATE;\ | ||
| 362 | type AFMT_GENERIC7_IMMEDIATE_UPDATE;\ | ||
| 349 | type AFMT_GENERIC5_FRAME_UPDATE;\ | 363 | type AFMT_GENERIC5_FRAME_UPDATE;\ |
| 350 | type AFMT_GENERIC6_FRAME_UPDATE;\ | 364 | type AFMT_GENERIC6_FRAME_UPDATE;\ |
| 351 | type AFMT_GENERIC7_FRAME_UPDATE;\ | 365 | type AFMT_GENERIC7_FRAME_UPDATE;\ |
| @@ -1457,8 +1457,8 @@ static void dcn20_update_dchubp_dpp( · 1456 unmodified lines | |||
| 1457 | 1457 | ||
| 1458 | /* Any updates are handled in dc interface, just need to apply existing for plane enable */ | 1458 | /* Any updates are handled in dc interface, just need to apply existing for plane enable */ |
| 1459 | if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed || | 1459 | if ((pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed || |
| 1460 | pipe_ctx->update_flags.bits.scaler || pipe_ctx->update_flags.bits.viewport) | 1460 | pipe_ctx->update_flags.bits.scaler || viewport_changed == true) && |
| 1461 | && pipe_ctx->stream->cursor_attributes.address.quad_part != 0) { | 1461 | pipe_ctx->stream->cursor_attributes.address.quad_part != 0) { |
| 1462 | dc->hwss.set_cursor_position(pipe_ctx); | 1462 | dc->hwss.set_cursor_position(pipe_ctx); |
| 1463 | dc->hwss.set_cursor_attribute(pipe_ctx); | 1463 | dc->hwss.set_cursor_attribute(pipe_ctx); |
| 1464 | 1464 | ||
| @@ -167,7 +167,9 @@ · 166 unmodified lines | |||
| 167 | LE_SF(DCIO_SOFT_RESET, UNIPHYB_SOFT_RESET, mask_sh),\ | 167 | LE_SF(DCIO_SOFT_RESET, UNIPHYB_SOFT_RESET, mask_sh),\ |
| 168 | LE_SF(DCIO_SOFT_RESET, UNIPHYC_SOFT_RESET, mask_sh),\ | 168 | LE_SF(DCIO_SOFT_RESET, UNIPHYC_SOFT_RESET, mask_sh),\ |
| 169 | LE_SF(DCIO_SOFT_RESET, UNIPHYD_SOFT_RESET, mask_sh),\ | 169 | LE_SF(DCIO_SOFT_RESET, UNIPHYD_SOFT_RESET, mask_sh),\ |
| 170 | LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh) | 170 | LE_SF(DCIO_SOFT_RESET, UNIPHYE_SOFT_RESET, mask_sh),\ |
| 171 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\ | ||
| 172 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh) | ||
| 171 | 173 | ||
| 172 | #define LINK_ENCODER_MASK_SH_LIST_DCN20(mask_sh)\ | 174 | #define LINK_ENCODER_MASK_SH_LIST_DCN20(mask_sh)\ |
| 173 | LINK_ENCODER_MASK_SH_LIST_DCN10(mask_sh),\ | 175 | LINK_ENCODER_MASK_SH_LIST_DCN10(mask_sh),\ |
| @@ -3141,7 +3141,7 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co · 3140 unmodified lines | |||
| 3141 | int vlevel = 0; | 3141 | int vlevel = 0; |
| 3142 | int pipe_split_from[MAX_PIPES]; | 3142 | int pipe_split_from[MAX_PIPES]; |
| 3143 | int pipe_cnt = 0; | 3143 | int pipe_cnt = 0; |
| 3144 | display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_KERNEL); | 3144 | display_e2e_pipe_params_st *pipes = kzalloc(dc->res_pool->pipe_count * sizeof(display_e2e_pipe_params_st), GFP_ATOMIC); |
| 3145 | DC_LOGGER_INIT(dc->ctx->logger); | 3145 | DC_LOGGER_INIT(dc->ctx->logger); |
| 3146 | 3146 | ||
| 3147 | BW_VAL_TRACE_COUNT(); | 3147 | BW_VAL_TRACE_COUNT(); |
| @@ -61,7 +61,10 @@ · 60 unmodified lines | |||
| 61 | DPCS_DCN2_MASK_SH_LIST(mask_sh),\ | 61 | DPCS_DCN2_MASK_SH_LIST(mask_sh),\ |
| 62 | LE_SF(DPCSTX0_DPCSTX_TX_CNTL, DPCS_TX_DATA_ORDER_INVERT_18_BIT, mask_sh),\ | 62 | LE_SF(DPCSTX0_DPCSTX_TX_CNTL, DPCS_TX_DATA_ORDER_INVERT_18_BIT, mask_sh),\ |
| 63 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL0, RDPCS_PHY_TX_VBOOST_LVL, mask_sh),\ | 63 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL0, RDPCS_PHY_TX_VBOOST_LVL, mask_sh),\ |
| 64 | LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh) | 64 | LE_SF(RDPCSTX0_RDPCSTX_CLOCK_CNTL, RDPCS_TX_CLK_EN, mask_sh),\ |
| 65 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DP4, mask_sh),\ | ||
| 66 | LE_SF(RDPCSTX0_RDPCSTX_PHY_CNTL6, RDPCS_PHY_DPALT_DISABLE, mask_sh) | ||
| 67 | |||
| 65 | 68 | ||
| 66 | void dcn30_link_encoder_construct( | 69 | void dcn30_link_encoder_construct( |
| 67 | struct dcn20_link_encoder *enc20, | 70 | struct dcn20_link_encoder *enc20, |
| @@ -491,6 +491,7 @@ static const struct dcn10_link_enc_hpd_registers link_enc_hpd_regs[] = { · 490 unmodified lines | |||
| 491 | [id] = {\ | 491 | [id] = {\ |
| 492 | LE_DCN3_REG_LIST(id), \ | 492 | LE_DCN3_REG_LIST(id), \ |
| 493 | UNIPHY_DCN2_REG_LIST(phyid), \ | 493 | UNIPHY_DCN2_REG_LIST(phyid), \ |
| 494 | SRI(DP_DPHY_INTERNAL_CTRL, DP, id) \ | ||
| 494 | } | 495 | } |
| 495 | 496 | ||
| 496 | static const struct dce110_aux_registers_shift aux_shift = { | 497 | static const struct dce110_aux_registers_shift aux_shift = { |
| @@ -63,6 +63,7 @@ typedef struct { · 62 unmodified lines | |||
| 63 | 63 | ||
| 64 | #define BPP_INVALID 0 | 64 | #define BPP_INVALID 0 |
| 65 | #define BPP_BLENDED_PIPE 0xffffffff | 65 | #define BPP_BLENDED_PIPE 0xffffffff |
| 66 | #define DCN30_MAX_DSC_IMAGE_WIDTH 5184 | ||
| 66 | 67 | ||
| 67 | static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib); | 68 | static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib); |
| 68 | static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation( | 69 | static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation( |
| @@ -3984,6 +3985,9 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l · 3915 unmodified lines | |||
| 3984 | } else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) { | 3985 | } else if (v->PlaneRequiredDISPCLKWithoutODMCombine > v->MaxDispclkRoundedDownToDFSGranularity) { |
| 3985 | v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1; | 3986 | v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1; |
| 3986 | v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1; | 3987 | v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1; |
| 3988 | } else if (v->DSCEnabled[k] && (v->HActive[k] > DCN30_MAX_DSC_IMAGE_WIDTH)) { | ||
| 3989 | v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1; | ||
| 3990 | v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine2To1; | ||
| 3987 | } else { | 3991 | } else { |
| 3988 | v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled; | 3992 | v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled; |
| 3989 | v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithoutODMCombine; | 3993 | v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithoutODMCombine; |
| @@ -230,6 +230,8 @@ struct clk_mgr_funcs { · 229 unmodified lines | |||
| 230 | 230 | ||
| 231 | int (*get_dp_ref_clk_frequency)(struct clk_mgr *clk_mgr); | 231 | int (*get_dp_ref_clk_frequency)(struct clk_mgr *clk_mgr); |
| 232 | 232 | ||
| 233 | void (*set_low_power_state)(struct clk_mgr *clk_mgr); | ||
| 234 | |||
| 233 | void (*init_clocks)(struct clk_mgr *clk_mgr); | 235 | void (*init_clocks)(struct clk_mgr *clk_mgr); |
| 234 | 236 | ||
| 235 | void (*enable_pme_wa) (struct clk_mgr *clk_mgr); | 237 | void (*enable_pme_wa) (struct clk_mgr *clk_mgr); |
| @@ -101,6 +101,13 @@ enum bp_pipe_control_action { · 100 unmodified lines | |||
| 101 | ASIC_PIPE_INIT | 101 | ASIC_PIPE_INIT |
| 102 | }; | 102 | }; |
| 103 | 103 | ||
| 104 | enum bp_lvtma_control_action { | ||
| 105 | LVTMA_CONTROL_LCD_BLOFF = 2, | ||
| 106 | LVTMA_CONTROL_LCD_BLON = 3, | ||
| 107 | LVTMA_CONTROL_POWER_ON = 12, | ||
| 108 | LVTMA_CONTROL_POWER_OFF = 13 | ||
| 109 | }; | ||
| 110 | |||
| 104 | struct bp_encoder_control { | 111 | struct bp_encoder_control { |
| 105 | enum bp_encoder_control_action action; | 112 | enum bp_encoder_control_action action; |
| 106 | enum engine_id engine_id; | 113 | enum engine_id engine_id; |
| @@ -431,6 +431,9 @@ struct fixed31_32 dc_fixpt_log(struct fixed31_32 arg); · 430 unmodified lines | |||
| 431 | */ | 431 | */ |
| 432 | static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2) | 432 | static inline struct fixed31_32 dc_fixpt_pow(struct fixed31_32 arg1, struct fixed31_32 arg2) |
| 433 | { | 433 | { |
| 434 | if (arg1.value == 0) | ||
| 435 | return arg2.value == 0 ? dc_fixpt_one : dc_fixpt_zero; | ||
| 436 | |||
| 434 | return dc_fixpt_exp( | 437 | return dc_fixpt_exp( |
| 435 | dc_fixpt_mul( | 438 | dc_fixpt_mul( |
| 436 | dc_fixpt_log(arg1), | 439 | dc_fixpt_log(arg1), |
| @@ -324,22 +324,44 @@ static void apply_below_the_range(struct core_freesync *core_freesync, · 323 unmodified lines | |||
| 324 | 324 | ||
| 325 | /* Choose number of frames to insert based on how close it | 325 | /* Choose number of frames to insert based on how close it |
| 326 | * can get to the mid point of the variable range. | 326 | * can get to the mid point of the variable range. |
| 327 | * - Delta for CEIL: delta_from_mid_point_in_us_1 | ||
| 328 | * - Delta for FLOOR: delta_from_mid_point_in_us_2 | ||
| 327 | */ | 329 | */ |
| 328 | if ((frame_time_in_us / mid_point_frames_ceil) > in_out_vrr->min_duration_in_us && | 330 | if ((last_render_time_in_us / mid_point_frames_ceil) < in_out_vrr->min_duration_in_us) { |
| 329 | (delta_from_mid_point_in_us_1 < delta_from_mid_point_in_us_2 || | 331 | /* Check for out of range. |
| 330 | mid_point_frames_floor < 2)) { | 332 | * If using CEIL produces a value that is out of range, |
| 333 | * then we are forced to use FLOOR. | ||
| 334 | */ | ||
| 335 | frames_to_insert = mid_point_frames_floor; | ||
| 336 | } else if (mid_point_frames_floor < 2) { | ||
| 337 | /* Check if FLOOR would result in non-LFC. In this case | ||
| 338 | * choose to use CEIL | ||
| 339 | */ | ||
| 340 | frames_to_insert = mid_point_frames_ceil; | ||
| 341 | } else if (delta_from_mid_point_in_us_1 < delta_from_mid_point_in_us_2) { | ||
| 342 | /* If choosing CEIL results in a frame duration that is | ||
| 343 | * closer to the mid point of the range. | ||
| 344 | * Choose CEIL | ||
| 345 | */ | ||
| 331 | frames_to_insert = mid_point_frames_ceil; | 346 | frames_to_insert = mid_point_frames_ceil; |
| 332 | delta_from_mid_point_delta_in_us = delta_from_mid_point_in_us_2 - | ||
| 333 | delta_from_mid_point_in_us_1; | ||
| 334 | } else { | 347 | } else { |
| 348 | /* If choosing FLOOR results in a frame duration that is | ||
| 349 | * closer to the mid point of the range. | ||
| 350 | * Choose FLOOR | ||
| 351 | */ | ||
| 335 | frames_to_insert = mid_point_frames_floor; | 352 | frames_to_insert = mid_point_frames_floor; |
| 336 | delta_from_mid_point_delta_in_us = delta_from_mid_point_in_us_1 - | ||
| 337 | delta_from_mid_point_in_us_2; | ||
| 338 | } | 353 | } |
| 339 | 354 | ||
| 340 | /* Prefer current frame multiplier when BTR is enabled unless it drifts | 355 | /* Prefer current frame multiplier when BTR is enabled unless it drifts |
| 341 | * too far from the midpoint | 356 | * too far from the midpoint |
| 342 | */ | 357 | */ |
| 358 | if (delta_from_mid_point_in_us_1 < delta_from_mid_point_in_us_2) { | ||
| 359 | delta_from_mid_point_delta_in_us = delta_from_mid_point_in_us_2 - | ||
| 360 | delta_from_mid_point_in_us_1; | ||
| 361 | } else { | ||
| 362 | delta_from_mid_point_delta_in_us = delta_from_mid_point_in_us_1 - | ||
| 363 | delta_from_mid_point_in_us_2; | ||
| 364 | } | ||
| 343 | if (in_out_vrr->btr.frames_to_insert != 0 && | 365 | if (in_out_vrr->btr.frames_to_insert != 0 && |
| 344 | delta_from_mid_point_delta_in_us < BTR_DRIFT_MARGIN) { | 366 | delta_from_mid_point_delta_in_us < BTR_DRIFT_MARGIN) { |
| 345 | if (((last_render_time_in_us / in_out_vrr->btr.frames_to_insert) < | 367 | if (((last_render_time_in_us / in_out_vrr->btr.frames_to_insert) < |
| @@ -2204,14 +2204,17 @@ static const struct throttling_logging_label { · 2203 unmodified lines | |||
| 2204 | }; | 2204 | }; |
| 2205 | static void arcturus_log_thermal_throttling_event(struct smu_context *smu) | 2205 | static void arcturus_log_thermal_throttling_event(struct smu_context *smu) |
| 2206 | { | 2206 | { |
| 2207 | int ret; | ||
| 2207 | int throttler_idx, throtting_events = 0, buf_idx = 0; | 2208 | int throttler_idx, throtting_events = 0, buf_idx = 0; |
| 2208 | struct amdgpu_device *adev = smu->adev; | 2209 | struct amdgpu_device *adev = smu->adev; |
| 2209 | uint32_t throttler_status; | 2210 | uint32_t throttler_status; |
| 2210 | char log_buf[256]; | 2211 | char log_buf[256]; |
| 2211 | 2212 | ||
| 2212 | arcturus_get_smu_metrics_data(smu, | 2213 | ret = arcturus_get_smu_metrics_data(smu, |
| 2213 | METRICS_THROTTLER_STATUS, | 2214 | METRICS_THROTTLER_STATUS, |
| 2214 | &throttler_status); | 2215 | &throttler_status); |
| 2216 | if (ret) | ||
| 2217 | return; | ||
| 2215 | 2218 | ||
| 2216 | memset(log_buf, 0, sizeof(log_buf)); | 2219 | memset(log_buf, 0, sizeof(log_buf)); |
| 2217 | for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label); | 2220 | for (throttler_idx = 0; throttler_idx < ARRAY_SIZE(logging_label); |
| @@ -204,8 +204,7 @@ static int smu10_set_min_deep_sleep_dcefclk(struct pp_hwmgr *hwmgr, uint32_t clo · 203 unmodified lines | |||
| 204 | { | 204 | { |
| 205 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); | 205 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); |
| 206 | 206 | ||
| 207 | if (smu10_data->need_min_deep_sleep_dcefclk && | 207 | if (clock && smu10_data->deep_sleep_dcefclk != clock) { |
| 208 | smu10_data->deep_sleep_dcefclk != clock) { | ||
| 209 | smu10_data->deep_sleep_dcefclk = clock; | 208 | smu10_data->deep_sleep_dcefclk = clock; |
| 210 | smum_send_msg_to_smc_with_parameter(hwmgr, | 209 | smum_send_msg_to_smc_with_parameter(hwmgr, |
| 211 | PPSMC_MSG_SetMinDeepSleepDcefclk, | 210 | PPSMC_MSG_SetMinDeepSleepDcefclk, |
| @@ -219,8 +218,7 @@ static int smu10_set_hard_min_dcefclk_by_freq(struct pp_hwmgr *hwmgr, uint32_t c · 7 unmodified lines | |||
| 219 | { | 218 | { |
| 220 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); | 219 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); |
| 221 | 220 | ||
| 222 | if (smu10_data->dcf_actual_hard_min_freq && | 221 | if (clock && smu10_data->dcf_actual_hard_min_freq != clock) { |
| 223 | smu10_data->dcf_actual_hard_min_freq != clock) { | ||
| 224 | smu10_data->dcf_actual_hard_min_freq = clock; | 222 | smu10_data->dcf_actual_hard_min_freq = clock; |
| 225 | smum_send_msg_to_smc_with_parameter(hwmgr, | 223 | smum_send_msg_to_smc_with_parameter(hwmgr, |
| 226 | PPSMC_MSG_SetHardMinDcefclkByFreq, | 224 | PPSMC_MSG_SetHardMinDcefclkByFreq, |
| @@ -234,8 +232,7 @@ static int smu10_set_hard_min_fclk_by_freq(struct pp_hwmgr *hwmgr, uint32_t cloc · 7 unmodified lines | |||
| 234 | { | 232 | { |
| 235 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); | 233 | struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend); |
| 236 | 234 | ||
| 237 | if (smu10_data->f_actual_hard_min_freq && | 235 | if (clock && smu10_data->f_actual_hard_min_freq != clock) { |
| 238 | smu10_data->f_actual_hard_min_freq != clock) { | ||
| 239 | smu10_data->f_actual_hard_min_freq = clock; | 236 | smu10_data->f_actual_hard_min_freq = clock; |
| 240 | smum_send_msg_to_smc_with_parameter(hwmgr, | 237 | smum_send_msg_to_smc_with_parameter(hwmgr, |
| 241 | PPSMC_MSG_SetHardMinFclkByFreq, | 238 | PPSMC_MSG_SetHardMinFclkByFreq, |
| @@ -363,17 +363,19 @@ int vega10_thermal_get_temperature(struct pp_hwmgr *hwmgr) · 362 unmodified lines | |||
| 363 | static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 363 | static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
| 364 | struct PP_TemperatureRange *range) | 364 | struct PP_TemperatureRange *range) |
| 365 | { | 365 | { |
| 366 | struct phm_ppt_v2_information *pp_table_info = | ||
| 367 | (struct phm_ppt_v2_information *)(hwmgr->pptable); | ||
| 368 | struct phm_tdp_table *tdp_table = pp_table_info->tdp_table; | ||
| 366 | struct amdgpu_device *adev = hwmgr->adev; | 369 | struct amdgpu_device *adev = hwmgr->adev; |
| 367 | int low = VEGA10_THERMAL_MINIMUM_ALERT_TEMP * | 370 | int low = VEGA10_THERMAL_MINIMUM_ALERT_TEMP; |
| 368 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 371 | int high = VEGA10_THERMAL_MAXIMUM_ALERT_TEMP; |
| 369 | int high = VEGA10_THERMAL_MAXIMUM_ALERT_TEMP * | ||
| 370 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | ||
| 371 | uint32_t val; | 372 | uint32_t val; |
| 372 | 373 | ||
| 373 | if (low < range->min) | 374 | /* compare them in unit celsius degree */ |
| 374 | low = range->min; | 375 | if (low < range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES) |
| 375 | if (high > range->max) | 376 | low = range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
| 376 | high = range->max; | 377 | if (high > tdp_table->usSoftwareShutdownTemp) |
| 378 | high = tdp_table->usSoftwareShutdownTemp; | ||
| 377 | 379 | ||
| 378 | if (low > high) | 380 | if (low > high) |
| 379 | return -EINVAL; | 381 | return -EINVAL; |
| @@ -382,8 +384,8 @@ static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, · 2 unmodified lines | |||
| 382 | 384 | ||
| 383 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 385 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
| 384 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 386 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
| 385 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 387 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, high); |
| 386 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 388 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, low); |
| 387 | val &= (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK) & | 389 | val &= (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK) & |
| 388 | (~THM_THERMAL_INT_CTRL__THERM_INTH_MASK_MASK) & | 390 | (~THM_THERMAL_INT_CTRL__THERM_INTH_MASK_MASK) & |
| 389 | (~THM_THERMAL_INT_CTRL__THERM_INTL_MASK_MASK); | 391 | (~THM_THERMAL_INT_CTRL__THERM_INTL_MASK_MASK); |
| @@ -170,17 +170,18 @@ int vega12_thermal_get_temperature(struct pp_hwmgr *hwmgr) · 169 unmodified lines | |||
| 170 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 170 | static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
| 171 | struct PP_TemperatureRange *range) | 171 | struct PP_TemperatureRange *range) |
| 172 | { | 172 | { |
| 173 | struct phm_ppt_v3_information *pptable_information = | ||
| 174 | (struct phm_ppt_v3_information *)hwmgr->pptable; | ||
| 173 | struct amdgpu_device *adev = hwmgr->adev; | 175 | struct amdgpu_device *adev = hwmgr->adev; |
| 174 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP * | 176 | int low = VEGA12_THERMAL_MINIMUM_ALERT_TEMP; |
| 175 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 177 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP; |
| 176 | int high = VEGA12_THERMAL_MAXIMUM_ALERT_TEMP * | ||
| 177 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | ||
| 178 | uint32_t val; | 178 | uint32_t val; |
| 179 | 179 | ||
| 180 | if (low < range->min) | 180 | /* compare them in unit celsius degree */ |
| 181 | low = range->min; | 181 | if (low < range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES) |
| 182 | if (high > range->max) | 182 | low = range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
| 183 | high = range->max; | 183 | if (high > pptable_information->us_software_shutdown_temp) |
| 184 | high = pptable_information->us_software_shutdown_temp; | ||
| 184 | 185 | ||
| 185 | if (low > high) | 186 | if (low > high) |
| 186 | return -EINVAL; | 187 | return -EINVAL; |
| @@ -189,8 +190,8 @@ static int vega12_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, · 2 unmodified lines | |||
| 189 | 190 | ||
| 190 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 191 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
| 191 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 192 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
| 192 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 193 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, high); |
| 193 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 194 | val = REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, low); |
| 194 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); | 195 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); |
| 195 | 196 | ||
| 196 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); | 197 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); |
| @@ -979,10 +979,7 @@ static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr) · 978 unmodified lines | |||
| 979 | { | 979 | { |
| 980 | struct vega20_hwmgr *data = | 980 | struct vega20_hwmgr *data = |
| 981 | (struct vega20_hwmgr *)(hwmgr->backend); | 981 | (struct vega20_hwmgr *)(hwmgr->backend); |
| 982 | uint64_t features_enabled; | 982 | int i, ret = 0; |
| 983 | int i; | ||
| 984 | bool enabled; | ||
| 985 | int ret = 0; | ||
| 986 | 983 | ||
| 987 | PP_ASSERT_WITH_CODE((ret = smum_send_msg_to_smc(hwmgr, | 984 | PP_ASSERT_WITH_CODE((ret = smum_send_msg_to_smc(hwmgr, |
| 988 | PPSMC_MSG_DisableAllSmuFeatures, | 985 | PPSMC_MSG_DisableAllSmuFeatures, |
| @@ -990,17 +987,8 @@ static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr) · 1 unmodified line | |||
| 990 | "[DisableAllSMUFeatures] Failed to disable all smu features!", | 987 | "[DisableAllSMUFeatures] Failed to disable all smu features!", |
| 991 | return ret); | 988 | return ret); |
| 992 | 989 | ||
| 993 | ret = vega20_get_enabled_smc_features(hwmgr, &features_enabled); | 990 | for (i = 0; i < GNLD_FEATURES_MAX; i++) |
| 994 | PP_ASSERT_WITH_CODE(!ret, | 991 | data->smu_features[i].enabled = 0; |
| 995 | "[DisableAllSMUFeatures] Failed to get enabled smc features!", | ||
| 996 | return ret); | ||
| 997 | |||
| 998 | for (i = 0; i < GNLD_FEATURES_MAX; i++) { | ||
| 999 | enabled = (features_enabled & data->smu_features[i].smu_feature_bitmap) ? | ||
| 1000 | true : false; | ||
| 1001 | data->smu_features[i].enabled = enabled; | ||
| 1002 | data->smu_features[i].supported = enabled; | ||
| 1003 | } | ||
| 1004 | 992 | ||
| 1005 | return 0; | 993 | return 0; |
| 1006 | } | 994 | } |
| @@ -1652,12 +1640,6 @@ static void vega20_init_powergate_state(struct pp_hwmgr *hwmgr) · 645 unmodified lines | |||
| 1652 | 1640 | ||
| 1653 | data->uvd_power_gated = true; | 1641 | data->uvd_power_gated = true; |
| 1654 | data->vce_power_gated = true; | 1642 | data->vce_power_gated = true; |
| 1655 | |||
| 1656 | if (data->smu_features[GNLD_DPM_UVD].enabled) | ||
| 1657 | data->uvd_power_gated = false; | ||
| 1658 | |||
| 1659 | if (data->smu_features[GNLD_DPM_VCE].enabled) | ||
| 1660 | data->vce_power_gated = false; | ||
| 1661 | } | 1643 | } |
| 1662 | 1644 | ||
| 1663 | static int vega20_enable_dpm_tasks(struct pp_hwmgr *hwmgr) | 1645 | static int vega20_enable_dpm_tasks(struct pp_hwmgr *hwmgr) |
| @@ -3230,10 +3212,11 @@ static int vega20_get_ppfeature_status(struct pp_hwmgr *hwmgr, char *buf) · 1566 unmodified lines | |||
| 3230 | 3212 | ||
| 3231 | static int vega20_set_ppfeature_status(struct pp_hwmgr *hwmgr, uint64_t new_ppfeature_masks) | 3213 | static int vega20_set_ppfeature_status(struct pp_hwmgr *hwmgr, uint64_t new_ppfeature_masks) |
| 3232 | { | 3214 | { |
| 3233 | uint64_t features_enabled; | 3215 | struct vega20_hwmgr *data = |
| 3234 | uint64_t features_to_enable; | 3216 | (struct vega20_hwmgr *)(hwmgr->backend); |
| 3235 | uint64_t features_to_disable; | 3217 | uint64_t features_enabled, features_to_enable, features_to_disable; |
| 3236 | int ret = 0; | 3218 | int i, ret = 0; |
| 3219 | bool enabled; | ||
| 3237 | 3220 | ||
| 3238 | if (new_ppfeature_masks >= (1ULL << GNLD_FEATURES_MAX)) | 3221 | if (new_ppfeature_masks >= (1ULL << GNLD_FEATURES_MAX)) |
| 3239 | return -EINVAL; | 3222 | return -EINVAL; |
| @@ -3262,6 +3245,17 @@ static int vega20_set_ppfeature_status(struct pp_hwmgr *hwmgr, uint64_t new_ppfe · 22 unmodified lines | |||
| 3262 | return ret; | 3245 | return ret; |
| 3263 | } | 3246 | } |
| 3264 | 3247 | ||
| 3248 | /* Update the cached feature enablement state */ | ||
| 3249 | ret = vega20_get_enabled_smc_features(hwmgr, &features_enabled); | ||
| 3250 | if (ret) | ||
| 3251 | return ret; | ||
| 3252 | |||
| 3253 | for (i = 0; i < GNLD_FEATURES_MAX; i++) { | ||
| 3254 | enabled = (features_enabled & data->smu_features[i].smu_feature_bitmap) ? | ||
| 3255 | true : false; | ||
| 3256 | data->smu_features[i].enabled = enabled; | ||
| 3257 | } | ||
| 3258 | |||
| 3265 | return 0; | 3259 | return 0; |
| 3266 | } | 3260 | } |
| 3267 | 3261 | ||
| @@ -240,17 +240,18 @@ int vega20_thermal_get_temperature(struct pp_hwmgr *hwmgr) · 239 unmodified lines | |||
| 240 | static int vega20_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, | 240 | static int vega20_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, |
| 241 | struct PP_TemperatureRange *range) | 241 | struct PP_TemperatureRange *range) |
| 242 | { | 242 | { |
| 243 | struct phm_ppt_v3_information *pptable_information = | ||
| 244 | (struct phm_ppt_v3_information *)hwmgr->pptable; | ||
| 243 | struct amdgpu_device *adev = hwmgr->adev; | 245 | struct amdgpu_device *adev = hwmgr->adev; |
| 244 | int low = VEGA20_THERMAL_MINIMUM_ALERT_TEMP * | 246 | int low = VEGA20_THERMAL_MINIMUM_ALERT_TEMP; |
| 245 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | 247 | int high = VEGA20_THERMAL_MAXIMUM_ALERT_TEMP; |
| 246 | int high = VEGA20_THERMAL_MAXIMUM_ALERT_TEMP * | ||
| 247 | PP_TEMPERATURE_UNITS_PER_CENTIGRADES; | ||
| 248 | uint32_t val; | 248 | uint32_t val; |
| 249 | 249 | ||
| 250 | if (low < range->min) | 250 | /* compare them in unit celsius degree */ |
| 251 | low = range->min; | 251 | if (low < range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES) |
| 252 | if (high > range->max) | 252 | low = range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES; |
| 253 | high = range->max; | 253 | if (high > pptable_information->us_software_shutdown_temp) |
| 254 | high = pptable_information->us_software_shutdown_temp; | ||
| 254 | 255 | ||
| 255 | if (low > high) | 256 | if (low > high) |
| 256 | return -EINVAL; | 257 | return -EINVAL; |
| @@ -259,8 +260,8 @@ static int vega20_thermal_set_temperature_range(struct pp_hwmgr *hwmgr, · 2 unmodified lines | |||
| 259 | 260 | ||
| 260 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); | 261 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, MAX_IH_CREDIT, 5); |
| 261 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); | 262 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, THERM_IH_HW_ENA, 1); |
| 262 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, (high / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 263 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTH, high); |
| 263 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, (low / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)); | 264 | val = CGS_REG_SET_FIELD(val, THM_THERMAL_INT_CTRL, DIG_THERM_INTL, low); |
| 264 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); | 265 | val = val & (~THM_THERMAL_INT_CTRL__THERM_TRIGGER_MASK_MASK); |
| 265 | 266 | ||
| 266 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); | 267 | WREG32_SOC15(THM, 0, mmTHM_THERMAL_INT_CTRL, val); |
| @@ -95,6 +95,7 @@ static struct cmn2asic_msg_mapping sienna_cichlid_message_map[SMU_MSG_MAX_COUNT] · 94 unmodified lines | |||
| 95 | MSG_MAP(TransferTableSmu2Dram, PPSMC_MSG_TransferTableSmu2Dram, 0), | 95 | MSG_MAP(TransferTableSmu2Dram, PPSMC_MSG_TransferTableSmu2Dram, 0), |
| 96 | MSG_MAP(TransferTableDram2Smu, PPSMC_MSG_TransferTableDram2Smu, 0), | 96 | MSG_MAP(TransferTableDram2Smu, PPSMC_MSG_TransferTableDram2Smu, 0), |
| 97 | MSG_MAP(UseDefaultPPTable, PPSMC_MSG_UseDefaultPPTable, 0), | 97 | MSG_MAP(UseDefaultPPTable, PPSMC_MSG_UseDefaultPPTable, 0), |
| 98 | MSG_MAP(RunDcBtc, PPSMC_MSG_RunDcBtc, 0), | ||
| 98 | MSG_MAP(EnterBaco, PPSMC_MSG_EnterBaco, 0), | 99 | MSG_MAP(EnterBaco, PPSMC_MSG_EnterBaco, 0), |
| 99 | MSG_MAP(SetSoftMinByFreq, PPSMC_MSG_SetSoftMinByFreq, 0), | 100 | MSG_MAP(SetSoftMinByFreq, PPSMC_MSG_SetSoftMinByFreq, 0), |
| 100 | MSG_MAP(SetSoftMaxByFreq, PPSMC_MSG_SetSoftMaxByFreq, 0), | 101 | MSG_MAP(SetSoftMaxByFreq, PPSMC_MSG_SetSoftMaxByFreq, 0), |
| @@ -775,7 +776,7 @@ static int sienna_cichlid_dpm_set_vcn_enable(struct smu_context *smu, bool enabl · 674 unmodified lines | |||
| 775 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, 0, NULL); | 776 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, 0, NULL); |
| 776 | if (ret) | 777 | if (ret) |
| 777 | return ret; | 778 | return ret; |
| 778 | if (adev->asic_type == CHIP_SIENNA_CICHLID) { | 779 | if (adev->vcn.num_vcn_inst > 1) { |
| 779 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, | 780 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerUpVcn, |
| 780 | 0x10000, NULL); | 781 | 0x10000, NULL); |
| 781 | if (ret) | 782 | if (ret) |
| @@ -787,7 +788,7 @@ static int sienna_cichlid_dpm_set_vcn_enable(struct smu_context *smu, bool enabl · 5 unmodified lines | |||
| 787 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerDownVcn, 0, NULL); | 788 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerDownVcn, 0, NULL); |
| 788 | if (ret) | 789 | if (ret) |
| 789 | return ret; | 790 | return ret; |
| 790 | if (adev->asic_type == CHIP_SIENNA_CICHLID) { | 791 | if (adev->vcn.num_vcn_inst > 1) { |
| 791 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerDownVcn, | 792 | ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_PowerDownVcn, |
| 792 | 0x10000, NULL); | 793 | 0x10000, NULL); |
| 793 | if (ret) | 794 | if (ret) |
| @@ -1732,6 +1733,11 @@ static int sienna_cichlid_get_dpm_ultimate_freq(struct smu_context *smu, · 938 unmodified lines | |||
| 1732 | return ret; | 1733 | return ret; |
| 1733 | } | 1734 | } |
| 1734 | 1735 | ||
| 1736 | static int sienna_cichlid_run_btc(struct smu_context *smu) | ||
| 1737 | { | ||
| 1738 | return smu_cmn_send_smc_msg(smu, SMU_MSG_RunDcBtc, NULL); | ||
| 1739 | } | ||
| 1740 | |||
| 1735 | static bool sienna_cichlid_is_baco_supported(struct smu_context *smu) | 1741 | static bool sienna_cichlid_is_baco_supported(struct smu_context *smu) |
| 1736 | { | 1742 | { |
| 1737 | struct amdgpu_device *adev = smu->adev; | 1743 | struct amdgpu_device *adev = smu->adev; |
| @@ -2719,6 +2725,7 @@ static const struct pptable_funcs sienna_cichlid_ppt_funcs = { · 981 unmodified lines | |||
| 2719 | .mode1_reset = smu_v11_0_mode1_reset, | 2725 | .mode1_reset = smu_v11_0_mode1_reset, |
| 2720 | .get_dpm_ultimate_freq = sienna_cichlid_get_dpm_ultimate_freq, | 2726 | .get_dpm_ultimate_freq = sienna_cichlid_get_dpm_ultimate_freq, |
| 2721 | .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range, | 2727 | .set_soft_freq_limited_range = smu_v11_0_set_soft_freq_limited_range, |
| 2728 | .run_btc = sienna_cichlid_run_btc, | ||
| 2722 | .get_pp_feature_mask = smu_cmn_get_pp_feature_mask, | 2729 | .get_pp_feature_mask = smu_cmn_get_pp_feature_mask, |
| 2723 | .set_pp_feature_mask = smu_cmn_set_pp_feature_mask, | 2730 | .set_pp_feature_mask = smu_cmn_set_pp_feature_mask, |
| 2724 | }; | 2731 | }; |
| @@ -532,7 +532,7 @@ static int malidp500_enable_memwrite(struct malidp_hw_device *hwdev, · 531 unmodified lines | |||
| 532 | malidp_hw_write(hwdev, lower_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_LOW); | 532 | malidp_hw_write(hwdev, lower_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_LOW); |
| 533 | malidp_hw_write(hwdev, upper_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_HIGH); | 533 | malidp_hw_write(hwdev, upper_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_HIGH); |
| 534 | malidp_hw_write(hwdev, pitches[1], base + MALIDP_MW_P2_STRIDE); | 534 | malidp_hw_write(hwdev, pitches[1], base + MALIDP_MW_P2_STRIDE); |
| 535 | /* fall through */ | 535 | fallthrough; |
| 536 | case 1: | 536 | case 1: |
| 537 | malidp_hw_write(hwdev, lower_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_LOW); | 537 | malidp_hw_write(hwdev, lower_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_LOW); |
| 538 | malidp_hw_write(hwdev, upper_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_HIGH); | 538 | malidp_hw_write(hwdev, upper_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_HIGH); |
| @@ -869,7 +869,7 @@ static int malidp550_enable_memwrite(struct malidp_hw_device *hwdev, · 330 unmodified lines | |||
| 869 | malidp_hw_write(hwdev, lower_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_LOW); | 869 | malidp_hw_write(hwdev, lower_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_LOW); |
| 870 | malidp_hw_write(hwdev, upper_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_HIGH); | 870 | malidp_hw_write(hwdev, upper_32_bits(addrs[1]), base + MALIDP_MW_P2_PTR_HIGH); |
| 871 | malidp_hw_write(hwdev, pitches[1], base + MALIDP_MW_P2_STRIDE); | 871 | malidp_hw_write(hwdev, pitches[1], base + MALIDP_MW_P2_STRIDE); |
| 872 | /* fall through */ | 872 | fallthrough; |
| 873 | case 1: | 873 | case 1: |
| 874 | malidp_hw_write(hwdev, lower_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_LOW); | 874 | malidp_hw_write(hwdev, lower_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_LOW); |
| 875 | malidp_hw_write(hwdev, upper_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_HIGH); | 875 | malidp_hw_write(hwdev, upper_32_bits(addrs[0]), base + MALIDP_MW_P1_PTR_HIGH); |
| @@ -1324,7 +1324,7 @@ static irqreturn_t malidp_se_irq(int irq, void *arg) · 448 unmodified lines | |||
| 1324 | break; | 1324 | break; |
| 1325 | case MW_RESTART: | 1325 | case MW_RESTART: |
| 1326 | drm_writeback_signal_completion(&malidp->mw_connector, 0); | 1326 | drm_writeback_signal_completion(&malidp->mw_connector, 0); |
| 1327 | /* fall through - to a new start */ | 1327 | fallthrough; /* to a new start */ |
| 1328 | case MW_START: | 1328 | case MW_START: |
| 1329 | /* writeback started, need to emulate one-shot mode */ | 1329 | /* writeback started, need to emulate one-shot mode */ |
| 1330 | hw->disable_memwrite(hwdev); | 1330 | hw->disable_memwrite(hwdev); |
| @@ -238,7 +238,7 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post) · 237 unmodified lines | |||
| 238 | ast->dp501_fw_addr = NULL; | 238 | ast->dp501_fw_addr = NULL; |
| 239 | } | 239 | } |
| 240 | } | 240 | } |
| 241 | /* fallthrough */ | 241 | fallthrough; |
| 242 | case 0x0c: | 242 | case 0x0c: |
| 243 | ast->tx_chip_type = AST_TX_DP501; | 243 | ast->tx_chip_type = AST_TX_DP501; |
| 244 | } | 244 | } |
| @@ -409,7 +409,6 @@ static bool nwl_dsi_read_packet(struct nwl_dsi *dsi, u32 status) · 408 unmodified lines | |||
| 409 | 409 | ||
| 410 | switch (data_type) { | 410 | switch (data_type) { |
| 411 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_2BYTE: | 411 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_2BYTE: |
| 412 | fallthrough; | ||
| 413 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_2BYTE: | 412 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_2BYTE: |
| 414 | if (xfer->msg->rx_len > 1) { | 413 | if (xfer->msg->rx_len > 1) { |
| 415 | /* read second byte */ | 414 | /* read second byte */ |
| @@ -418,7 +417,6 @@ static bool nwl_dsi_read_packet(struct nwl_dsi *dsi, u32 status) · 2 unmodified lines | |||
| 418 | } | 417 | } |
| 419 | fallthrough; | 418 | fallthrough; |
| 420 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE: | 419 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE: |
| 421 | fallthrough; | ||
| 422 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE: | 420 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE: |
| 423 | if (xfer->msg->rx_len > 0) { | 421 | if (xfer->msg->rx_len > 0) { |
| 424 | /* read first byte */ | 422 | /* read first byte */ |
| @@ -61,10 +61,10 @@ static int dw_hdmi_i2s_hw_params(struct device *dev, void *data, · 60 unmodified lines | |||
| 61 | switch (hparms->channels) { | 61 | switch (hparms->channels) { |
| 62 | case 7 ... 8: | 62 | case 7 ... 8: |
| 63 | conf0 |= HDMI_AUD_CONF0_I2S_EN3; | 63 | conf0 |= HDMI_AUD_CONF0_I2S_EN3; |
| 64 | /* Fall-thru */ | 64 | fallthrough; |
| 65 | case 5 ... 6: | 65 | case 5 ... 6: |
| 66 | conf0 |= HDMI_AUD_CONF0_I2S_EN2; | 66 | conf0 |= HDMI_AUD_CONF0_I2S_EN2; |
| 67 | /* Fall-thru */ | 67 | fallthrough; |
| 68 | case 3 ... 4: | 68 | case 3 ... 4: |
| 69 | conf0 |= HDMI_AUD_CONF0_I2S_EN1; | 69 | conf0 |= HDMI_AUD_CONF0_I2S_EN1; |
| 70 | /* Fall-thru */ | 70 | /* Fall-thru */ |
| @@ -604,13 +604,13 @@ static void ti_sn_bridge_read_valid_rates(struct ti_sn_bridge *pdata, · 603 unmodified lines | |||
| 604 | DRM_DEV_ERROR(pdata->dev, | 604 | DRM_DEV_ERROR(pdata->dev, |
| 605 | "Unexpected max rate (%#x); assuming 5.4 GHz\n", | 605 | "Unexpected max rate (%#x); assuming 5.4 GHz\n", |
| 606 | (int)dpcd_val); | 606 | (int)dpcd_val); |
| 607 | /* fall through */ | 607 | fallthrough; |
| 608 | case DP_LINK_BW_5_4: | 608 | case DP_LINK_BW_5_4: |
| 609 | rate_valid[7] = 1; | 609 | rate_valid[7] = 1; |
| 610 | /* fall through */ | 610 | fallthrough; |
| 611 | case DP_LINK_BW_2_7: | 611 | case DP_LINK_BW_2_7: |
| 612 | rate_valid[4] = 1; | 612 | rate_valid[4] = 1; |
| 613 | /* fall through */ | 613 | fallthrough; |
| 614 | case DP_LINK_BW_1_62: | 614 | case DP_LINK_BW_1_62: |
| 615 | rate_valid[1] = 1; | 615 | rate_valid[1] = 1; |
| 616 | break; | 616 | break; |
| @@ -34,6 +34,7 @@ · 33 unmodified lines | |||
| 34 | #include <drm/drm_bridge.h> | 34 | #include <drm/drm_bridge.h> |
| 35 | #include <drm/drm_damage_helper.h> | 35 | #include <drm/drm_damage_helper.h> |
| 36 | #include <drm/drm_device.h> | 36 | #include <drm/drm_device.h> |
| 37 | #include <drm/drm_drv.h> | ||
| 37 | #include <drm/drm_plane_helper.h> | 38 | #include <drm/drm_plane_helper.h> |
| 38 | #include <drm/drm_print.h> | 39 | #include <drm/drm_print.h> |
| 39 | #include <drm/drm_self_refresh_helper.h> | 40 | #include <drm/drm_self_refresh_helper.h> |
| @@ -3106,7 +3107,7 @@ void drm_atomic_helper_shutdown(struct drm_device *dev) · 3066 unmodified lines | |||
| 3106 | if (ret) | 3107 | if (ret) |
| 3107 | DRM_ERROR("Disabling all crtc's during unload failed with %i\n", ret); | 3108 | DRM_ERROR("Disabling all crtc's during unload failed with %i\n", ret); |
| 3108 | 3109 | ||
| 3109 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 3110 | DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); |
| 3110 | } | 3111 | } |
| 3111 | EXPORT_SYMBOL(drm_atomic_helper_shutdown); | 3112 | EXPORT_SYMBOL(drm_atomic_helper_shutdown); |
| 3112 | 3113 | ||
| @@ -3246,7 +3247,7 @@ struct drm_atomic_state *drm_atomic_helper_suspend(struct drm_device *dev) · 133 unmodified lines | |||
| 3246 | } | 3247 | } |
| 3247 | 3248 | ||
| 3248 | unlock: | 3249 | unlock: |
| 3249 | DRM_MODESET_LOCK_ALL_END(ctx, err); | 3250 | DRM_MODESET_LOCK_ALL_END(dev, ctx, err); |
| 3250 | if (err) | 3251 | if (err) |
| 3251 | return ERR_PTR(err); | 3252 | return ERR_PTR(err); |
| 3252 | 3253 | ||
| @@ -3327,7 +3328,7 @@ int drm_atomic_helper_resume(struct drm_device *dev, · 74 unmodified lines | |||
| 3327 | 3328 | ||
| 3328 | err = drm_atomic_helper_commit_duplicated_state(state, &ctx); | 3329 | err = drm_atomic_helper_commit_duplicated_state(state, &ctx); |
| 3329 | 3330 | ||
| 3330 | DRM_MODESET_LOCK_ALL_END(ctx, err); | 3331 | DRM_MODESET_LOCK_ALL_END(dev, ctx, err); |
| 3331 | drm_atomic_state_put(state); | 3332 | drm_atomic_state_put(state); |
| 3332 | 3333 | ||
| 3333 | return err; | 3334 | return err; |
| @@ -537,7 +537,7 @@ int drm_legacy_rmmap_locked(struct drm_device *dev, struct drm_local_map *map) · 536 unmodified lines | |||
| 537 | switch (map->type) { | 537 | switch (map->type) { |
| 538 | case _DRM_REGISTERS: | 538 | case _DRM_REGISTERS: |
| 539 | iounmap(map->handle); | 539 | iounmap(map->handle); |
| 540 | /* FALLTHROUGH */ | 540 | fallthrough; |
| 541 | case _DRM_FRAME_BUFFER: | 541 | case _DRM_FRAME_BUFFER: |
| 542 | arch_phys_wc_del(map->mtrr); | 542 | arch_phys_wc_del(map->mtrr); |
| 543 | break; | 543 | break; |
| @@ -294,7 +294,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev, · 293 unmodified lines | |||
| 294 | crtc->gamma_size, &ctx); | 294 | crtc->gamma_size, &ctx); |
| 295 | 295 | ||
| 296 | out: | 296 | out: |
| 297 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 297 | DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); |
| 298 | return ret; | 298 | return ret; |
| 299 | 299 | ||
| 300 | } | 300 | } |
| @@ -588,7 +588,6 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, · 587 unmodified lines | |||
| 588 | if (crtc_req->mode_valid && !drm_lease_held(file_priv, plane->base.id)) | 588 | if (crtc_req->mode_valid && !drm_lease_held(file_priv, plane->base.id)) |
| 589 | return -EACCES; | 589 | return -EACCES; |
| 590 | 590 | ||
| 591 | mutex_lock(&crtc->dev->mode_config.mutex); | ||
| 592 | DRM_MODESET_LOCK_ALL_BEGIN(dev, ctx, | 591 | DRM_MODESET_LOCK_ALL_BEGIN(dev, ctx, |
| 593 | DRM_MODESET_ACQUIRE_INTERRUPTIBLE, ret); | 592 | DRM_MODESET_ACQUIRE_INTERRUPTIBLE, ret); |
| 594 | 593 | ||
| @@ -756,8 +755,7 @@ out: · 161 unmodified lines | |||
| 756 | fb = NULL; | 755 | fb = NULL; |
| 757 | mode = NULL; | 756 | mode = NULL; |
| 758 | 757 | ||
| 759 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 758 | DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); |
| 760 | mutex_unlock(&crtc->dev->mode_config.mutex); | ||
| 761 | 759 | ||
| 762 | return ret; | 760 | return ret; |
| 763 | } | 761 | } |
| @@ -492,7 +492,7 @@ int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], · 491 unmodified lines | |||
| 492 | case DP_DS_16BPC: | 492 | case DP_DS_16BPC: |
| 493 | return 16; | 493 | return 16; |
| 494 | } | 494 | } |
| 495 | /* fall through */ | 495 | fallthrough; |
| 496 | default: | 496 | default: |
| 497 | return 0; | 497 | return 0; |
| 498 | } | 498 | } |
| @@ -5040,8 +5040,8 @@ int drm_dp_mst_add_affected_dsc_crtcs(struct drm_atomic_state *state, struct drm · 5039 unmodified lines | |||
| 5040 | 5040 | ||
| 5041 | crtc = conn_state->crtc; | 5041 | crtc = conn_state->crtc; |
| 5042 | 5042 | ||
| 5043 | if (WARN_ON(!crtc)) | 5043 | if (!crtc) |
| 5044 | return -EINVAL; | 5044 | continue; |
| 5045 | 5045 | ||
| 5046 | if (!drm_dp_mst_dsc_aux_for_port(pos->port)) | 5046 | if (!drm_dp_mst_dsc_aux_for_port(pos->port)) |
| 5047 | continue; | 5047 | continue; |
| @@ -428,7 +428,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data, · 427 unmodified lines | |||
| 428 | out_unref: | 428 | out_unref: |
| 429 | drm_mode_object_put(obj); | 429 | drm_mode_object_put(obj); |
| 430 | out: | 430 | out: |
| 431 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 431 | DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); |
| 432 | return ret; | 432 | return ret; |
| 433 | } | 433 | } |
| 434 | 434 | ||
| @@ -470,7 +470,7 @@ static int set_property_legacy(struct drm_mode_object *obj, · 35 unmodified lines | |||
| 470 | break; | 470 | break; |
| 471 | } | 471 | } |
| 472 | drm_property_change_valid_put(prop, ref); | 472 | drm_property_change_valid_put(prop, ref); |
| 473 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 473 | DRM_MODESET_LOCK_ALL_END(dev, ctx, ret); |
| 474 | 474 | ||
| 475 | return ret; | 475 | return ret; |
| 476 | } | 476 | } |
| @@ -1930,7 +1930,7 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out, · 1929 unmodified lines | |||
| 1930 | default: | 1930 | default: |
| 1931 | WARN(1, "Invalid aspect ratio (0%x) on mode\n", | 1931 | WARN(1, "Invalid aspect ratio (0%x) on mode\n", |
| 1932 | in->picture_aspect_ratio); | 1932 | in->picture_aspect_ratio); |
| 1933 | /* fall through */ | 1933 | fallthrough; |
| 1934 | case HDMI_PICTURE_ASPECT_NONE: | 1934 | case HDMI_PICTURE_ASPECT_NONE: |
| 1935 | out->flags |= DRM_MODE_FLAG_PIC_AR_NONE; | 1935 | out->flags |= DRM_MODE_FLAG_PIC_AR_NONE; |
| 1936 | break; | 1936 | break; |
| @@ -792,7 +792,7 @@ static int setplane_internal(struct drm_plane *plane, · 791 unmodified lines | |||
| 792 | crtc_x, crtc_y, crtc_w, crtc_h, | 792 | crtc_x, crtc_y, crtc_w, crtc_h, |
| 793 | src_x, src_y, src_w, src_h, &ctx); | 793 | src_x, src_y, src_w, src_h, &ctx); |
| 794 | 794 | ||
| 795 | DRM_MODESET_LOCK_ALL_END(ctx, ret); | 795 | DRM_MODESET_LOCK_ALL_END(plane->dev, ctx, ret); |
| 796 | 796 | ||
| 797 | return ret; | 797 | return ret; |
| 798 | } | 798 | } |
| @@ -337,9 +337,16 @@ static void etnaviv_hw_identify(struct etnaviv_gpu *gpu) · 336 unmodified lines | |||
| 337 | 337 | ||
| 338 | gpu->identity.model = gpu_read(gpu, VIVS_HI_CHIP_MODEL); | 338 | gpu->identity.model = gpu_read(gpu, VIVS_HI_CHIP_MODEL); |
| 339 | gpu->identity.revision = gpu_read(gpu, VIVS_HI_CHIP_REV); | 339 | gpu->identity.revision = gpu_read(gpu, VIVS_HI_CHIP_REV); |
| 340 | gpu->identity.product_id = gpu_read(gpu, VIVS_HI_CHIP_PRODUCT_ID); | ||
| 341 | gpu->identity.customer_id = gpu_read(gpu, VIVS_HI_CHIP_CUSTOMER_ID); | 340 | gpu->identity.customer_id = gpu_read(gpu, VIVS_HI_CHIP_CUSTOMER_ID); |
| 342 | gpu->identity.eco_id = gpu_read(gpu, VIVS_HI_CHIP_ECO_ID); | 341 | |
| 342 | /* | ||
| 343 | * Reading these two registers on GC600 rev 0x19 result in a | ||
| 344 | * unhandled fault: external abort on non-linefetch | ||
| 345 | */ | ||
| 346 | if (!etnaviv_is_model_rev(gpu, GC600, 0x19)) { | ||
| 347 | gpu->identity.product_id = gpu_read(gpu, VIVS_HI_CHIP_PRODUCT_ID); | ||
| 348 | gpu->identity.eco_id = gpu_read(gpu, VIVS_HI_CHIP_ECO_ID); | ||
| 349 | } | ||
| 343 | 350 | ||
| 344 | /* | 351 | /* |
| 345 | * !!!! HACK ALERT !!!! | 352 | * !!!! HACK ALERT !!!! |
| @@ -89,12 +89,15 @@ static void etnaviv_sched_timedout_job(struct drm_sched_job *sched_job) · 88 unmodified lines | |||
| 89 | u32 dma_addr; | 89 | u32 dma_addr; |
| 90 | int change; | 90 | int change; |
| 91 | 91 | ||
| 92 | /* block scheduler */ | ||
| 93 | drm_sched_stop(&gpu->sched, sched_job); | ||
| 94 | |||
| 92 | /* | 95 | /* |
| 93 | * If the GPU managed to complete this jobs fence, the timout is | 96 | * If the GPU managed to complete this jobs fence, the timout is |
| 94 | * spurious. Bail out. | 97 | * spurious. Bail out. |
| 95 | */ | 98 | */ |
| 96 | if (dma_fence_is_signaled(submit->out_fence)) | 99 | if (dma_fence_is_signaled(submit->out_fence)) |
| 97 | return; | 100 | goto out_no_timeout; |
| 98 | 101 | ||
| 99 | /* | 102 | /* |
| 100 | * If the GPU is still making forward progress on the front-end (which | 103 | * If the GPU is still making forward progress on the front-end (which |
| @@ -105,12 +108,9 @@ static void etnaviv_sched_timedout_job(struct drm_sched_job *sched_job) · 4 unmodified lines | |||
| 105 | change = dma_addr - gpu->hangcheck_dma_addr; | 108 | change = dma_addr - gpu->hangcheck_dma_addr; |
| 106 | if (change < 0 || change > 16) { | 109 | if (change < 0 || change > 16) { |
| 107 | gpu->hangcheck_dma_addr = dma_addr; | 110 | gpu->hangcheck_dma_addr = dma_addr; |
| 108 | return; | 111 | goto out_no_timeout; |
| 109 | } | 112 | } |
| 110 | 113 | ||
| 111 | /* block scheduler */ | ||
| 112 | drm_sched_stop(&gpu->sched, sched_job); | ||
| 113 | |||
| 114 | if(sched_job) | 114 | if(sched_job) |
| 115 | drm_sched_increase_karma(sched_job); | 115 | drm_sched_increase_karma(sched_job); |
| 116 | 116 | ||
| @@ -120,6 +120,7 @@ static void etnaviv_sched_timedout_job(struct drm_sched_job *sched_job) · 3 unmodified lines | |||
| 120 | 120 | ||
| 121 | drm_sched_resubmit_jobs(&gpu->sched); | 121 | drm_sched_resubmit_jobs(&gpu->sched); |
| 122 | 122 | ||
| 123 | out_no_timeout: | ||
| 123 | /* restart scheduler after GPU is usable again */ | 124 | /* restart scheduler after GPU is usable again */ |
| 124 | drm_sched_start(&gpu->sched, true); | 125 | drm_sched_start(&gpu->sched, true); |
| 125 | } | 126 | } |
| @@ -987,10 +987,10 @@ static void exynos_dsi_send_to_fifo(struct exynos_dsi *dsi, · 986 unmodified lines | |||
| 987 | switch (length) { | 987 | switch (length) { |
| 988 | case 3: | 988 | case 3: |
| 989 | reg |= payload[2] << 16; | 989 | reg |= payload[2] << 16; |
| 990 | /* Fall through */ | 990 | fallthrough; |
| 991 | case 2: | 991 | case 2: |
| 992 | reg |= payload[1] << 8; | 992 | reg |= payload[1] << 8; |
| 993 | /* Fall through */ | 993 | fallthrough; |
| 994 | case 1: | 994 | case 1: |
| 995 | reg |= payload[0]; | 995 | reg |= payload[0]; |
| 996 | exynos_dsi_write(dsi, DSIM_PAYLOAD_REG, reg); | 996 | exynos_dsi_write(dsi, DSIM_PAYLOAD_REG, reg); |
| @@ -1038,7 +1038,7 @@ static void exynos_dsi_read_from_fifo(struct exynos_dsi *dsi, · 41 unmodified lines | |||
| 1038 | payload[1] = reg >> 16; | 1038 | payload[1] = reg >> 16; |
| 1039 | ++xfer->rx_done; | 1039 | ++xfer->rx_done; |
| 1040 | } | 1040 | } |
| 1041 | /* Fall through */ | 1041 | fallthrough; |
| 1042 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE: | 1042 | case MIPI_DSI_RX_GENERIC_SHORT_READ_RESPONSE_1BYTE: |
| 1043 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE: | 1043 | case MIPI_DSI_RX_DCS_SHORT_READ_RESPONSE_1BYTE: |
| 1044 | payload[0] = reg >> 8; | 1044 | payload[0] = reg >> 8; |
| @@ -1082,10 +1082,10 @@ static void exynos_dsi_read_from_fifo(struct exynos_dsi *dsi, · 37 unmodified lines | |||
| 1082 | switch (length) { | 1082 | switch (length) { |
| 1083 | case 3: | 1083 | case 3: |
| 1084 | payload[2] = (reg >> 16) & 0xff; | 1084 | payload[2] = (reg >> 16) & 0xff; |
| 1085 | /* Fall through */ | 1085 | fallthrough; |
| 1086 | case 2: | 1086 | case 2: |
| 1087 | payload[1] = (reg >> 8) & 0xff; | 1087 | payload[1] = (reg >> 8) & 0xff; |
| 1088 | /* Fall through */ | 1088 | fallthrough; |
| 1089 | case 1: | 1089 | case 1: |
| 1090 | payload[0] = reg & 0xff; | 1090 | payload[0] = reg & 0xff; |
| 1091 | } | 1091 | } |
| @@ -92,7 +92,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper, · 91 unmodified lines | |||
| 92 | offset = fbi->var.xoffset * fb->format->cpp[0]; | 92 | offset = fbi->var.xoffset * fb->format->cpp[0]; |
| 93 | offset += fbi->var.yoffset * fb->pitches[0]; | 93 | offset += fbi->var.yoffset * fb->pitches[0]; |
| 94 | 94 | ||
| 95 | fbi->screen_base = exynos_gem->kvaddr + offset; | 95 | fbi->screen_buffer = exynos_gem->kvaddr + offset; |
| 96 | fbi->screen_size = size; | 96 | fbi->screen_size = size; |
| 97 | fbi->fix.smem_len = size; | 97 | fbi->fix.smem_len = size; |
| 98 | 98 | ||
| @@ -40,7 +40,7 @@ struct exynos_drm_gem { · 39 unmodified lines | |||
| 40 | unsigned int flags; | 40 | unsigned int flags; |
| 41 | unsigned long size; | 41 | unsigned long size; |
| 42 | void *cookie; | 42 | void *cookie; |
| 43 | void __iomem *kvaddr; | 43 | void *kvaddr; |
| 44 | dma_addr_t dma_addr; | 44 | dma_addr_t dma_addr; |
| 45 | unsigned long dma_attrs; | 45 | unsigned long dma_attrs; |
| 46 | struct sg_table *sgt; | 46 | struct sg_table *sgt; |
| @@ -101,19 +101,19 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, · 100 unmodified lines | |||
| 101 | break; | 101 | break; |
| 102 | case DRM_FORMAT_ARGB8888: | 102 | case DRM_FORMAT_ARGB8888: |
| 103 | alpha = DCU_LAYER_AB_WHOLE_FRAME; | 103 | alpha = DCU_LAYER_AB_WHOLE_FRAME; |
| 104 | /* fall-through */ | 104 | fallthrough; |
| 105 | case DRM_FORMAT_XRGB8888: | 105 | case DRM_FORMAT_XRGB8888: |
| 106 | bpp = FSL_DCU_ARGB8888; | 106 | bpp = FSL_DCU_ARGB8888; |
| 107 | break; | 107 | break; |
| 108 | case DRM_FORMAT_ARGB4444: | 108 | case DRM_FORMAT_ARGB4444: |
| 109 | alpha = DCU_LAYER_AB_WHOLE_FRAME; | 109 | alpha = DCU_LAYER_AB_WHOLE_FRAME; |
| 110 | /* fall-through */ | 110 | fallthrough; |
| 111 | case DRM_FORMAT_XRGB4444: | 111 | case DRM_FORMAT_XRGB4444: |
| 112 | bpp = FSL_DCU_ARGB4444; | 112 | bpp = FSL_DCU_ARGB4444; |
| 113 | break; | 113 | break; |
| 114 | case DRM_FORMAT_ARGB1555: | 114 | case DRM_FORMAT_ARGB1555: |
| 115 | alpha = DCU_LAYER_AB_WHOLE_FRAME; | 115 | alpha = DCU_LAYER_AB_WHOLE_FRAME; |
| 116 | /* fall-through */ | 116 | fallthrough; |
| 117 | case DRM_FORMAT_XRGB1555: | 117 | case DRM_FORMAT_XRGB1555: |
| 118 | bpp = FSL_DCU_ARGB1555; | 118 | bpp = FSL_DCU_ARGB1555; |
| 119 | break; | 119 | break; |
| @@ -712,7 +712,7 @@ gen11_dsi_configure_transcoder(struct intel_encoder *encoder, · 711 unmodified lines | |||
| 712 | switch (intel_dsi->pixel_format) { | 712 | switch (intel_dsi->pixel_format) { |
| 713 | default: | 713 | default: |
| 714 | MISSING_CASE(intel_dsi->pixel_format); | 714 | MISSING_CASE(intel_dsi->pixel_format); |
| 715 | /* fallthrough */ | 715 | fallthrough; |
| 716 | case MIPI_DSI_FMT_RGB565: | 716 | case MIPI_DSI_FMT_RGB565: |
| 717 | tmp |= PIX_FMT_RGB565; | 717 | tmp |= PIX_FMT_RGB565; |
| 718 | break; | 718 | break; |
| @@ -739,7 +739,7 @@ gen11_dsi_configure_transcoder(struct intel_encoder *encoder, · 20 unmodified lines | |||
| 739 | switch (intel_dsi->video_mode_format) { | 739 | switch (intel_dsi->video_mode_format) { |
| 740 | default: | 740 | default: |
| 741 | MISSING_CASE(intel_dsi->video_mode_format); | 741 | MISSING_CASE(intel_dsi->video_mode_format); |
| 742 | /* fallthrough */ | 742 | fallthrough; |
| 743 | case VIDEO_MODE_NON_BURST_WITH_SYNC_EVENTS: | 743 | case VIDEO_MODE_NON_BURST_WITH_SYNC_EVENTS: |
| 744 | tmp |= VIDEO_MODE_SYNC_EVENT; | 744 | tmp |= VIDEO_MODE_SYNC_EVENT; |
| 745 | break; | 745 | break; |
| @@ -792,7 +792,7 @@ gen11_dsi_configure_transcoder(struct intel_encoder *encoder, · 46 unmodified lines | |||
| 792 | switch (pipe) { | 792 | switch (pipe) { |
| 793 | default: | 793 | default: |
| 794 | MISSING_CASE(pipe); | 794 | MISSING_CASE(pipe); |
| 795 | /* fallthrough */ | 795 | fallthrough; |
| 796 | case PIPE_A: | 796 | case PIPE_A: |
| 797 | tmp |= TRANS_DDI_EDP_INPUT_A_ON; | 797 | tmp |= TRANS_DDI_EDP_INPUT_A_ON; |
| 798 | break; | 798 | break; |
| @@ -905,7 +905,7 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb) · 904 unmodified lines | |||
| 905 | drm_dbg_kms(&dev_priv->drm, | 905 | drm_dbg_kms(&dev_priv->drm, |
| 906 | "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", | 906 | "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", |
| 907 | psr_table->tp1_wakeup_time); | 907 | psr_table->tp1_wakeup_time); |
| 908 | /* fallthrough */ | 908 | fallthrough; |
| 909 | case 2: | 909 | case 2: |
| 910 | dev_priv->vbt.psr.tp1_wakeup_time_us = 2500; | 910 | dev_priv->vbt.psr.tp1_wakeup_time_us = 2500; |
| 911 | break; | 911 | break; |
| @@ -925,7 +925,7 @@ parse_psr(struct drm_i915_private *dev_priv, const struct bdb_header *bdb) · 13 unmodified lines | |||
| 925 | drm_dbg_kms(&dev_priv->drm, | 925 | drm_dbg_kms(&dev_priv->drm, |
| 926 | "VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", | 926 | "VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n", |
| 927 | psr_table->tp2_tp3_wakeup_time); | 927 | psr_table->tp2_tp3_wakeup_time); |
| 928 | /* fallthrough */ | 928 | fallthrough; |
| 929 | case 2: | 929 | case 2: |
| 930 | dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 2500; | 930 | dev_priv->vbt.psr.tp2_tp3_wakeup_time_us = 2500; |
| 931 | break; | 931 | break; |
| @@ -1775,7 +1775,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, · 843 unmodified lines | |||
| 1775 | switch (child->hdmi_max_data_rate) { | 1775 | switch (child->hdmi_max_data_rate) { |
| 1776 | default: | 1776 | default: |
| 1777 | MISSING_CASE(child->hdmi_max_data_rate); | 1777 | MISSING_CASE(child->hdmi_max_data_rate); |
| 1778 | /* fall through */ | 1778 | fallthrough; |
| 1779 | case HDMI_MAX_DATA_RATE_PLATFORM: | 1779 | case HDMI_MAX_DATA_RATE_PLATFORM: |
| 1780 | max_tmds_clock = 0; | 1780 | max_tmds_clock = 0; |
| 1781 | break; | 1781 | break; |
| @@ -326,7 +326,7 @@ static void pnv_get_cdclk(struct drm_i915_private *dev_priv, · 325 unmodified lines | |||
| 326 | default: | 326 | default: |
| 327 | drm_err(&dev_priv->drm, | 327 | drm_err(&dev_priv->drm, |
| 328 | "Unknown pnv display core clock 0x%04x\n", gcfgc); | 328 | "Unknown pnv display core clock 0x%04x\n", gcfgc); |
| 329 | /* fall through */ | 329 | fallthrough; |
| 330 | case GC_DISPLAY_CLOCK_133_MHZ_PNV: | 330 | case GC_DISPLAY_CLOCK_133_MHZ_PNV: |
| 331 | cdclk_config->cdclk = 133333; | 331 | cdclk_config->cdclk = 133333; |
| 332 | break; | 332 | break; |
| @@ -766,7 +766,7 @@ static void bdw_set_cdclk(struct drm_i915_private *dev_priv, · 433 unmodified lines | |||
| 766 | switch (cdclk) { | 766 | switch (cdclk) { |
| 767 | default: | 767 | default: |
| 768 | MISSING_CASE(cdclk); | 768 | MISSING_CASE(cdclk); |
| 769 | /* fall through */ | 769 | fallthrough; |
| 770 | case 337500: | 770 | case 337500: |
| 771 | val |= LCPLL_CLK_FREQ_337_5_BDW; | 771 | val |= LCPLL_CLK_FREQ_337_5_BDW; |
| 772 | break; | 772 | break; |
| @@ -1042,7 +1042,7 @@ static void skl_set_cdclk(struct drm_i915_private *dev_priv, · 269 unmodified lines | |||
| 1042 | drm_WARN_ON(&dev_priv->drm, | 1042 | drm_WARN_ON(&dev_priv->drm, |
| 1043 | cdclk != dev_priv->cdclk.hw.bypass); | 1043 | cdclk != dev_priv->cdclk.hw.bypass); |
| 1044 | drm_WARN_ON(&dev_priv->drm, vco != 0); | 1044 | drm_WARN_ON(&dev_priv->drm, vco != 0); |
| 1045 | /* fall through */ | 1045 | fallthrough; |
| 1046 | case 308571: | 1046 | case 308571: |
| 1047 | case 337500: | 1047 | case 337500: |
| 1048 | freq_select = CDCLK_FREQ_337_308; | 1048 | freq_select = CDCLK_FREQ_337_308; |
| @@ -1333,7 +1333,7 @@ static void icl_readout_refclk(struct drm_i915_private *dev_priv, · 284 unmodified lines | |||
| 1333 | switch (dssm) { | 1333 | switch (dssm) { |
| 1334 | default: | 1334 | default: |
| 1335 | MISSING_CASE(dssm); | 1335 | MISSING_CASE(dssm); |
| 1336 | /* fall through */ | 1336 | fallthrough; |
| 1337 | case ICL_DSSM_CDCLK_PLL_REFCLK_24MHz: | 1337 | case ICL_DSSM_CDCLK_PLL_REFCLK_24MHz: |
| 1338 | cdclk_config->ref = 24000; | 1338 | cdclk_config->ref = 24000; |
| 1339 | break; | 1339 | break; |
| @@ -1561,7 +1561,7 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv, · 221 unmodified lines | |||
| 1561 | drm_WARN_ON(&dev_priv->drm, | 1561 | drm_WARN_ON(&dev_priv->drm, |
| 1562 | cdclk != dev_priv->cdclk.hw.bypass); | 1562 | cdclk != dev_priv->cdclk.hw.bypass); |
| 1563 | drm_WARN_ON(&dev_priv->drm, vco != 0); | 1563 | drm_WARN_ON(&dev_priv->drm, vco != 0); |
| 1564 | /* fall through */ | 1564 | fallthrough; |
| 1565 | case 2: | 1565 | case 2: |
| 1566 | divider = BXT_CDCLK_CD2X_DIV_SEL_1; | 1566 | divider = BXT_CDCLK_CD2X_DIV_SEL_1; |
| 1567 | break; | 1567 | break; |
| @@ -52,7 +52,7 @@ cnl_get_procmon_ref_values(struct drm_i915_private *dev_priv, enum phy phy) · 51 unmodified lines | |||
| 52 | switch (val & (PROCESS_INFO_MASK | VOLTAGE_INFO_MASK)) { | 52 | switch (val & (PROCESS_INFO_MASK | VOLTAGE_INFO_MASK)) { |
| 53 | default: | 53 | default: |
| 54 | MISSING_CASE(val); | 54 | MISSING_CASE(val); |
| 55 | /* fall through */ | 55 | fallthrough; |
| 56 | case VOLTAGE_INFO_0_85V | PROCESS_INFO_DOT_0: | 56 | case VOLTAGE_INFO_0_85V | PROCESS_INFO_DOT_0: |
| 57 | procmon = &cnl_procmon_values[PROCMON_0_85V_DOT_0]; | 57 | procmon = &cnl_procmon_values[PROCMON_0_85V_DOT_0]; |
| 58 | break; | 58 | break; |
| @@ -320,7 +320,7 @@ void intel_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv, · 261 unmodified lines | |||
| 320 | break; | 320 | break; |
| 321 | default: | 321 | default: |
| 322 | MISSING_CASE(lane_count); | 322 | MISSING_CASE(lane_count); |
| 323 | /* fall-through */ | 323 | fallthrough; |
| 324 | case 4: | 324 | case 4: |
| 325 | lane_mask = PWR_UP_ALL_LANES; | 325 | lane_mask = PWR_UP_ALL_LANES; |
| 326 | break; | 326 | break; |
| @@ -337,7 +337,7 @@ void intel_combo_phy_power_up_lanes(struct drm_i915_private *dev_priv, · 10 unmodified lines | |||
| 337 | break; | 337 | break; |
| 338 | default: | 338 | default: |
| 339 | MISSING_CASE(lane_count); | 339 | MISSING_CASE(lane_count); |
| 340 | /* fall-through */ | 340 | fallthrough; |
| 341 | case 4: | 341 | case 4: |
| 342 | lane_mask = PWR_UP_ALL_LANES; | 342 | lane_mask = PWR_UP_ALL_LANES; |
| 343 | break; | 343 | break; |
| @@ -1888,7 +1888,7 @@ static void intel_ddi_get_encoder_pipes(struct intel_encoder *encoder, · 1887 unmodified lines | |||
| 1888 | switch (tmp & TRANS_DDI_EDP_INPUT_MASK) { | 1888 | switch (tmp & TRANS_DDI_EDP_INPUT_MASK) { |
| 1889 | default: | 1889 | default: |
| 1890 | MISSING_CASE(tmp & TRANS_DDI_EDP_INPUT_MASK); | 1890 | MISSING_CASE(tmp & TRANS_DDI_EDP_INPUT_MASK); |
| 1891 | /* fallthrough */ | 1891 | fallthrough; |
| 1892 | case TRANS_DDI_EDP_INPUT_A_ON: | 1892 | case TRANS_DDI_EDP_INPUT_A_ON: |
| 1893 | case TRANS_DDI_EDP_INPUT_A_ONOFF: | 1893 | case TRANS_DDI_EDP_INPUT_A_ONOFF: |
| 1894 | *pipe_mask = BIT(PIPE_A); | 1894 | *pipe_mask = BIT(PIPE_A); |
| @@ -4268,7 +4268,7 @@ void intel_ddi_get_config(struct intel_encoder *encoder, · 2373 unmodified lines | |||
| 4268 | pipe_config->hdmi_scrambling = true; | 4268 | pipe_config->hdmi_scrambling = true; |
| 4269 | if (temp & TRANS_DDI_HIGH_TMDS_CHAR_RATE) | 4269 | if (temp & TRANS_DDI_HIGH_TMDS_CHAR_RATE) |
| 4270 | pipe_config->hdmi_high_tmds_clock_ratio = true; | 4270 | pipe_config->hdmi_high_tmds_clock_ratio = true; |
| 4271 | /* fall through */ | 4271 | fallthrough; |
| 4272 | case TRANS_DDI_MODE_SELECT_DVI: | 4272 | case TRANS_DDI_MODE_SELECT_DVI: |
| 4273 | pipe_config->output_types |= BIT(INTEL_OUTPUT_HDMI); | 4273 | pipe_config->output_types |= BIT(INTEL_OUTPUT_HDMI); |
| 4274 | pipe_config->lane_count = 4; | 4274 | pipe_config->lane_count = 4; |
| @@ -2029,12 +2029,12 @@ intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane) · 2028 unmodified lines | |||
| 2029 | case I915_FORMAT_MOD_Y_TILED_CCS: | 2029 | case I915_FORMAT_MOD_Y_TILED_CCS: |
| 2030 | if (is_ccs_plane(fb, color_plane)) | 2030 | if (is_ccs_plane(fb, color_plane)) |
| 2031 | return 128; | 2031 | return 128; |
| 2032 | /* fall through */ | 2032 | fallthrough; |
| 2033 | case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: | 2033 | case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: |
| 2034 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: | 2034 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: |
| 2035 | if (is_ccs_plane(fb, color_plane)) | 2035 | if (is_ccs_plane(fb, color_plane)) |
| 2036 | return 64; | 2036 | return 64; |
| 2037 | /* fall through */ | 2037 | fallthrough; |
| 2038 | case I915_FORMAT_MOD_Y_TILED: | 2038 | case I915_FORMAT_MOD_Y_TILED: |
| 2039 | if (IS_GEN(dev_priv, 2) || HAS_128_BYTE_Y_TILING(dev_priv)) | 2039 | if (IS_GEN(dev_priv, 2) || HAS_128_BYTE_Y_TILING(dev_priv)) |
| 2040 | return 128; | 2040 | return 128; |
| @@ -2043,7 +2043,7 @@ intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane) · 2 unmodified lines | |||
| 2043 | case I915_FORMAT_MOD_Yf_TILED_CCS: | 2043 | case I915_FORMAT_MOD_Yf_TILED_CCS: |
| 2044 | if (is_ccs_plane(fb, color_plane)) | 2044 | if (is_ccs_plane(fb, color_plane)) |
| 2045 | return 128; | 2045 | return 128; |
| 2046 | /* fall through */ | 2046 | fallthrough; |
| 2047 | case I915_FORMAT_MOD_Yf_TILED: | 2047 | case I915_FORMAT_MOD_Yf_TILED: |
| 2048 | switch (cpp) { | 2048 | switch (cpp) { |
| 2049 | case 1: | 2049 | case 1: |
| @@ -2185,7 +2185,7 @@ static unsigned int intel_surf_alignment(const struct drm_framebuffer *fb, · 135 unmodified lines | |||
| 2185 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: | 2185 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: |
| 2186 | if (is_semiplanar_uv_plane(fb, color_plane)) | 2186 | if (is_semiplanar_uv_plane(fb, color_plane)) |
| 2187 | return intel_tile_row_size(fb, color_plane); | 2187 | return intel_tile_row_size(fb, color_plane); |
| 2188 | /* Fall-through */ | 2188 | fallthrough; |
| 2189 | case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: | 2189 | case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: |
| 2190 | return 16 * 1024; | 2190 | return 16 * 1024; |
| 2191 | case I915_FORMAT_MOD_Y_TILED_CCS: | 2191 | case I915_FORMAT_MOD_Y_TILED_CCS: |
| @@ -2194,7 +2194,7 @@ static unsigned int intel_surf_alignment(const struct drm_framebuffer *fb, · 2 unmodified lines | |||
| 2194 | if (INTEL_GEN(dev_priv) >= 12 && | 2194 | if (INTEL_GEN(dev_priv) >= 12 && |
| 2195 | is_semiplanar_uv_plane(fb, color_plane)) | 2195 | is_semiplanar_uv_plane(fb, color_plane)) |
| 2196 | return intel_tile_row_size(fb, color_plane); | 2196 | return intel_tile_row_size(fb, color_plane); |
| 2197 | /* Fall-through */ | 2197 | fallthrough; |
| 2198 | case I915_FORMAT_MOD_Yf_TILED: | 2198 | case I915_FORMAT_MOD_Yf_TILED: |
| 2199 | return 1 * 1024 * 1024; | 2199 | return 1 * 1024 * 1024; |
| 2200 | default: | 2200 | default: |
| @@ -6211,7 +6211,7 @@ static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state, · 4010 unmodified lines | |||
| 6211 | case DRM_FORMAT_ARGB16161616F: | 6211 | case DRM_FORMAT_ARGB16161616F: |
| 6212 | if (INTEL_GEN(dev_priv) >= 11) | 6212 | if (INTEL_GEN(dev_priv) >= 11) |
| 6213 | break; | 6213 | break; |
| 6214 | /* fall through */ | 6214 | fallthrough; |
| 6215 | default: | 6215 | default: |
| 6216 | drm_dbg_kms(&dev_priv->drm, | 6216 | drm_dbg_kms(&dev_priv->drm, |
| 6217 | "[PLANE:%d:%s] FB:%d unsupported scaling format 0x%x\n", | 6217 | "[PLANE:%d:%s] FB:%d unsupported scaling format 0x%x\n", |
| @@ -10896,7 +10896,7 @@ static void hsw_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port, · 4678 unmodified lines | |||
| 10896 | break; | 10896 | break; |
| 10897 | default: | 10897 | default: |
| 10898 | MISSING_CASE(ddi_pll_sel); | 10898 | MISSING_CASE(ddi_pll_sel); |
| 10899 | /* fall through */ | 10899 | fallthrough; |
| 10900 | case PORT_CLK_SEL_NONE: | 10900 | case PORT_CLK_SEL_NONE: |
| 10901 | return; | 10901 | return; |
| 10902 | } | 10902 | } |
| @@ -10956,10 +10956,10 @@ static bool hsw_get_transcoder_state(struct intel_crtc *crtc, · 53 unmodified lines | |||
| 10956 | drm_WARN(dev, 1, | 10956 | drm_WARN(dev, 1, |
| 10957 | "unknown pipe linked to transcoder %s\n", | 10957 | "unknown pipe linked to transcoder %s\n", |
| 10958 | transcoder_name(panel_transcoder)); | 10958 | transcoder_name(panel_transcoder)); |
| 10959 | /* fall through */ | 10959 | fallthrough; |
| 10960 | case TRANS_DDI_EDP_INPUT_A_ONOFF: | 10960 | case TRANS_DDI_EDP_INPUT_A_ONOFF: |
| 10961 | force_thru = true; | 10961 | force_thru = true; |
| 10962 | /* fall through */ | 10962 | fallthrough; |
| 10963 | case TRANS_DDI_EDP_INPUT_A_ON: | 10963 | case TRANS_DDI_EDP_INPUT_A_ON: |
| 10964 | trans_pipe = PIPE_A; | 10964 | trans_pipe = PIPE_A; |
| 10965 | break; | 10965 | break; |
| @@ -13183,7 +13183,7 @@ static bool check_digital_port_conflicts(struct intel_atomic_state *state) · 2217 unmodified lines | |||
| 13183 | case INTEL_OUTPUT_DDI: | 13183 | case INTEL_OUTPUT_DDI: |
| 13184 | if (drm_WARN_ON(dev, !HAS_DDI(to_i915(dev)))) | 13184 | if (drm_WARN_ON(dev, !HAS_DDI(to_i915(dev)))) |
| 13185 | break; | 13185 | break; |
| 13186 | /* else, fall through */ | 13186 | fallthrough; |
| 13187 | case INTEL_OUTPUT_DP: | 13187 | case INTEL_OUTPUT_DP: |
| 13188 | case INTEL_OUTPUT_HDMI: | 13188 | case INTEL_OUTPUT_HDMI: |
| 13189 | case INTEL_OUTPUT_EDP: | 13189 | case INTEL_OUTPUT_EDP: |
| @@ -14930,7 +14930,7 @@ static int intel_atomic_check(struct drm_device *dev, · 1740 unmodified lines | |||
| 14930 | if (any_ms && !check_digital_port_conflicts(state)) { | 14930 | if (any_ms && !check_digital_port_conflicts(state)) { |
| 14931 | drm_dbg_kms(&dev_priv->drm, | 14931 | drm_dbg_kms(&dev_priv->drm, |
| 14932 | "rejecting conflicting digital port configuration\n"); | 14932 | "rejecting conflicting digital port configuration\n"); |
| 14933 | ret = EINVAL; | 14933 | ret = -EINVAL; |
| 14934 | goto fail; | 14934 | goto fail; |
| 14935 | } | 14935 | } |
| 14936 | 14936 | ||
| @@ -2044,9 +2044,12 @@ DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability); · 2043 unmodified lines | |||
| 2044 | static int i915_lpsp_capability_show(struct seq_file *m, void *data) | 2044 | static int i915_lpsp_capability_show(struct seq_file *m, void *data) |
| 2045 | { | 2045 | { |
| 2046 | struct drm_connector *connector = m->private; | 2046 | struct drm_connector *connector = m->private; |
| 2047 | struct intel_encoder *encoder = | ||
| 2048 | intel_attached_encoder(to_intel_connector(connector)); | ||
| 2049 | struct drm_i915_private *i915 = to_i915(connector->dev); | 2047 | struct drm_i915_private *i915 = to_i915(connector->dev); |
| 2048 | struct intel_encoder *encoder; | ||
| 2049 | |||
| 2050 | encoder = intel_attached_encoder(to_intel_connector(connector)); | ||
| 2051 | if (!encoder) | ||
| 2052 | return -ENODEV; | ||
| 2050 | 2053 | ||
| 2051 | if (connector->status != connector_status_connected) | 2054 | if (connector->status != connector_status_connected) |
| 2052 | return -ENODEV; | 2055 | return -ENODEV; |
| @@ -4146,6 +4146,12 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 4145 unmodified lines | |||
| 4146 | .hsw.idx = TGL_PW_CTL_IDX_DDI_TC6, | 4146 | .hsw.idx = TGL_PW_CTL_IDX_DDI_TC6, |
| 4147 | }, | 4147 | }, |
| 4148 | }, | 4148 | }, |
| 4149 | { | ||
| 4150 | .name = "TC cold off", | ||
| 4151 | .domains = TGL_TC_COLD_OFF_POWER_DOMAINS, | ||
| 4152 | .ops = &tgl_tc_cold_off_ops, | ||
| 4153 | .id = DISP_PW_ID_NONE, | ||
| 4154 | }, | ||
| 4149 | { | 4155 | { |
| 4150 | .name = "AUX A", | 4156 | .name = "AUX A", |
| 4151 | .domains = TGL_AUX_A_IO_POWER_DOMAINS, | 4157 | .domains = TGL_AUX_A_IO_POWER_DOMAINS, |
| @@ -4332,12 +4338,6 @@ static const struct i915_power_well_desc tgl_power_wells[] = { · 180 unmodified lines | |||
| 4332 | .hsw.irq_pipe_mask = BIT(PIPE_D), | 4338 | .hsw.irq_pipe_mask = BIT(PIPE_D), |
| 4333 | }, | 4339 | }, |
| 4334 | }, | 4340 | }, |
| 4335 | { | ||
| 4336 | .name = "TC cold off", | ||
| 4337 | .domains = TGL_TC_COLD_OFF_POWER_DOMAINS, | ||
| 4338 | .ops = &tgl_tc_cold_off_ops, | ||
| 4339 | .id = DISP_PW_ID_NONE, | ||
| 4340 | }, | ||
| 4341 | }; | 4341 | }; |
| 4342 | 4342 | ||
| 4343 | static const struct i915_power_well_desc rkl_power_wells[] = { | 4343 | static const struct i915_power_well_desc rkl_power_wells[] = { |
| @@ -5240,10 +5240,10 @@ struct buddy_page_mask { · 896 unmodified lines | |||
| 5240 | }; | 5240 | }; |
| 5241 | 5241 | ||
| 5242 | static const struct buddy_page_mask tgl_buddy_page_masks[] = { | 5242 | static const struct buddy_page_mask tgl_buddy_page_masks[] = { |
| 5243 | { .num_channels = 1, .type = INTEL_DRAM_LPDDR4, .page_mask = 0xE }, | ||
| 5244 | { .num_channels = 1, .type = INTEL_DRAM_DDR4, .page_mask = 0xF }, | 5243 | { .num_channels = 1, .type = INTEL_DRAM_DDR4, .page_mask = 0xF }, |
| 5245 | { .num_channels = 2, .type = INTEL_DRAM_LPDDR4, .page_mask = 0x1C }, | 5244 | { .num_channels = 2, .type = INTEL_DRAM_LPDDR4, .page_mask = 0x1C }, |
| 5246 | { .num_channels = 2, .type = INTEL_DRAM_DDR4, .page_mask = 0x1F }, | 5245 | { .num_channels = 2, .type = INTEL_DRAM_DDR4, .page_mask = 0x1F }, |
| 5246 | { .num_channels = 4, .type = INTEL_DRAM_LPDDR4, .page_mask = 0x38 }, | ||
| 5247 | {} | 5247 | {} |
| 5248 | }; | 5248 | }; |
| 5249 | 5249 | ||
| @@ -892,7 +892,7 @@ static int hsw_ddi_wrpll_get_freq(struct drm_i915_private *dev_priv, · 891 unmodified lines | |||
| 892 | refclk = dev_priv->dpll.ref_clks.nssc; | 892 | refclk = dev_priv->dpll.ref_clks.nssc; |
| 893 | break; | 893 | break; |
| 894 | } | 894 | } |
| 895 | /* fall through */ | 895 | fallthrough; |
| 896 | case WRPLL_REF_PCH_SSC: | 896 | case WRPLL_REF_PCH_SSC: |
| 897 | /* | 897 | /* |
| 898 | * We could calculate spread here, but our checking | 898 | * We could calculate spread here, but our checking |
| @@ -2977,7 +2977,7 @@ static bool icl_calc_tbt_pll(struct intel_crtc_state *crtc_state, · 2078 unmodified lines | |||
| 2977 | switch (dev_priv->dpll.ref_clks.nssc) { | 2977 | switch (dev_priv->dpll.ref_clks.nssc) { |
| 2978 | default: | 2978 | default: |
| 2979 | MISSING_CASE(dev_priv->dpll.ref_clks.nssc); | 2979 | MISSING_CASE(dev_priv->dpll.ref_clks.nssc); |
| 2980 | /* fall-through */ | 2980 | fallthrough; |
| 2981 | case 19200: | 2981 | case 19200: |
| 2982 | *pll_params = tgl_tbt_pll_19_2MHz_values; | 2982 | *pll_params = tgl_tbt_pll_19_2MHz_values; |
| 2983 | break; | 2983 | break; |
| @@ -2992,7 +2992,7 @@ static bool icl_calc_tbt_pll(struct intel_crtc_state *crtc_state, · 8 unmodified lines | |||
| 2992 | switch (dev_priv->dpll.ref_clks.nssc) { | 2992 | switch (dev_priv->dpll.ref_clks.nssc) { |
| 2993 | default: | 2993 | default: |
| 2994 | MISSING_CASE(dev_priv->dpll.ref_clks.nssc); | 2994 | MISSING_CASE(dev_priv->dpll.ref_clks.nssc); |
| 2995 | /* fall-through */ | 2995 | fallthrough; |
| 2996 | case 19200: | 2996 | case 19200: |
| 2997 | case 38400: | 2997 | case 38400: |
| 2998 | *pll_params = icl_tbt_pll_19_2MHz_values; | 2998 | *pll_params = icl_tbt_pll_19_2MHz_values; |
| @@ -3120,7 +3120,7 @@ static bool icl_mg_pll_find_divisors(int clock_khz, bool is_dp, bool use_ssc, · 121 unmodified lines | |||
| 3120 | switch (div1) { | 3120 | switch (div1) { |
| 3121 | default: | 3121 | default: |
| 3122 | MISSING_CASE(div1); | 3122 | MISSING_CASE(div1); |
| 3123 | /* fall through */ | 3123 | fallthrough; |
| 3124 | case 2: | 3124 | case 2: |
| 3125 | hsdiv = MG_CLKTOP2_HSCLKCTL_HSDIV_RATIO_2; | 3125 | hsdiv = MG_CLKTOP2_HSCLKCTL_HSDIV_RATIO_2; |
| 3126 | break; | 3126 | break; |
| @@ -229,7 +229,7 @@ int intel_pch_panel_fitting(struct intel_crtc_state *crtc_state, · 228 unmodified lines | |||
| 229 | case DRM_MODE_SCALE_NONE: | 229 | case DRM_MODE_SCALE_NONE: |
| 230 | WARN_ON(adjusted_mode->crtc_hdisplay != crtc_state->pipe_src_w); | 230 | WARN_ON(adjusted_mode->crtc_hdisplay != crtc_state->pipe_src_w); |
| 231 | WARN_ON(adjusted_mode->crtc_vdisplay != crtc_state->pipe_src_h); | 231 | WARN_ON(adjusted_mode->crtc_vdisplay != crtc_state->pipe_src_h); |
| 232 | /* fall through */ | 232 | fallthrough; |
| 233 | case DRM_MODE_SCALE_FULLSCREEN: | 233 | case DRM_MODE_SCALE_FULLSCREEN: |
| 234 | x = y = 0; | 234 | x = y = 0; |
| 235 | width = adjusted_mode->crtc_hdisplay; | 235 | width = adjusted_mode->crtc_hdisplay; |
| @@ -1531,7 +1531,7 @@ static void intel_sdvo_pre_enable(struct intel_atomic_state *state, · 1530 unmodified lines | |||
| 1531 | default: | 1531 | default: |
| 1532 | drm_WARN(&dev_priv->drm, 1, | 1532 | drm_WARN(&dev_priv->drm, 1, |
| 1533 | "unknown pixel multiplier specified\n"); | 1533 | "unknown pixel multiplier specified\n"); |
| 1534 | /* fall through */ | 1534 | fallthrough; |
| 1535 | case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break; | 1535 | case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break; |
| 1536 | case 2: rate = SDVO_CLOCK_RATE_MULT_2X; break; | 1536 | case 2: rate = SDVO_CLOCK_RATE_MULT_2X; break; |
| 1537 | case 4: rate = SDVO_CLOCK_RATE_MULT_4X; break; | 1537 | case 4: rate = SDVO_CLOCK_RATE_MULT_4X; break; |
| @@ -2549,19 +2549,19 @@ intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo) · 1011 unmodified lines | |||
| 2549 | switch (sdvo->controlled_output) { | 2549 | switch (sdvo->controlled_output) { |
| 2550 | case SDVO_OUTPUT_LVDS1: | 2550 | case SDVO_OUTPUT_LVDS1: |
| 2551 | mask |= SDVO_OUTPUT_LVDS1; | 2551 | mask |= SDVO_OUTPUT_LVDS1; |
| 2552 | /* fall through */ | 2552 | fallthrough; |
| 2553 | case SDVO_OUTPUT_LVDS0: | 2553 | case SDVO_OUTPUT_LVDS0: |
| 2554 | mask |= SDVO_OUTPUT_LVDS0; | 2554 | mask |= SDVO_OUTPUT_LVDS0; |
| 2555 | /* fall through */ | 2555 | fallthrough; |
| 2556 | case SDVO_OUTPUT_TMDS1: | 2556 | case SDVO_OUTPUT_TMDS1: |
| 2557 | mask |= SDVO_OUTPUT_TMDS1; | 2557 | mask |= SDVO_OUTPUT_TMDS1; |
| 2558 | /* fall through */ | 2558 | fallthrough; |
| 2559 | case SDVO_OUTPUT_TMDS0: | 2559 | case SDVO_OUTPUT_TMDS0: |
| 2560 | mask |= SDVO_OUTPUT_TMDS0; | 2560 | mask |= SDVO_OUTPUT_TMDS0; |
| 2561 | /* fall through */ | 2561 | fallthrough; |
| 2562 | case SDVO_OUTPUT_RGB1: | 2562 | case SDVO_OUTPUT_RGB1: |
| 2563 | mask |= SDVO_OUTPUT_RGB1; | 2563 | mask |= SDVO_OUTPUT_RGB1; |
| 2564 | /* fall through */ | 2564 | fallthrough; |
| 2565 | case SDVO_OUTPUT_RGB0: | 2565 | case SDVO_OUTPUT_RGB0: |
| 2566 | mask |= SDVO_OUTPUT_RGB0; | 2566 | mask |= SDVO_OUTPUT_RGB0; |
| 2567 | break; | 2567 | break; |
| @@ -2147,7 +2147,7 @@ static int skl_plane_check_fb(const struct intel_crtc_state *crtc_state, · 2146 unmodified lines | |||
| 2147 | case DRM_FORMAT_RGB565: | 2147 | case DRM_FORMAT_RGB565: |
| 2148 | if (INTEL_GEN(dev_priv) >= 11) | 2148 | if (INTEL_GEN(dev_priv) >= 11) |
| 2149 | break; | 2149 | break; |
| 2150 | /* fall through */ | 2150 | fallthrough; |
| 2151 | case DRM_FORMAT_C8: | 2151 | case DRM_FORMAT_C8: |
| 2152 | case DRM_FORMAT_XRGB16161616F: | 2152 | case DRM_FORMAT_XRGB16161616F: |
| 2153 | case DRM_FORMAT_XBGR16161616F: | 2153 | case DRM_FORMAT_XBGR16161616F: |
| @@ -2702,7 +2702,7 @@ static bool g4x_sprite_format_mod_supported(struct drm_plane *_plane, · 548 unmodified lines | |||
| 2702 | if (modifier == DRM_FORMAT_MOD_LINEAR || | 2702 | if (modifier == DRM_FORMAT_MOD_LINEAR || |
| 2703 | modifier == I915_FORMAT_MOD_X_TILED) | 2703 | modifier == I915_FORMAT_MOD_X_TILED) |
| 2704 | return true; | 2704 | return true; |
| 2705 | /* fall through */ | 2705 | fallthrough; |
| 2706 | default: | 2706 | default: |
| 2707 | return false; | 2707 | return false; |
| 2708 | } | 2708 | } |
| @@ -2733,7 +2733,7 @@ static bool snb_sprite_format_mod_supported(struct drm_plane *_plane, · 24 unmodified lines | |||
| 2733 | if (modifier == DRM_FORMAT_MOD_LINEAR || | 2733 | if (modifier == DRM_FORMAT_MOD_LINEAR || |
| 2734 | modifier == I915_FORMAT_MOD_X_TILED) | 2734 | modifier == I915_FORMAT_MOD_X_TILED) |
| 2735 | return true; | 2735 | return true; |
| 2736 | /* fall through */ | 2736 | fallthrough; |
| 2737 | default: | 2737 | default: |
| 2738 | return false; | 2738 | return false; |
| 2739 | } | 2739 | } |
| @@ -2768,7 +2768,7 @@ static bool vlv_sprite_format_mod_supported(struct drm_plane *_plane, · 28 unmodified lines | |||
| 2768 | if (modifier == DRM_FORMAT_MOD_LINEAR || | 2768 | if (modifier == DRM_FORMAT_MOD_LINEAR || |
| 2769 | modifier == I915_FORMAT_MOD_X_TILED) | 2769 | modifier == I915_FORMAT_MOD_X_TILED) |
| 2770 | return true; | 2770 | return true; |
| 2771 | /* fall through */ | 2771 | fallthrough; |
| 2772 | default: | 2772 | default: |
| 2773 | return false; | 2773 | return false; |
| 2774 | } | 2774 | } |
| @@ -2801,7 +2801,7 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, · 26 unmodified lines | |||
| 2801 | case DRM_FORMAT_ABGR8888: | 2801 | case DRM_FORMAT_ABGR8888: |
| 2802 | if (is_ccs_modifier(modifier)) | 2802 | if (is_ccs_modifier(modifier)) |
| 2803 | return true; | 2803 | return true; |
| 2804 | /* fall through */ | 2804 | fallthrough; |
| 2805 | case DRM_FORMAT_RGB565: | 2805 | case DRM_FORMAT_RGB565: |
| 2806 | case DRM_FORMAT_XRGB2101010: | 2806 | case DRM_FORMAT_XRGB2101010: |
| 2807 | case DRM_FORMAT_XBGR2101010: | 2807 | case DRM_FORMAT_XBGR2101010: |
| @@ -2819,7 +2819,7 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, · 11 unmodified lines | |||
| 2819 | case DRM_FORMAT_XVYU2101010: | 2819 | case DRM_FORMAT_XVYU2101010: |
| 2820 | if (modifier == I915_FORMAT_MOD_Yf_TILED) | 2820 | if (modifier == I915_FORMAT_MOD_Yf_TILED) |
| 2821 | return true; | 2821 | return true; |
| 2822 | /* fall through */ | 2822 | fallthrough; |
| 2823 | case DRM_FORMAT_C8: | 2823 | case DRM_FORMAT_C8: |
| 2824 | case DRM_FORMAT_XBGR16161616F: | 2824 | case DRM_FORMAT_XBGR16161616F: |
| 2825 | case DRM_FORMAT_ABGR16161616F: | 2825 | case DRM_FORMAT_ABGR16161616F: |
| @@ -2834,7 +2834,7 @@ static bool skl_plane_format_mod_supported(struct drm_plane *_plane, · 8 unmodified lines | |||
| 2834 | modifier == I915_FORMAT_MOD_X_TILED || | 2834 | modifier == I915_FORMAT_MOD_X_TILED || |
| 2835 | modifier == I915_FORMAT_MOD_Y_TILED) | 2835 | modifier == I915_FORMAT_MOD_Y_TILED) |
| 2836 | return true; | 2836 | return true; |
| 2837 | /* fall through */ | 2837 | fallthrough; |
| 2838 | default: | 2838 | default: |
| 2839 | return false; | 2839 | return false; |
| 2840 | } | 2840 | } |
| @@ -2860,7 +2860,7 @@ static bool gen12_plane_format_mod_supported(struct drm_plane *_plane, · 19 unmodified lines | |||
| 2860 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: | 2860 | case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: |
| 2861 | if (!gen12_plane_supports_mc_ccs(dev_priv, plane->id)) | 2861 | if (!gen12_plane_supports_mc_ccs(dev_priv, plane->id)) |
| 2862 | return false; | 2862 | return false; |
| 2863 | /* fall through */ | 2863 | fallthrough; |
| 2864 | case DRM_FORMAT_MOD_LINEAR: | 2864 | case DRM_FORMAT_MOD_LINEAR: |
| 2865 | case I915_FORMAT_MOD_X_TILED: | 2865 | case I915_FORMAT_MOD_X_TILED: |
| 2866 | case I915_FORMAT_MOD_Y_TILED: | 2866 | case I915_FORMAT_MOD_Y_TILED: |
| @@ -2877,7 +2877,7 @@ static bool gen12_plane_format_mod_supported(struct drm_plane *_plane, · 10 unmodified lines | |||
| 2877 | case DRM_FORMAT_ABGR8888: | 2877 | case DRM_FORMAT_ABGR8888: |
| 2878 | if (is_ccs_modifier(modifier)) | 2878 | if (is_ccs_modifier(modifier)) |
| 2879 | return true; | 2879 | return true; |
| 2880 | /* fall through */ | 2880 | fallthrough; |
| 2881 | case DRM_FORMAT_YUYV: | 2881 | case DRM_FORMAT_YUYV: |
| 2882 | case DRM_FORMAT_YVYU: | 2882 | case DRM_FORMAT_YVYU: |
| 2883 | case DRM_FORMAT_UYVY: | 2883 | case DRM_FORMAT_UYVY: |
| @@ -2889,7 +2889,7 @@ static bool gen12_plane_format_mod_supported(struct drm_plane *_plane, · 5 unmodified lines | |||
| 2889 | case DRM_FORMAT_P016: | 2889 | case DRM_FORMAT_P016: |
| 2890 | if (modifier == I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS) | 2890 | if (modifier == I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS) |
| 2891 | return true; | 2891 | return true; |
| 2892 | /* fall through */ | 2892 | fallthrough; |
| 2893 | case DRM_FORMAT_RGB565: | 2893 | case DRM_FORMAT_RGB565: |
| 2894 | case DRM_FORMAT_XRGB2101010: | 2894 | case DRM_FORMAT_XRGB2101010: |
| 2895 | case DRM_FORMAT_XBGR2101010: | 2895 | case DRM_FORMAT_XBGR2101010: |
| @@ -2910,7 +2910,7 @@ static bool gen12_plane_format_mod_supported(struct drm_plane *_plane, · 14 unmodified lines | |||
| 2910 | modifier == I915_FORMAT_MOD_X_TILED || | 2910 | modifier == I915_FORMAT_MOD_X_TILED || |
| 2911 | modifier == I915_FORMAT_MOD_Y_TILED) | 2911 | modifier == I915_FORMAT_MOD_Y_TILED) |
| 2912 | return true; | 2912 | return true; |
| 2913 | /* fall through */ | 2913 | fallthrough; |
| 2914 | default: | 2914 | default: |
| 2915 | return false; | 2915 | return false; |
| 2916 | } | 2916 | } |
| @@ -159,7 +159,7 @@ int intel_tc_port_fia_max_lane_count(struct intel_digital_port *dig_port) · 158 unmodified lines | |||
| 159 | switch (lane_mask) { | 159 | switch (lane_mask) { |
| 160 | default: | 160 | default: |
| 161 | MISSING_CASE(lane_mask); | 161 | MISSING_CASE(lane_mask); |
| 162 | /* fall-through */ | 162 | fallthrough; |
| 163 | case 0x1: | 163 | case 0x1: |
| 164 | case 0x2: | 164 | case 0x2: |
| 165 | case 0x4: | 165 | case 0x4: |
| @@ -209,7 +209,7 @@ static vm_fault_t i915_error_to_vmf_fault(int err) · 208 unmodified lines | |||
| 209 | switch (err) { | 209 | switch (err) { |
| 210 | default: | 210 | default: |
| 211 | WARN_ONCE(err, "unhandled error in %s: %i\n", __func__, err); | 211 | WARN_ONCE(err, "unhandled error in %s: %i\n", __func__, err); |
| 212 | /* fallthrough */ | 212 | fallthrough; |
| 213 | case -EIO: /* shmemfs failure from swap device */ | 213 | case -EIO: /* shmemfs failure from swap device */ |
| 214 | case -EFAULT: /* purged object */ | 214 | case -EFAULT: /* purged object */ |
| 215 | case -ENODEV: /* bad object, how did you get here! */ | 215 | case -ENODEV: /* bad object, how did you get here! */ |
| @@ -276,7 +276,7 @@ static void *i915_gem_object_map(struct drm_i915_gem_object *obj, · 275 unmodified lines | |||
| 276 | switch (type) { | 276 | switch (type) { |
| 277 | default: | 277 | default: |
| 278 | MISSING_CASE(type); | 278 | MISSING_CASE(type); |
| 279 | /* fallthrough - to use PAGE_KERNEL anyway */ | 279 | fallthrough; /* to use PAGE_KERNEL anyway */ |
| 280 | case I915_MAP_WB: | 280 | case I915_MAP_WB: |
| 281 | pgprot = PAGE_KERNEL; | 281 | pgprot = PAGE_KERNEL; |
| 282 | break; | 282 | break; |
| @@ -249,7 +249,7 @@ static void vlv_get_stolen_reserved(struct drm_i915_private *i915, · 248 unmodified lines | |||
| 249 | switch (reg_val & GEN7_STOLEN_RESERVED_SIZE_MASK) { | 249 | switch (reg_val & GEN7_STOLEN_RESERVED_SIZE_MASK) { |
| 250 | default: | 250 | default: |
| 251 | MISSING_CASE(reg_val & GEN7_STOLEN_RESERVED_SIZE_MASK); | 251 | MISSING_CASE(reg_val & GEN7_STOLEN_RESERVED_SIZE_MASK); |
| 252 | /* fall through */ | 252 | fallthrough; |
| 253 | case GEN7_STOLEN_RESERVED_1M: | 253 | case GEN7_STOLEN_RESERVED_1M: |
| 254 | *size = 1024 * 1024; | 254 | *size = 1024 * 1024; |
| 255 | break; | 255 | break; |
| @@ -416,7 +416,7 @@ static int i915_gem_init_stolen(struct drm_i915_private *i915) · 160 unmodified lines | |||
| 416 | case 4: | 416 | case 4: |
| 417 | if (!IS_G4X(i915)) | 417 | if (!IS_G4X(i915)) |
| 418 | break; | 418 | break; |
| 419 | /* fall through */ | 419 | fallthrough; |
| 420 | case 5: | 420 | case 5: |
| 421 | g4x_get_stolen_reserved(i915, uncore, | 421 | g4x_get_stolen_reserved(i915, uncore, |
| 422 | &reserved_base, &reserved_size); | 422 | &reserved_base, &reserved_size); |
| @@ -445,7 +445,7 @@ static int i915_gem_init_stolen(struct drm_i915_private *i915) · 22 unmodified lines | |||
| 445 | break; | 445 | break; |
| 446 | default: | 446 | default: |
| 447 | MISSING_CASE(INTEL_GEN(i915)); | 447 | MISSING_CASE(INTEL_GEN(i915)); |
| 448 | /* fall-through */ | 448 | fallthrough; |
| 449 | case 11: | 449 | case 11: |
| 450 | case 12: | 450 | case 12: |
| 451 | icl_get_stolen_reserved(i915, uncore, | 451 | icl_get_stolen_reserved(i915, uncore, |
| @@ -213,7 +213,7 @@ u32 intel_engine_context_size(struct intel_gt *gt, u8 class) · 212 unmodified lines | |||
| 213 | break; | 213 | break; |
| 214 | default: | 214 | default: |
| 215 | MISSING_CASE(class); | 215 | MISSING_CASE(class); |
| 216 | /* fall through */ | 216 | fallthrough; |
| 217 | case VIDEO_DECODE_CLASS: | 217 | case VIDEO_DECODE_CLASS: |
| 218 | case VIDEO_ENHANCEMENT_CLASS: | 218 | case VIDEO_ENHANCEMENT_CLASS: |
| 219 | case COPY_ENGINE_CLASS: | 219 | case COPY_ENGINE_CLASS: |
| @@ -1437,7 +1437,7 @@ i915_get_ggtt_vma_pages(struct i915_vma *vma) · 1436 unmodified lines | |||
| 1437 | switch (vma->ggtt_view.type) { | 1437 | switch (vma->ggtt_view.type) { |
| 1438 | default: | 1438 | default: |
| 1439 | GEM_BUG_ON(vma->ggtt_view.type); | 1439 | GEM_BUG_ON(vma->ggtt_view.type); |
| 1440 | /* fall through */ | 1440 | fallthrough; |
| 1441 | case I915_GGTT_VIEW_NORMAL: | 1441 | case I915_GGTT_VIEW_NORMAL: |
| 1442 | vma->pages = vma->obj->mm.pages; | 1442 | vma->pages = vma->obj->mm.pages; |
| 1443 | return 0; | 1443 | return 0; |
| @@ -100,7 +100,7 @@ static void set_hwsp(struct intel_engine_cs *engine, u32 offset) · 99 unmodified lines | |||
| 100 | */ | 100 | */ |
| 101 | default: | 101 | default: |
| 102 | GEM_BUG_ON(engine->id); | 102 | GEM_BUG_ON(engine->id); |
| 103 | /* fallthrough */ | 103 | fallthrough; |
| 104 | case RCS0: | 104 | case RCS0: |
| 105 | hwsp = RENDER_HWS_PGA_GEN7; | 105 | hwsp = RENDER_HWS_PGA_GEN7; |
| 106 | break; | 106 | break; |
| @@ -70,6 +70,7 @@ static void vgpu_pci_cfg_mem_write(struct intel_vgpu *vgpu, unsigned int off, · 69 unmodified lines | |||
| 70 | { | 70 | { |
| 71 | u8 *cfg_base = vgpu_cfg_space(vgpu); | 71 | u8 *cfg_base = vgpu_cfg_space(vgpu); |
| 72 | u8 mask, new, old; | 72 | u8 mask, new, old; |
| 73 | pci_power_t pwr; | ||
| 73 | int i = 0; | 74 | int i = 0; |
| 74 | 75 | ||
| 75 | for (; i < bytes && (off + i < sizeof(pci_cfg_space_rw_bmp)); i++) { | 76 | for (; i < bytes && (off + i < sizeof(pci_cfg_space_rw_bmp)); i++) { |
| @@ -91,6 +92,15 @@ static void vgpu_pci_cfg_mem_write(struct intel_vgpu *vgpu, unsigned int off, · 15 unmodified lines | |||
| 91 | /* For other configuration space directly copy as it is. */ | 92 | /* For other configuration space directly copy as it is. */ |
| 92 | if (i < bytes) | 93 | if (i < bytes) |
| 93 | memcpy(cfg_base + off + i, src + i, bytes - i); | 94 | memcpy(cfg_base + off + i, src + i, bytes - i); |
| 95 | |||
| 96 | if (off == vgpu->cfg_space.pmcsr_off && vgpu->cfg_space.pmcsr_off) { | ||
| 97 | pwr = (pci_power_t __force)(*(u16*)(&vgpu_cfg_space(vgpu)[off]) | ||
| 98 | & PCI_PM_CTRL_STATE_MASK); | ||
| 99 | if (pwr == PCI_D3hot) | ||
| 100 | vgpu->d3_entered = true; | ||
| 101 | gvt_dbg_core("vgpu-%d power status changed to %d\n", | ||
| 102 | vgpu->id, pwr); | ||
| 103 | } | ||
| 94 | } | 104 | } |
| 95 | 105 | ||
| 96 | /** | 106 | /** |
| @@ -366,6 +376,7 @@ void intel_vgpu_init_cfg_space(struct intel_vgpu *vgpu, · 269 unmodified lines | |||
| 366 | struct intel_gvt *gvt = vgpu->gvt; | 376 | struct intel_gvt *gvt = vgpu->gvt; |
| 367 | const struct intel_gvt_device_info *info = &gvt->device_info; | 377 | const struct intel_gvt_device_info *info = &gvt->device_info; |
| 368 | u16 *gmch_ctl; | 378 | u16 *gmch_ctl; |
| 379 | u8 next; | ||
| 369 | 380 | ||
| 370 | memcpy(vgpu_cfg_space(vgpu), gvt->firmware.cfg_space, | 381 | memcpy(vgpu_cfg_space(vgpu), gvt->firmware.cfg_space, |
| 371 | info->cfg_space_size); | 382 | info->cfg_space_size); |
| @@ -401,6 +412,19 @@ void intel_vgpu_init_cfg_space(struct intel_vgpu *vgpu, · 29 unmodified lines | |||
| 401 | pci_resource_len(gvt->gt->i915->drm.pdev, 2); | 412 | pci_resource_len(gvt->gt->i915->drm.pdev, 2); |
| 402 | 413 | ||
| 403 | memset(vgpu_cfg_space(vgpu) + PCI_ROM_ADDRESS, 0, 4); | 414 | memset(vgpu_cfg_space(vgpu) + PCI_ROM_ADDRESS, 0, 4); |
| 415 | |||
| 416 | /* PM Support */ | ||
| 417 | vgpu->cfg_space.pmcsr_off = 0; | ||
| 418 | if (vgpu_cfg_space(vgpu)[PCI_STATUS] & PCI_STATUS_CAP_LIST) { | ||
| 419 | next = vgpu_cfg_space(vgpu)[PCI_CAPABILITY_LIST]; | ||
| 420 | do { | ||
| 421 | if (vgpu_cfg_space(vgpu)[next + PCI_CAP_LIST_ID] == PCI_CAP_ID_PM) { | ||
| 422 | vgpu->cfg_space.pmcsr_off = next + PCI_PM_CTRL; | ||
| 423 | break; | ||
| 424 | } | ||
| 425 | next = vgpu_cfg_space(vgpu)[next + PCI_CAP_LIST_NEXT]; | ||
| 426 | } while (next); | ||
| 427 | } | ||
| 404 | } | 428 | } |
| 405 | 429 | ||
| 406 | /** | 430 | /** |
| @@ -2501,7 +2501,7 @@ int intel_vgpu_init_gtt(struct intel_vgpu *vgpu) · 2500 unmodified lines | |||
| 2501 | return create_scratch_page_tree(vgpu); | 2501 | return create_scratch_page_tree(vgpu); |
| 2502 | } | 2502 | } |
| 2503 | 2503 | ||
| 2504 | static void intel_vgpu_destroy_all_ppgtt_mm(struct intel_vgpu *vgpu) | 2504 | void intel_vgpu_destroy_all_ppgtt_mm(struct intel_vgpu *vgpu) |
| 2505 | { | 2505 | { |
| 2506 | struct list_head *pos, *n; | 2506 | struct list_head *pos, *n; |
| 2507 | struct intel_vgpu_mm *mm; | 2507 | struct intel_vgpu_mm *mm; |
| @@ -279,4 +279,6 @@ int intel_vgpu_emulate_ggtt_mmio_read(struct intel_vgpu *vgpu, · 278 unmodified lines | |||
| 279 | int intel_vgpu_emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, | 279 | int intel_vgpu_emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, |
| 280 | unsigned int off, void *p_data, unsigned int bytes); | 280 | unsigned int off, void *p_data, unsigned int bytes); |
| 281 | 281 | ||
| 282 | void intel_vgpu_destroy_all_ppgtt_mm(struct intel_vgpu *vgpu); | ||
| 283 | |||
| 282 | #endif /* _GVT_GTT_H_ */ | 284 | #endif /* _GVT_GTT_H_ */ |
| @@ -106,6 +106,7 @@ struct intel_vgpu_pci_bar { · 105 unmodified lines | |||
| 106 | struct intel_vgpu_cfg_space { | 106 | struct intel_vgpu_cfg_space { |
| 107 | unsigned char virtual_cfg_space[PCI_CFG_SPACE_EXP_SIZE]; | 107 | unsigned char virtual_cfg_space[PCI_CFG_SPACE_EXP_SIZE]; |
| 108 | struct intel_vgpu_pci_bar bar[INTEL_GVT_MAX_BAR_NUM]; | 108 | struct intel_vgpu_pci_bar bar[INTEL_GVT_MAX_BAR_NUM]; |
| 109 | u32 pmcsr_off; | ||
| 109 | }; | 110 | }; |
| 110 | 111 | ||
| 111 | #define vgpu_cfg_space(vgpu) ((vgpu)->cfg_space.virtual_cfg_space) | 112 | #define vgpu_cfg_space(vgpu) ((vgpu)->cfg_space.virtual_cfg_space) |
| @@ -198,6 +199,8 @@ struct intel_vgpu { · 86 unmodified lines | |||
| 198 | struct intel_vgpu_submission submission; | 199 | struct intel_vgpu_submission submission; |
| 199 | struct radix_tree_root page_track_tree; | 200 | struct radix_tree_root page_track_tree; |
| 200 | u32 hws_pga[I915_NUM_ENGINES]; | 201 | u32 hws_pga[I915_NUM_ENGINES]; |
| 202 | /* Set on PCI_D3, reset on DMLR, not reflecting the actual PM state */ | ||
| 203 | bool d3_entered; | ||
| 201 | 204 | ||
| 202 | struct dentry *debugfs; | 205 | struct dentry *debugfs; |
| 203 | 206 | ||
| @@ -1226,7 +1226,7 @@ static int handle_g2v_notification(struct intel_vgpu *vgpu, int notification) · 1225 unmodified lines | |||
| 1226 | switch (notification) { | 1226 | switch (notification) { |
| 1227 | case VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE: | 1227 | case VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE: |
| 1228 | root_entry_type = GTT_TYPE_PPGTT_ROOT_L3_ENTRY; | 1228 | root_entry_type = GTT_TYPE_PPGTT_ROOT_L3_ENTRY; |
| 1229 | /* fall through */ | 1229 | fallthrough; |
| 1230 | case VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE: | 1230 | case VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE: |
| 1231 | mm = intel_vgpu_get_ppgtt_mm(vgpu, root_entry_type, pdps); | 1231 | mm = intel_vgpu_get_ppgtt_mm(vgpu, root_entry_type, pdps); |
| 1232 | return PTR_ERR_OR_ZERO(mm); | 1232 | return PTR_ERR_OR_ZERO(mm); |
| @@ -257,6 +257,7 @@ void intel_gvt_release_vgpu(struct intel_vgpu *vgpu) · 256 unmodified lines | |||
| 257 | intel_gvt_deactivate_vgpu(vgpu); | 257 | intel_gvt_deactivate_vgpu(vgpu); |
| 258 | 258 | ||
| 259 | mutex_lock(&vgpu->vgpu_lock); | 259 | mutex_lock(&vgpu->vgpu_lock); |
| 260 | vgpu->d3_entered = false; | ||
| 260 | intel_vgpu_clean_workloads(vgpu, ALL_ENGINES); | 261 | intel_vgpu_clean_workloads(vgpu, ALL_ENGINES); |
| 261 | intel_vgpu_dmabuf_cleanup(vgpu); | 262 | intel_vgpu_dmabuf_cleanup(vgpu); |
| 262 | mutex_unlock(&vgpu->vgpu_lock); | 263 | mutex_unlock(&vgpu->vgpu_lock); |
| @@ -393,6 +394,7 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt, · 130 unmodified lines | |||
| 393 | INIT_RADIX_TREE(&vgpu->page_track_tree, GFP_KERNEL); | 394 | INIT_RADIX_TREE(&vgpu->page_track_tree, GFP_KERNEL); |
| 394 | idr_init(&vgpu->object_idr); | 395 | idr_init(&vgpu->object_idr); |
| 395 | intel_vgpu_init_cfg_space(vgpu, param->primary); | 396 | intel_vgpu_init_cfg_space(vgpu, param->primary); |
| 397 | vgpu->d3_entered = false; | ||
| 396 | 398 | ||
| 397 | ret = intel_vgpu_init_mmio(vgpu); | 399 | ret = intel_vgpu_init_mmio(vgpu); |
| 398 | if (ret) | 400 | if (ret) |
| @@ -557,10 +559,15 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr, · 158 unmodified lines | |||
| 557 | /* full GPU reset or device model level reset */ | 559 | /* full GPU reset or device model level reset */ |
| 558 | if (engine_mask == ALL_ENGINES || dmlr) { | 560 | if (engine_mask == ALL_ENGINES || dmlr) { |
| 559 | intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); | 561 | intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); |
| 560 | intel_vgpu_invalidate_ppgtt(vgpu); | 562 | if (engine_mask == ALL_ENGINES) |
| 563 | intel_vgpu_invalidate_ppgtt(vgpu); | ||
| 561 | /*fence will not be reset during virtual reset */ | 564 | /*fence will not be reset during virtual reset */ |
| 562 | if (dmlr) { | 565 | if (dmlr) { |
| 563 | intel_vgpu_reset_gtt(vgpu); | 566 | if(!vgpu->d3_entered) { |
| 567 | intel_vgpu_invalidate_ppgtt(vgpu); | ||
| 568 | intel_vgpu_destroy_all_ppgtt_mm(vgpu); | ||
| 569 | } | ||
| 570 | intel_vgpu_reset_ggtt(vgpu, true); | ||
| 564 | intel_vgpu_reset_resource(vgpu); | 571 | intel_vgpu_reset_resource(vgpu); |
| 565 | } | 572 | } |
| 566 | 573 | ||
| @@ -572,7 +579,14 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr, · 5 unmodified lines | |||
| 572 | intel_vgpu_reset_cfg_space(vgpu); | 579 | intel_vgpu_reset_cfg_space(vgpu); |
| 573 | /* only reset the failsafe mode when dmlr reset */ | 580 | /* only reset the failsafe mode when dmlr reset */ |
| 574 | vgpu->failsafe = false; | 581 | vgpu->failsafe = false; |
| 575 | vgpu->pv_notified = false; | 582 | /* |
| 583 | * PCI_D0 is set before dmlr, so reset d3_entered here | ||
| 584 | * after done using. | ||
| 585 | */ | ||
| 586 | if(vgpu->d3_entered) | ||
| 587 | vgpu->d3_entered = false; | ||
| 588 | else | ||
| 589 | vgpu->pv_notified = false; | ||
| 576 | } | 590 | } |
| 577 | } | 591 | } |
| 578 | 592 | ||
| @@ -1204,6 +1204,12 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, · 1203 unmodified lines | |||
| 1204 | return dst; | 1204 | return dst; |
| 1205 | } | 1205 | } |
| 1206 | 1206 | ||
| 1207 | static inline bool cmd_desc_is(const struct drm_i915_cmd_descriptor * const desc, | ||
| 1208 | const u32 cmd) | ||
| 1209 | { | ||
| 1210 | return desc->cmd.value == (cmd & desc->cmd.mask); | ||
| 1211 | } | ||
| 1212 | |||
| 1207 | static bool check_cmd(const struct intel_engine_cs *engine, | 1213 | static bool check_cmd(const struct intel_engine_cs *engine, |
| 1208 | const struct drm_i915_cmd_descriptor *desc, | 1214 | const struct drm_i915_cmd_descriptor *desc, |
| 1209 | const u32 *cmd, u32 length) | 1215 | const u32 *cmd, u32 length) |
| @@ -1242,19 +1248,19 @@ static bool check_cmd(const struct intel_engine_cs *engine, · 32 unmodified lines | |||
| 1242 | * allowed mask/value pair given in the whitelist entry. | 1248 | * allowed mask/value pair given in the whitelist entry. |
| 1243 | */ | 1249 | */ |
| 1244 | if (reg->mask) { | 1250 | if (reg->mask) { |
| 1245 | if (desc->cmd.value == MI_LOAD_REGISTER_MEM) { | 1251 | if (cmd_desc_is(desc, MI_LOAD_REGISTER_MEM)) { |
| 1246 | DRM_DEBUG("CMD: Rejected LRM to masked register 0x%08X\n", | 1252 | DRM_DEBUG("CMD: Rejected LRM to masked register 0x%08X\n", |
| 1247 | reg_addr); | 1253 | reg_addr); |
| 1248 | return false; | 1254 | return false; |
| 1249 | } | 1255 | } |
| 1250 | 1256 | ||
| 1251 | if (desc->cmd.value == MI_LOAD_REGISTER_REG) { | 1257 | if (cmd_desc_is(desc, MI_LOAD_REGISTER_REG)) { |
| 1252 | DRM_DEBUG("CMD: Rejected LRR to masked register 0x%08X\n", | 1258 | DRM_DEBUG("CMD: Rejected LRR to masked register 0x%08X\n", |
| 1253 | reg_addr); | 1259 | reg_addr); |
| 1254 | return false; | 1260 | return false; |
| 1255 | } | 1261 | } |
| 1256 | 1262 | ||
| 1257 | if (desc->cmd.value == MI_LOAD_REGISTER_IMM(1) && | 1263 | if (cmd_desc_is(desc, MI_LOAD_REGISTER_IMM(1)) && |
| 1258 | (offset + 2 > length || | 1264 | (offset + 2 > length || |
| 1259 | (cmd[offset + 1] & reg->mask) != reg->value)) { | 1265 | (cmd[offset + 1] & reg->mask) != reg->value)) { |
| 1260 | DRM_DEBUG("CMD: Rejected LRI to masked register 0x%08X\n", | 1266 | DRM_DEBUG("CMD: Rejected LRI to masked register 0x%08X\n", |
| @@ -1478,7 +1484,7 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine, · 217 unmodified lines | |||
| 1478 | break; | 1484 | break; |
| 1479 | } | 1485 | } |
| 1480 | 1486 | ||
| 1481 | if (desc->cmd.value == MI_BATCH_BUFFER_START) { | 1487 | if (cmd_desc_is(desc, MI_BATCH_BUFFER_START)) { |
| 1482 | ret = check_bbstart(cmd, offset, length, batch_length, | 1488 | ret = check_bbstart(cmd, offset, length, batch_length, |
| 1483 | batch_addr, shadow_addr, | 1489 | batch_addr, shadow_addr, |
| 1484 | jump_whitelist); | 1490 | jump_whitelist); |
| @@ -1159,7 +1159,7 @@ static void engine_record_registers(struct intel_engine_coredump *ee) · 1158 unmodified lines | |||
| 1159 | switch (engine->id) { | 1159 | switch (engine->id) { |
| 1160 | default: | 1160 | default: |
| 1161 | MISSING_CASE(engine->id); | 1161 | MISSING_CASE(engine->id); |
| 1162 | /* fall through */ | 1162 | fallthrough; |
| 1163 | case RCS0: | 1163 | case RCS0: |
| 1164 | mmio = RENDER_HWS_PGA_GEN7; | 1164 | mmio = RENDER_HWS_PGA_GEN7; |
| 1165 | break; | 1165 | break; |
| @@ -445,8 +445,6 @@ static void i915_pmu_event_destroy(struct perf_event *event) · 444 unmodified lines | |||
| 445 | container_of(event->pmu, typeof(*i915), pmu.base); | 445 | container_of(event->pmu, typeof(*i915), pmu.base); |
| 446 | 446 | ||
| 447 | drm_WARN_ON(&i915->drm, event->parent); | 447 | drm_WARN_ON(&i915->drm, event->parent); |
| 448 | |||
| 449 | module_put(THIS_MODULE); | ||
| 450 | } | 448 | } |
| 451 | 449 | ||
| 452 | static int | 450 | static int |
| @@ -476,7 +474,7 @@ config_status(struct drm_i915_private *i915, u64 config) · 23 unmodified lines | |||
| 476 | if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) | 474 | if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) |
| 477 | /* Requires a mutex for sampling! */ | 475 | /* Requires a mutex for sampling! */ |
| 478 | return -ENODEV; | 476 | return -ENODEV; |
| 479 | /* Fall-through. */ | 477 | fallthrough; |
| 480 | case I915_PMU_REQUESTED_FREQUENCY: | 478 | case I915_PMU_REQUESTED_FREQUENCY: |
| 481 | if (INTEL_GEN(i915) < 6) | 479 | if (INTEL_GEN(i915) < 6) |
| 482 | return -ENODEV; | 480 | return -ENODEV; |
| @@ -538,10 +536,8 @@ static int i915_pmu_event_init(struct perf_event *event) · 55 unmodified lines | |||
| 538 | if (ret) | 536 | if (ret) |
| 539 | return ret; | 537 | return ret; |
| 540 | 538 | ||
| 541 | if (!event->parent) { | 539 | if (!event->parent) |
| 542 | __module_get(THIS_MODULE); | ||
| 543 | event->destroy = i915_pmu_event_destroy; | 540 | event->destroy = i915_pmu_event_destroy; |
| 544 | } | ||
| 545 | 541 | ||
| 546 | return 0; | 542 | return 0; |
| 547 | } | 543 | } |
| @@ -1130,6 +1126,7 @@ void i915_pmu_register(struct drm_i915_private *i915) · 582 unmodified lines | |||
| 1130 | if (!pmu->base.attr_groups) | 1126 | if (!pmu->base.attr_groups) |
| 1131 | goto err_attr; | 1127 | goto err_attr; |
| 1132 | 1128 | ||
| 1129 | pmu->base.module = THIS_MODULE; | ||
| 1133 | pmu->base.task_ctx_nr = perf_invalid_context; | 1130 | pmu->base.task_ctx_nr = perf_invalid_context; |
| 1134 | pmu->base.event_init = i915_pmu_event_init; | 1131 | pmu->base.event_init = i915_pmu_event_init; |
| 1135 | pmu->base.add = i915_pmu_event_add; | 1132 | pmu->base.add = i915_pmu_event_add; |
| @@ -8,8 +8,6 @@ · 7 unmodified lines | |||
| 8 | #include "../i915_selftest.h" | 8 | #include "../i915_selftest.h" |
| 9 | #include "i915_random.h" | 9 | #include "i915_random.h" |
| 10 | 10 | ||
| 11 | #define SZ_8G (1ULL << 33) | ||
| 12 | |||
| 13 | static void __igt_dump_block(struct i915_buddy_mm *mm, | 11 | static void __igt_dump_block(struct i915_buddy_mm *mm, |
| 14 | struct i915_buddy_block *block, | 12 | struct i915_buddy_block *block, |
| 15 | bool buddy) | 13 | bool buddy) |
| @@ -281,18 +279,22 @@ static int igt_check_mm(struct i915_buddy_mm *mm) · 265 unmodified lines | |||
| 281 | static void igt_mm_config(u64 *size, u64 *chunk_size) | 279 | static void igt_mm_config(u64 *size, u64 *chunk_size) |
| 282 | { | 280 | { |
| 283 | I915_RND_STATE(prng); | 281 | I915_RND_STATE(prng); |
| 284 | u64 s, ms; | 282 | u32 s, ms; |
| 285 | 283 | ||
| 286 | /* Nothing fancy, just try to get an interesting bit pattern */ | 284 | /* Nothing fancy, just try to get an interesting bit pattern */ |
| 287 | 285 | ||
| 288 | prandom_seed_state(&prng, i915_selftest.random_seed); | 286 | prandom_seed_state(&prng, i915_selftest.random_seed); |
| 289 | 287 | ||
| 290 | s = i915_prandom_u64_state(&prng) & (SZ_8G - 1); | 288 | /* Let size be a random number of pages up to 8 GB (2M pages) */ |
| 291 | ms = BIT_ULL(12 + (prandom_u32_state(&prng) % ilog2(s >> 12))); | 289 | s = 1 + i915_prandom_u32_max_state((BIT(33 - 12)) - 1, &prng); |
| 292 | s = max(s & -ms, ms); | 290 | /* Let the chunk size be a random power of 2 less than size */ |
| 291 | ms = BIT(i915_prandom_u32_max_state(ilog2(s), &prng)); | ||
| 292 | /* Round size down to the chunk size */ | ||
| 293 | s &= -ms; | ||
| 293 | 294 | ||
| 294 | *chunk_size = ms; | 295 | /* Convert from pages to bytes */ |
| 295 | *size = s; | 296 | *chunk_size = (u64)ms << 12; |
| 297 | *size = (u64)s << 12; | ||
| 296 | } | 298 | } |
| 297 | 299 | ||
| 298 | static int igt_buddy_alloc_smoke(void *arg) | 300 | static int igt_buddy_alloc_smoke(void *arg) |
| @@ -78,6 +78,7 @@ static void mock_device_release(struct drm_device *dev) · 77 unmodified lines | |||
| 78 | drm_mode_config_cleanup(&i915->drm); | 78 | drm_mode_config_cleanup(&i915->drm); |
| 79 | 79 | ||
| 80 | out: | 80 | out: |
| 81 | i915_params_free(&i915->params); | ||
| 81 | put_device(&i915->drm.pdev->dev); | 82 | put_device(&i915->drm.pdev->dev); |
| 82 | i915->drm.pdev = NULL; | 83 | i915->drm.pdev = NULL; |
| 83 | } | 84 | } |
| @@ -165,6 +166,8 @@ struct drm_i915_private *mock_gem_device(void) · 81 unmodified lines | |||
| 165 | i915->drm.pdev = pdev; | 166 | i915->drm.pdev = pdev; |
| 166 | drmm_add_final_kfree(&i915->drm, i915); | 167 | drmm_add_final_kfree(&i915->drm, i915); |
| 167 | 168 | ||
| 169 | i915_params_copy(&i915->params, &i915_modparams); | ||
| 170 | |||
| 168 | intel_runtime_pm_init_early(&i915->runtime_pm); | 171 | intel_runtime_pm_init_early(&i915->runtime_pm); |
| 169 | 172 | ||
| 170 | /* Using the global GTT may ask questions about KMS users, so prepare */ | 173 | /* Using the global GTT may ask questions about KMS users, so prepare */ |
| @@ -447,7 +447,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane, · 446 unmodified lines | |||
| 447 | if (fb->pitches[1] != fb->pitches[2]) | 447 | if (fb->pitches[1] != fb->pitches[2]) |
| 448 | return -EINVAL; | 448 | return -EINVAL; |
| 449 | 449 | ||
| 450 | /* fall-through */ | 450 | fallthrough; |
| 451 | case DRM_FORMAT_NV12: | 451 | case DRM_FORMAT_NV12: |
| 452 | case DRM_FORMAT_NV16: | 452 | case DRM_FORMAT_NV16: |
| 453 | ubo = drm_plane_state_to_ubo(state); | 453 | ubo = drm_plane_state_to_ubo(state); |
| @@ -205,7 +205,7 @@ static int meson_g12a_afbcd_pixel_fmt(u64 modifier, uint32_t format) · 204 unmodified lines | |||
| 205 | /* YTR is forbidden for non XBGR formats */ | 205 | /* YTR is forbidden for non XBGR formats */ |
| 206 | if (modifier & AFBC_FORMAT_MOD_YTR) | 206 | if (modifier & AFBC_FORMAT_MOD_YTR) |
| 207 | return -EINVAL; | 207 | return -EINVAL; |
| 208 | /* fall through */ | 208 | fallthrough; |
| 209 | case DRM_FORMAT_XBGR8888: | 209 | case DRM_FORMAT_XBGR8888: |
| 210 | case DRM_FORMAT_ABGR8888: | 210 | case DRM_FORMAT_ABGR8888: |
| 211 | return MAFBC_FMT_RGBA8888; | 211 | return MAFBC_FMT_RGBA8888; |
| @@ -654,7 +654,7 @@ static void meson_overlay_atomic_update(struct drm_plane *plane, · 653 unmodified lines | |||
| 654 | priv->viu.vd1_addr2, | 654 | priv->viu.vd1_addr2, |
| 655 | priv->viu.vd1_stride2, | 655 | priv->viu.vd1_stride2, |
| 656 | priv->viu.vd1_height2); | 656 | priv->viu.vd1_height2); |
| 657 | /* fallthrough */ | 657 | fallthrough; |
| 658 | case 2: | 658 | case 2: |
| 659 | gem = drm_fb_cma_get_gem_obj(fb, 1); | 659 | gem = drm_fb_cma_get_gem_obj(fb, 1); |
| 660 | priv->viu.vd1_addr1 = gem->paddr + fb->offsets[1]; | 660 | priv->viu.vd1_addr1 = gem->paddr + fb->offsets[1]; |
| @@ -666,7 +666,7 @@ static void meson_overlay_atomic_update(struct drm_plane *plane, · 5 unmodified lines | |||
| 666 | priv->viu.vd1_addr1, | 666 | priv->viu.vd1_addr1, |
| 667 | priv->viu.vd1_stride1, | 667 | priv->viu.vd1_stride1, |
| 668 | priv->viu.vd1_height1); | 668 | priv->viu.vd1_height1); |
| 669 | /* fallthrough */ | 669 | fallthrough; |
| 670 | case 1: | 670 | case 1: |
| 671 | gem = drm_fb_cma_get_gem_obj(fb, 0); | 671 | gem = drm_fb_cma_get_gem_obj(fb, 0); |
| 672 | priv->viu.vd1_addr0 = gem->paddr + fb->offsets[0]; | 672 | priv->viu.vd1_addr0 = gem->paddr + fb->offsets[0]; |
| @@ -59,7 +59,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit · 58 unmodified lines | |||
| 59 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: | 59 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: |
| 60 | if (priv->lastctx == ctx) | 60 | if (priv->lastctx == ctx) |
| 61 | break; | 61 | break; |
| 62 | /* fall-thru */ | 62 | fallthrough; |
| 63 | case MSM_SUBMIT_CMD_BUF: | 63 | case MSM_SUBMIT_CMD_BUF: |
| 64 | /* copy commands into RB: */ | 64 | /* copy commands into RB: */ |
| 65 | obj = submit->bos[submit->cmd[i].idx].obj; | 65 | obj = submit->bos[submit->cmd[i].idx].obj; |
| @@ -150,7 +150,7 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit, · 84 unmodified lines | |||
| 150 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: | 150 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: |
| 151 | if (priv->lastctx == ctx) | 151 | if (priv->lastctx == ctx) |
| 152 | break; | 152 | break; |
| 153 | /* fall-thru */ | 153 | fallthrough; |
| 154 | case MSM_SUBMIT_CMD_BUF: | 154 | case MSM_SUBMIT_CMD_BUF: |
| 155 | OUT_PKT7(ring, CP_INDIRECT_BUFFER_PFE, 3); | 155 | OUT_PKT7(ring, CP_INDIRECT_BUFFER_PFE, 3); |
| 156 | OUT_RING(ring, lower_32_bits(submit->cmd[i].iova)); | 156 | OUT_RING(ring, lower_32_bits(submit->cmd[i].iova)); |
| @@ -133,7 +133,7 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, struct dev_pm_opp *opp) · 132 unmodified lines | |||
| 133 | 133 | ||
| 134 | if (!gmu->legacy) { | 134 | if (!gmu->legacy) { |
| 135 | a6xx_hfi_set_freq(gmu, perf_index); | 135 | a6xx_hfi_set_freq(gmu, perf_index); |
| 136 | icc_set_bw(gpu->icc_path, 0, MBps_to_icc(7216)); | 136 | dev_pm_opp_set_bw(&gpu->pdev->dev, opp); |
| 137 | pm_runtime_put(gmu->dev); | 137 | pm_runtime_put(gmu->dev); |
| 138 | return; | 138 | return; |
| 139 | } | 139 | } |
| @@ -157,11 +157,7 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, struct dev_pm_opp *opp) · 17 unmodified lines | |||
| 157 | if (ret) | 157 | if (ret) |
| 158 | dev_err(gmu->dev, "GMU set GPU frequency error: %d\n", ret); | 158 | dev_err(gmu->dev, "GMU set GPU frequency error: %d\n", ret); |
| 159 | 159 | ||
| 160 | /* | 160 | dev_pm_opp_set_bw(&gpu->pdev->dev, opp); |
| 161 | * Eventually we will want to scale the path vote with the frequency but | ||
| 162 | * for now leave it at max so that the performance is nominal. | ||
| 163 | */ | ||
| 164 | icc_set_bw(gpu->icc_path, 0, MBps_to_icc(7216)); | ||
| 165 | pm_runtime_put(gmu->dev); | 161 | pm_runtime_put(gmu->dev); |
| 166 | } | 162 | } |
| 167 | 163 | ||
| @@ -204,6 +200,16 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu) · 36 unmodified lines | |||
| 204 | { | 200 | { |
| 205 | int ret; | 201 | int ret; |
| 206 | u32 val; | 202 | u32 val; |
| 203 | u32 mask, reset_val; | ||
| 204 | |||
| 205 | val = gmu_read(gmu, REG_A6XX_GMU_CM3_DTCM_START + 0xff8); | ||
| 206 | if (val <= 0x20010004) { | ||
| 207 | mask = 0xffffffff; | ||
| 208 | reset_val = 0xbabeface; | ||
| 209 | } else { | ||
| 210 | mask = 0x1ff; | ||
| 211 | reset_val = 0x100; | ||
| 212 | } | ||
| 207 | 213 | ||
| 208 | gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1); | 214 | gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1); |
| 209 | 215 | ||
| @@ -215,7 +221,7 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu) · 5 unmodified lines | |||
| 215 | gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 0); | 221 | gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 0); |
| 216 | 222 | ||
| 217 | ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_CM3_FW_INIT_RESULT, val, | 223 | ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_CM3_FW_INIT_RESULT, val, |
| 218 | val == 0xbabeface, 100, 10000); | 224 | (val & mask) == reset_val, 100, 10000); |
| 219 | 225 | ||
| 220 | if (ret) | 226 | if (ret) |
| 221 | DRM_DEV_ERROR(gmu->dev, "GMU firmware initialization timed out\n"); | 227 | DRM_DEV_ERROR(gmu->dev, "GMU firmware initialization timed out\n"); |
| @@ -602,7 +608,7 @@ static void a6xx_gmu_power_config(struct a6xx_gmu *gmu) · 380 unmodified lines | |||
| 602 | gmu_rmw(gmu, REG_A6XX_GMU_PWR_COL_INTER_FRAME_CTRL, 0, | 608 | gmu_rmw(gmu, REG_A6XX_GMU_PWR_COL_INTER_FRAME_CTRL, 0, |
| 603 | A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_IFPC_ENABLE | | 609 | A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_IFPC_ENABLE | |
| 604 | A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_HM_POWER_COLLAPSE_ENABLE); | 610 | A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_HM_POWER_COLLAPSE_ENABLE); |
| 605 | /* Fall through */ | 611 | fallthrough; |
| 606 | case GMU_IDLE_STATE_SPTP: | 612 | case GMU_IDLE_STATE_SPTP: |
| 607 | gmu_write(gmu, REG_A6XX_GMU_PWR_COL_SPTPRAC_HYST, | 613 | gmu_write(gmu, REG_A6XX_GMU_PWR_COL_SPTPRAC_HYST, |
| 608 | GMU_PWR_COL_HYST); | 614 | GMU_PWR_COL_HYST); |
| @@ -845,10 +851,24 @@ static void a6xx_gmu_set_initial_freq(struct msm_gpu *gpu, struct a6xx_gmu *gmu) · 236 unmodified lines | |||
| 845 | if (IS_ERR_OR_NULL(gpu_opp)) | 851 | if (IS_ERR_OR_NULL(gpu_opp)) |
| 846 | return; | 852 | return; |
| 847 | 853 | ||
| 854 | gmu->freq = 0; /* so a6xx_gmu_set_freq() doesn't exit early */ | ||
| 848 | a6xx_gmu_set_freq(gpu, gpu_opp); | 855 | a6xx_gmu_set_freq(gpu, gpu_opp); |
| 849 | dev_pm_opp_put(gpu_opp); | 856 | dev_pm_opp_put(gpu_opp); |
| 850 | } | 857 | } |
| 851 | 858 | ||
| 859 | static void a6xx_gmu_set_initial_bw(struct msm_gpu *gpu, struct a6xx_gmu *gmu) | ||
| 860 | { | ||
| 861 | struct dev_pm_opp *gpu_opp; | ||
| 862 | unsigned long gpu_freq = gmu->gpu_freqs[gmu->current_perf_index]; | ||
| 863 | |||
| 864 | gpu_opp = dev_pm_opp_find_freq_exact(&gpu->pdev->dev, gpu_freq, true); | ||
| 865 | if (IS_ERR_OR_NULL(gpu_opp)) | ||
| 866 | return; | ||
| 867 | |||
| 868 | dev_pm_opp_set_bw(&gpu->pdev->dev, gpu_opp); | ||
| 869 | dev_pm_opp_put(gpu_opp); | ||
| 870 | } | ||
| 871 | |||
| 852 | int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) | 872 | int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) |
| 853 | { | 873 | { |
| 854 | struct adreno_gpu *adreno_gpu = &a6xx_gpu->base; | 874 | struct adreno_gpu *adreno_gpu = &a6xx_gpu->base; |
| @@ -882,7 +902,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) · 27 unmodified lines | |||
| 882 | } | 902 | } |
| 883 | 903 | ||
| 884 | /* Set the bus quota to a reasonable value for boot */ | 904 | /* Set the bus quota to a reasonable value for boot */ |
| 885 | icc_set_bw(gpu->icc_path, 0, MBps_to_icc(3072)); | 905 | a6xx_gmu_set_initial_bw(gpu, gmu); |
| 886 | 906 | ||
| 887 | /* Enable the GMU interrupt */ | 907 | /* Enable the GMU interrupt */ |
| 888 | gmu_write(gmu, REG_A6XX_GMU_AO_HOST_INTERRUPT_CLR, ~0); | 908 | gmu_write(gmu, REG_A6XX_GMU_AO_HOST_INTERRUPT_CLR, ~0); |
| @@ -1051,7 +1071,7 @@ int a6xx_gmu_stop(struct a6xx_gpu *a6xx_gpu) · 162 unmodified lines | |||
| 1051 | a6xx_gmu_shutdown(gmu); | 1071 | a6xx_gmu_shutdown(gmu); |
| 1052 | 1072 | ||
| 1053 | /* Remove the bus vote */ | 1073 | /* Remove the bus vote */ |
| 1054 | icc_set_bw(gpu->icc_path, 0, 0); | 1074 | dev_pm_opp_set_bw(&gpu->pdev->dev, NULL); |
| 1055 | 1075 | ||
| 1056 | /* | 1076 | /* |
| 1057 | * Make sure the GX domain is off before turning off the GMU (CX) | 1077 | * Make sure the GX domain is off before turning off the GMU (CX) |
| @@ -117,7 +117,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit, · 116 unmodified lines | |||
| 117 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: | 117 | case MSM_SUBMIT_CMD_CTX_RESTORE_BUF: |
| 118 | if (priv->lastctx == ctx) | 118 | if (priv->lastctx == ctx) |
| 119 | break; | 119 | break; |
| 120 | /* fall-thru */ | 120 | fallthrough; |
| 121 | case MSM_SUBMIT_CMD_BUF: | 121 | case MSM_SUBMIT_CMD_BUF: |
| 122 | OUT_PKT7(ring, CP_INDIRECT_BUFFER_PFE, 3); | 122 | OUT_PKT7(ring, CP_INDIRECT_BUFFER_PFE, 3); |
| 123 | OUT_RING(ring, lower_32_bits(submit->cmd[i].iova)); | 123 | OUT_RING(ring, lower_32_bits(submit->cmd[i].iova)); |
| @@ -938,7 +938,8 @@ struct msm_gpu_state *a6xx_gpu_state_get(struct msm_gpu *gpu) · 937 unmodified lines | |||
| 938 | msm_gem_kernel_put(dumper.bo, gpu->aspace, true); | 938 | msm_gem_kernel_put(dumper.bo, gpu->aspace, true); |
| 939 | } | 939 | } |
| 940 | 940 | ||
| 941 | a6xx_get_debugbus(gpu, a6xx_state); | 941 | if (snapshot_debugbus) |
| 942 | a6xx_get_debugbus(gpu, a6xx_state); | ||
| 942 | 943 | ||
| 943 | return &a6xx_state->base; | 944 | return &a6xx_state->base; |
| 944 | } | 945 | } |
| @@ -372,7 +372,7 @@ static const struct a6xx_indexed_registers { · 371 unmodified lines | |||
| 372 | u32 data; | 372 | u32 data; |
| 373 | u32 count; | 373 | u32 count; |
| 374 | } a6xx_indexed_reglist[] = { | 374 | } a6xx_indexed_reglist[] = { |
| 375 | { "CP_SEQ_STAT", REG_A6XX_CP_SQE_STAT_ADDR, | 375 | { "CP_SQE_STAT", REG_A6XX_CP_SQE_STAT_ADDR, |
| 376 | REG_A6XX_CP_SQE_STAT_DATA, 0x33 }, | 376 | REG_A6XX_CP_SQE_STAT_DATA, 0x33 }, |
| 377 | { "CP_DRAW_STATE", REG_A6XX_CP_DRAW_STATE_ADDR, | 377 | { "CP_DRAW_STATE", REG_A6XX_CP_DRAW_STATE_ADDR, |
| 378 | REG_A6XX_CP_DRAW_STATE_DATA, 0x100 }, | 378 | REG_A6XX_CP_DRAW_STATE_DATA, 0x100 }, |
| @@ -14,6 +14,10 @@ bool hang_debug = false; · 13 unmodified lines | |||
| 14 | MODULE_PARM_DESC(hang_debug, "Dump registers when hang is detected (can be slow!)"); | 14 | MODULE_PARM_DESC(hang_debug, "Dump registers when hang is detected (can be slow!)"); |
| 15 | module_param_named(hang_debug, hang_debug, bool, 0600); | 15 | module_param_named(hang_debug, hang_debug, bool, 0600); |
| 16 | 16 | ||
| 17 | bool snapshot_debugbus = false; | ||
| 18 | MODULE_PARM_DESC(snapshot_debugbus, "Include debugbus sections in GPU devcoredump (if not fused off)"); | ||
| 19 | module_param_named(snapshot_debugbus, snapshot_debugbus, bool, 0600); | ||
| 20 | |||
| 17 | static const struct adreno_info gpulist[] = { | 21 | static const struct adreno_info gpulist[] = { |
| 18 | { | 22 | { |
| 19 | .rev = ADRENO_REV(2, 0, 0, 0), | 23 | .rev = ADRENO_REV(2, 0, 0, 0), |
| @@ -396,7 +396,7 @@ int adreno_hw_init(struct msm_gpu *gpu) · 395 unmodified lines | |||
| 396 | ring->next = ring->start; | 396 | ring->next = ring->start; |
| 397 | 397 | ||
| 398 | /* reset completed fence seqno: */ | 398 | /* reset completed fence seqno: */ |
| 399 | ring->memptrs->fence = ring->seqno; | 399 | ring->memptrs->fence = ring->fctx->completed_fence; |
| 400 | ring->memptrs->rptr = 0; | 400 | ring->memptrs->rptr = 0; |
| 401 | } | 401 | } |
| 402 | 402 | ||
| @@ -474,7 +474,7 @@ void adreno_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit, · 71 unmodified lines | |||
| 474 | /* ignore if there has not been a ctx switch: */ | 474 | /* ignore if there has not been a ctx switch: */ |
| 475 | if (priv->lastctx == ctx) | 475 | if (priv->lastctx == ctx) |
| 476 | break; | 476 | break; |
| 477 | /* fall-thru */ | 477 | fallthrough; |
| 478 | case MSM_SUBMIT_CMD_BUF: | 478 | case MSM_SUBMIT_CMD_BUF: |
| 479 | OUT_PKT3(ring, adreno_is_a4xx(adreno_gpu) ? | 479 | OUT_PKT3(ring, adreno_is_a4xx(adreno_gpu) ? |
| 480 | CP_INDIRECT_BUFFER_PFE : CP_INDIRECT_BUFFER_PFD, 2); | 480 | CP_INDIRECT_BUFFER_PFE : CP_INDIRECT_BUFFER_PFD, 2); |
| @@ -21,6 +21,8 @@ · 20 unmodified lines | |||
| 21 | #define REG_SKIP ~0 | 21 | #define REG_SKIP ~0 |
| 22 | #define REG_ADRENO_SKIP(_offset) [_offset] = REG_SKIP | 22 | #define REG_ADRENO_SKIP(_offset) [_offset] = REG_SKIP |
| 23 | 23 | ||
| 24 | extern bool snapshot_debugbus; | ||
| 25 | |||
| 24 | /** | 26 | /** |
| 25 | * adreno_regs: List of registers that are used in across all | 27 | * adreno_regs: List of registers that are used in across all |
| 26 | * 3D devices. Each device type has different offset value for the same | 28 | * 3D devices. Each device type has different offset value for the same |
| @@ -827,7 +827,7 @@ static void dpu_crtc_enable(struct drm_crtc *crtc, · 826 unmodified lines | |||
| 827 | { | 827 | { |
| 828 | struct dpu_crtc *dpu_crtc; | 828 | struct dpu_crtc *dpu_crtc; |
| 829 | struct drm_encoder *encoder; | 829 | struct drm_encoder *encoder; |
| 830 | bool request_bandwidth; | 830 | bool request_bandwidth = false; |
| 831 | 831 | ||
| 832 | if (!crtc) { | 832 | if (!crtc) { |
| 833 | DPU_ERROR("invalid crtc\n"); | 833 | DPU_ERROR("invalid crtc\n"); |
| @@ -599,7 +599,10 @@ static int dpu_encoder_virt_atomic_check( · 598 unmodified lines | |||
| 599 | dpu_kms = to_dpu_kms(priv->kms); | 599 | dpu_kms = to_dpu_kms(priv->kms); |
| 600 | mode = &crtc_state->mode; | 600 | mode = &crtc_state->mode; |
| 601 | adj_mode = &crtc_state->adjusted_mode; | 601 | adj_mode = &crtc_state->adjusted_mode; |
| 602 | global_state = dpu_kms_get_existing_global_state(dpu_kms); | 602 | global_state = dpu_kms_get_global_state(crtc_state->state); |
| 603 | if (IS_ERR(global_state)) | ||
| 604 | return PTR_ERR(global_state); | ||
| 605 | |||
| 603 | trace_dpu_enc_atomic_check(DRMID(drm_enc)); | 606 | trace_dpu_enc_atomic_check(DRMID(drm_enc)); |
| 604 | 607 | ||
| 605 | /* perform atomic check on the first physical encoder (master) */ | 608 | /* perform atomic check on the first physical encoder (master) */ |
| @@ -625,12 +628,15 @@ static int dpu_encoder_virt_atomic_check( · 19 unmodified lines | |||
| 625 | /* Reserve dynamic resources now. */ | 628 | /* Reserve dynamic resources now. */ |
| 626 | if (!ret) { | 629 | if (!ret) { |
| 627 | /* | 630 | /* |
| 628 | * Avoid reserving resources when mode set is pending. Topology | 631 | * Release and Allocate resources on every modeset |
| 629 | * info may not be available to complete reservation. | 632 | * Dont allocate when active is false. |
| 630 | */ | 633 | */ |
| 631 | if (drm_atomic_crtc_needs_modeset(crtc_state)) { | 634 | if (drm_atomic_crtc_needs_modeset(crtc_state)) { |
| 632 | ret = dpu_rm_reserve(&dpu_kms->rm, global_state, | 635 | dpu_rm_release(global_state, drm_enc); |
| 633 | drm_enc, crtc_state, topology); | 636 | |
| 637 | if (!crtc_state->active_changed || crtc_state->active) | ||
| 638 | ret = dpu_rm_reserve(&dpu_kms->rm, global_state, | ||
| 639 | drm_enc, crtc_state, topology); | ||
| 634 | } | 640 | } |
| 635 | } | 641 | } |
| 636 | 642 | ||
| @@ -1181,7 +1187,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) · 544 unmodified lines | |||
| 1181 | struct dpu_encoder_virt *dpu_enc = NULL; | 1187 | struct dpu_encoder_virt *dpu_enc = NULL; |
| 1182 | struct msm_drm_private *priv; | 1188 | struct msm_drm_private *priv; |
| 1183 | struct dpu_kms *dpu_kms; | 1189 | struct dpu_kms *dpu_kms; |
| 1184 | struct dpu_global_state *global_state; | ||
| 1185 | int i = 0; | 1190 | int i = 0; |
| 1186 | 1191 | ||
| 1187 | if (!drm_enc) { | 1192 | if (!drm_enc) { |
| @@ -1200,7 +1205,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) · 12 unmodified lines | |||
| 1200 | 1205 | ||
| 1201 | priv = drm_enc->dev->dev_private; | 1206 | priv = drm_enc->dev->dev_private; |
| 1202 | dpu_kms = to_dpu_kms(priv->kms); | 1207 | dpu_kms = to_dpu_kms(priv->kms); |
| 1203 | global_state = dpu_kms_get_existing_global_state(dpu_kms); | ||
| 1204 | 1208 | ||
| 1205 | trace_dpu_enc_disable(DRMID(drm_enc)); | 1209 | trace_dpu_enc_disable(DRMID(drm_enc)); |
| 1206 | 1210 | ||
| @@ -1230,8 +1234,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc) · 23 unmodified lines | |||
| 1230 | 1234 | ||
| 1231 | DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n"); | 1235 | DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n"); |
| 1232 | 1236 | ||
| 1233 | dpu_rm_release(global_state, drm_enc); | ||
| 1234 | |||
| 1235 | mutex_unlock(&dpu_enc->enc_lock); | 1237 | mutex_unlock(&dpu_enc->enc_lock); |
| 1236 | } | 1238 | } |
| 1237 | 1239 | ||
| @@ -866,9 +866,9 @@ static int dpu_plane_atomic_check(struct drm_plane *plane, · 865 unmodified lines | |||
| 866 | crtc_state = drm_atomic_get_new_crtc_state(state->state, | 866 | crtc_state = drm_atomic_get_new_crtc_state(state->state, |
| 867 | state->crtc); | 867 | state->crtc); |
| 868 | 868 | ||
| 869 | min_scale = FRAC_16_16(1, pdpu->pipe_sblk->maxdwnscale); | 869 | min_scale = FRAC_16_16(1, pdpu->pipe_sblk->maxupscale); |
| 870 | ret = drm_atomic_helper_check_plane_state(state, crtc_state, min_scale, | 870 | ret = drm_atomic_helper_check_plane_state(state, crtc_state, min_scale, |
| 871 | pdpu->pipe_sblk->maxupscale << 16, | 871 | pdpu->pipe_sblk->maxdwnscale << 16, |
| 872 | true, true); | 872 | true, true); |
| 873 | if (ret) { | 873 | if (ret) { |
| 874 | DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); | 874 | DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret); |
| @@ -27,6 +27,34 @@ int msm_atomic_prepare_fb(struct drm_plane *plane, · 26 unmodified lines | |||
| 27 | return msm_framebuffer_prepare(new_state->fb, kms->aspace); | 27 | return msm_framebuffer_prepare(new_state->fb, kms->aspace); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | /* | ||
| 31 | * Helpers to control vblanks while we flush.. basically just to ensure | ||
| 32 | * that vblank accounting is switched on, so we get valid seqn/timestamp | ||
| 33 | * on pageflip events (if requested) | ||
| 34 | */ | ||
| 35 | |||
| 36 | static void vblank_get(struct msm_kms *kms, unsigned crtc_mask) | ||
| 37 | { | ||
| 38 | struct drm_crtc *crtc; | ||
| 39 | |||
| 40 | for_each_crtc_mask(kms->dev, crtc, crtc_mask) { | ||
| 41 | if (!crtc->state->active) | ||
| 42 | continue; | ||
| 43 | drm_crtc_vblank_get(crtc); | ||
| 44 | } | ||
| 45 | } | ||
| 46 | |||
| 47 | static void vblank_put(struct msm_kms *kms, unsigned crtc_mask) | ||
| 48 | { | ||
| 49 | struct drm_crtc *crtc; | ||
| 50 | |||
| 51 | for_each_crtc_mask(kms->dev, crtc, crtc_mask) { | ||
| 52 | if (!crtc->state->active) | ||
| 53 | continue; | ||
| 54 | drm_crtc_vblank_put(crtc); | ||
| 55 | } | ||
| 56 | } | ||
| 57 | |||
| 30 | static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx) | 58 | static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx) |
| 31 | { | 59 | { |
| 32 | unsigned crtc_mask = BIT(crtc_idx); | 60 | unsigned crtc_mask = BIT(crtc_idx); |
| @@ -44,6 +72,8 @@ static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx) · 11 unmodified lines | |||
| 44 | 72 | ||
| 45 | kms->funcs->enable_commit(kms); | 73 | kms->funcs->enable_commit(kms); |
| 46 | 74 | ||
| 75 | vblank_get(kms, crtc_mask); | ||
| 76 | |||
| 47 | /* | 77 | /* |
| 48 | * Flush hardware updates: | 78 | * Flush hardware updates: |
| 49 | */ | 79 | */ |
| @@ -58,6 +88,8 @@ static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx) · 8 unmodified lines | |||
| 58 | kms->funcs->wait_flush(kms, crtc_mask); | 88 | kms->funcs->wait_flush(kms, crtc_mask); |
| 59 | trace_msm_atomic_wait_flush_finish(crtc_mask); | 89 | trace_msm_atomic_wait_flush_finish(crtc_mask); |
| 60 | 90 | ||
| 91 | vblank_put(kms, crtc_mask); | ||
| 92 | |||
| 61 | mutex_lock(&kms->commit_lock); | 93 | mutex_lock(&kms->commit_lock); |
| 62 | kms->funcs->complete_commit(kms, crtc_mask); | 94 | kms->funcs->complete_commit(kms, crtc_mask); |
| 63 | mutex_unlock(&kms->commit_lock); | 95 | mutex_unlock(&kms->commit_lock); |
| @@ -221,6 +253,8 @@ void msm_atomic_commit_tail(struct drm_atomic_state *state) · 157 unmodified lines | |||
| 221 | */ | 253 | */ |
| 222 | kms->pending_crtc_mask &= ~crtc_mask; | 254 | kms->pending_crtc_mask &= ~crtc_mask; |
| 223 | 255 | ||
| 256 | vblank_get(kms, crtc_mask); | ||
| 257 | |||
| 224 | /* | 258 | /* |
| 225 | * Flush hardware updates: | 259 | * Flush hardware updates: |
| 226 | */ | 260 | */ |
| @@ -235,6 +269,8 @@ void msm_atomic_commit_tail(struct drm_atomic_state *state) · 8 unmodified lines | |||
| 235 | kms->funcs->wait_flush(kms, crtc_mask); | 269 | kms->funcs->wait_flush(kms, crtc_mask); |
| 236 | trace_msm_atomic_wait_flush_finish(crtc_mask); | 270 | trace_msm_atomic_wait_flush_finish(crtc_mask); |
| 237 | 271 | ||
| 272 | vblank_put(kms, crtc_mask); | ||
| 273 | |||
| 238 | mutex_lock(&kms->commit_lock); | 274 | mutex_lock(&kms->commit_lock); |
| 239 | kms->funcs->complete_commit(kms, crtc_mask); | 275 | kms->funcs->complete_commit(kms, crtc_mask); |
| 240 | mutex_unlock(&kms->commit_lock); | 276 | mutex_unlock(&kms->commit_lock); |
| @@ -1320,6 +1320,13 @@ static int msm_pdev_remove(struct platform_device *pdev) · 1319 unmodified lines | |||
| 1320 | return 0; | 1320 | return 0; |
| 1321 | } | 1321 | } |
| 1322 | 1322 | ||
| 1323 | static void msm_pdev_shutdown(struct platform_device *pdev) | ||
| 1324 | { | ||
| 1325 | struct drm_device *drm = platform_get_drvdata(pdev); | ||
| 1326 | |||
| 1327 | drm_atomic_helper_shutdown(drm); | ||
| 1328 | } | ||
| 1329 | |||
| 1323 | static const struct of_device_id dt_match[] = { | 1330 | static const struct of_device_id dt_match[] = { |
| 1324 | { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 }, | 1331 | { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 }, |
| 1325 | { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 }, | 1332 | { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 }, |
| @@ -1332,6 +1339,7 @@ MODULE_DEVICE_TABLE(of, dt_match); · 6 unmodified lines | |||
| 1332 | static struct platform_driver msm_platform_driver = { | 1339 | static struct platform_driver msm_platform_driver = { |
| 1333 | .probe = msm_pdev_probe, | 1340 | .probe = msm_pdev_probe, |
| 1334 | .remove = msm_pdev_remove, | 1341 | .remove = msm_pdev_remove, |
| 1342 | .shutdown = msm_pdev_shutdown, | ||
| 1335 | .driver = { | 1343 | .driver = { |
| 1336 | .name = "msm", | 1344 | .name = "msm", |
| 1337 | .of_match_table = dt_match, | 1345 | .of_match_table = dt_match, |
| @@ -27,7 +27,8 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id, · 26 unmodified lines | |||
| 27 | ring->id = id; | 27 | ring->id = id; |
| 28 | 28 | ||
| 29 | ring->start = msm_gem_kernel_new(gpu->dev, MSM_GPU_RINGBUFFER_SZ, | 29 | ring->start = msm_gem_kernel_new(gpu->dev, MSM_GPU_RINGBUFFER_SZ, |
| 30 | MSM_BO_WC, gpu->aspace, &ring->bo, &ring->iova); | 30 | MSM_BO_WC | MSM_BO_GPU_READONLY, gpu->aspace, &ring->bo, |
| 31 | &ring->iova); | ||
| 31 | 32 | ||
| 32 | if (IS_ERR(ring->start)) { | 33 | if (IS_ERR(ring->start)) { |
| 33 | ret = PTR_ERR(ring->start); | 34 | ret = PTR_ERR(ring->start); |
| @@ -597,7 +597,7 @@ static void venc_bridge_mode_set(struct drm_bridge *bridge, · 596 unmodified lines | |||
| 597 | switch (venc_mode) { | 597 | switch (venc_mode) { |
| 598 | default: | 598 | default: |
| 599 | WARN_ON_ONCE(1); | 599 | WARN_ON_ONCE(1); |
| 600 | /* Fall-through */ | 600 | fallthrough; |
| 601 | case VENC_MODE_PAL: | 601 | case VENC_MODE_PAL: |
| 602 | venc->config = &venc_config_pal_trm; | 602 | venc->config = &venc_config_pal_trm; |
| 603 | break; | 603 | break; |
| @@ -451,11 +451,12 @@ static void omap_crtc_atomic_enable(struct drm_crtc *crtc, · 450 unmodified lines | |||
| 451 | if (omap_state->manually_updated) | 451 | if (omap_state->manually_updated) |
| 452 | return; | 452 | return; |
| 453 | 453 | ||
| 454 | spin_lock_irq(&crtc->dev->event_lock); | ||
| 455 | drm_crtc_vblank_on(crtc); | 454 | drm_crtc_vblank_on(crtc); |
| 455 | |||
| 456 | ret = drm_crtc_vblank_get(crtc); | 456 | ret = drm_crtc_vblank_get(crtc); |
| 457 | WARN_ON(ret != 0); | 457 | WARN_ON(ret != 0); |
| 458 | 458 | ||
| 459 | spin_lock_irq(&crtc->dev->event_lock); | ||
| 459 | omap_crtc_arm_event(crtc); | 460 | omap_crtc_arm_event(crtc); |
| 460 | spin_unlock_irq(&crtc->dev->event_lock); | 461 | spin_unlock_irq(&crtc->dev->event_lock); |
| 461 | } | 462 | } |
| @@ -4856,7 +4856,7 @@ static void ci_request_link_speed_change_before_state_change(struct radeon_devic · 4855 unmodified lines | |||
| 4856 | pi->force_pcie_gen = RADEON_PCIE_GEN2; | 4856 | pi->force_pcie_gen = RADEON_PCIE_GEN2; |
| 4857 | if (current_link_speed == RADEON_PCIE_GEN2) | 4857 | if (current_link_speed == RADEON_PCIE_GEN2) |
| 4858 | break; | 4858 | break; |
| 4859 | /* fall through */ | 4859 | fallthrough; |
| 4860 | case RADEON_PCIE_GEN2: | 4860 | case RADEON_PCIE_GEN2: |
| 4861 | if (radeon_acpi_pcie_performance_request(rdev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) | 4861 | if (radeon_acpi_pcie_performance_request(rdev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) |
| 4862 | break; | 4862 | break; |
| @@ -820,7 +820,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p, · 819 unmodified lines | |||
| 820 | ((idx_value >> 21) & 0xF)); | 820 | ((idx_value >> 21) & 0xF)); |
| 821 | return -EINVAL; | 821 | return -EINVAL; |
| 822 | } | 822 | } |
| 823 | /* Fall through. */ | 823 | fallthrough; |
| 824 | case 6: | 824 | case 6: |
| 825 | track->cb[i].cpp = 4; | 825 | track->cb[i].cpp = 4; |
| 826 | break; | 826 | break; |
| @@ -971,7 +971,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p, · 144 unmodified lines | |||
| 971 | return -EINVAL; | 971 | return -EINVAL; |
| 972 | } | 972 | } |
| 973 | /* The same rules apply as for DXT3/5. */ | 973 | /* The same rules apply as for DXT3/5. */ |
| 974 | /* Fall through. */ | 974 | fallthrough; |
| 975 | case R300_TX_FORMAT_DXT3: | 975 | case R300_TX_FORMAT_DXT3: |
| 976 | case R300_TX_FORMAT_DXT5: | 976 | case R300_TX_FORMAT_DXT5: |
| 977 | track->textures[i].cpp = 1; | 977 | track->textures[i].cpp = 1; |
| @@ -115,7 +115,7 @@ void r420_pipes_init(struct radeon_device *rdev) · 114 unmodified lines | |||
| 115 | default: | 115 | default: |
| 116 | /* force to 1 pipe */ | 116 | /* force to 1 pipe */ |
| 117 | num_pipes = 1; | 117 | num_pipes = 1; |
| 118 | /* fall through */ | 118 | fallthrough; |
| 119 | case 1: | 119 | case 1: |
| 120 | tmp = (0 << 1); | 120 | tmp = (0 << 1); |
| 121 | break; | 121 | break; |
| @@ -487,7 +487,7 @@ static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) · 486 unmodified lines | |||
| 487 | return -EINVAL; | 487 | return -EINVAL; |
| 488 | } | 488 | } |
| 489 | } | 489 | } |
| 490 | /* fall through */ | 490 | fallthrough; |
| 491 | case V_0280A0_CLEAR_ENABLE: | 491 | case V_0280A0_CLEAR_ENABLE: |
| 492 | { | 492 | { |
| 493 | uint32_t block_max = G_028100_CMASK_BLOCK_MAX(track->cb_color_mask[i]); | 493 | uint32_t block_max = G_028100_CMASK_BLOCK_MAX(track->cb_color_mask[i]); |
| @@ -1535,7 +1535,7 @@ static int r600_check_texture_resource(struct radeon_cs_parser *p, u32 idx, · 1041 unmodified lines | |||
| 1535 | break; | 1535 | break; |
| 1536 | case V_038000_SQ_TEX_DIM_2D_ARRAY_MSAA: | 1536 | case V_038000_SQ_TEX_DIM_2D_ARRAY_MSAA: |
| 1537 | is_array = true; | 1537 | is_array = true; |
| 1538 | /* fall through */ | 1538 | fallthrough; |
| 1539 | case V_038000_SQ_TEX_DIM_2D_MSAA: | 1539 | case V_038000_SQ_TEX_DIM_2D_MSAA: |
| 1540 | array_check.nsamples = 1 << llevel; | 1540 | array_check.nsamples = 1 << llevel; |
| 1541 | llevel = 0; | 1541 | llevel = 0; |
| @@ -454,7 +454,7 @@ static int radeon_uvd_validate_codec(struct radeon_cs_parser *p, · 453 unmodified lines | |||
| 454 | if (p->rdev->family >= CHIP_PALM) | 454 | if (p->rdev->family >= CHIP_PALM) |
| 455 | return 0; | 455 | return 0; |
| 456 | 456 | ||
| 457 | /* fall through */ | 457 | fallthrough; |
| 458 | default: | 458 | default: |
| 459 | DRM_ERROR("UVD codec not supported by hardware %d!\n", | 459 | DRM_ERROR("UVD codec not supported by hardware %d!\n", |
| 460 | stream_type); | 460 | stream_type); |
| @@ -5744,7 +5744,7 @@ static void si_request_link_speed_change_before_state_change(struct radeon_devic · 5743 unmodified lines | |||
| 5744 | si_pi->force_pcie_gen = RADEON_PCIE_GEN2; | 5744 | si_pi->force_pcie_gen = RADEON_PCIE_GEN2; |
| 5745 | if (current_link_speed == RADEON_PCIE_GEN2) | 5745 | if (current_link_speed == RADEON_PCIE_GEN2) |
| 5746 | break; | 5746 | break; |
| 5747 | /* fall through */ | 5747 | fallthrough; |
| 5748 | case RADEON_PCIE_GEN2: | 5748 | case RADEON_PCIE_GEN2: |
| 5749 | if (radeon_acpi_pcie_performance_request(rdev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) | 5749 | if (radeon_acpi_pcie_performance_request(rdev, PCIE_PERF_REQ_PECI_GEN2, false) == 0) |
| 5750 | break; | 5750 | break; |
| @@ -219,7 +219,7 @@ done: · 218 unmodified lines | |||
| 219 | WREG32(RS_DQ_RD_RET_CONF, 0x3f); | 219 | WREG32(RS_DQ_RD_RET_CONF, 0x3f); |
| 220 | WREG32(MC_CONFIG, 0x1f); | 220 | WREG32(MC_CONFIG, 0x1f); |
| 221 | 221 | ||
| 222 | /* fall through */ | 222 | fallthrough; |
| 223 | case CHIP_RV670: | 223 | case CHIP_RV670: |
| 224 | case CHIP_RV635: | 224 | case CHIP_RV635: |
| 225 | 225 | ||
| @@ -306,7 +306,7 @@ static int savage_dispatch_dma_prim(drm_savage_private_t * dev_priv, · 305 unmodified lines | |||
| 306 | case SAVAGE_PRIM_TRILIST_201: | 306 | case SAVAGE_PRIM_TRILIST_201: |
| 307 | reorder = 1; | 307 | reorder = 1; |
| 308 | prim = SAVAGE_PRIM_TRILIST; | 308 | prim = SAVAGE_PRIM_TRILIST; |
| 309 | /* fall through */ | 309 | fallthrough; |
| 310 | case SAVAGE_PRIM_TRILIST: | 310 | case SAVAGE_PRIM_TRILIST: |
| 311 | if (n % 3 != 0) { | 311 | if (n % 3 != 0) { |
| 312 | DRM_ERROR("wrong number of vertices %u in TRILIST\n", | 312 | DRM_ERROR("wrong number of vertices %u in TRILIST\n", |
| @@ -444,7 +444,7 @@ static int savage_dispatch_vb_prim(drm_savage_private_t * dev_priv, · 131 unmodified lines | |||
| 444 | case SAVAGE_PRIM_TRILIST_201: | 444 | case SAVAGE_PRIM_TRILIST_201: |
| 445 | reorder = 1; | 445 | reorder = 1; |
| 446 | prim = SAVAGE_PRIM_TRILIST; | 446 | prim = SAVAGE_PRIM_TRILIST; |
| 447 | /* fall through */ | 447 | fallthrough; |
| 448 | case SAVAGE_PRIM_TRILIST: | 448 | case SAVAGE_PRIM_TRILIST: |
| 449 | if (n % 3 != 0) { | 449 | if (n % 3 != 0) { |
| 450 | DRM_ERROR("wrong number of vertices %u in TRILIST\n", | 450 | DRM_ERROR("wrong number of vertices %u in TRILIST\n", |
| @@ -566,7 +566,7 @@ static int savage_dispatch_dma_idx(drm_savage_private_t * dev_priv, · 115 unmodified lines | |||
| 566 | case SAVAGE_PRIM_TRILIST_201: | 566 | case SAVAGE_PRIM_TRILIST_201: |
| 567 | reorder = 1; | 567 | reorder = 1; |
| 568 | prim = SAVAGE_PRIM_TRILIST; | 568 | prim = SAVAGE_PRIM_TRILIST; |
| 569 | /* fall through */ | 569 | fallthrough; |
| 570 | case SAVAGE_PRIM_TRILIST: | 570 | case SAVAGE_PRIM_TRILIST: |
| 571 | if (n % 3 != 0) { | 571 | if (n % 3 != 0) { |
| 572 | DRM_ERROR("wrong number of indices %u in TRILIST\n", n); | 572 | DRM_ERROR("wrong number of indices %u in TRILIST\n", n); |
| @@ -705,7 +705,7 @@ static int savage_dispatch_vb_idx(drm_savage_private_t * dev_priv, · 132 unmodified lines | |||
| 705 | case SAVAGE_PRIM_TRILIST_201: | 705 | case SAVAGE_PRIM_TRILIST_201: |
| 706 | reorder = 1; | 706 | reorder = 1; |
| 707 | prim = SAVAGE_PRIM_TRILIST; | 707 | prim = SAVAGE_PRIM_TRILIST; |
| 708 | /* fall through */ | 708 | fallthrough; |
| 709 | case SAVAGE_PRIM_TRILIST: | 709 | case SAVAGE_PRIM_TRILIST: |
| 710 | if (n % 3 != 0) { | 710 | if (n % 3 != 0) { |
| 711 | DRM_ERROR("wrong number of indices %u in TRILIST\n", n); | 711 | DRM_ERROR("wrong number of indices %u in TRILIST\n", n); |
| @@ -1066,7 +1066,7 @@ int savage_bci_cmdbuf(struct drm_device *dev, void *data, struct drm_file *file_ · 354 unmodified lines | |||
| 1066 | ret = -EINVAL; | 1066 | ret = -EINVAL; |
| 1067 | goto done; | 1067 | goto done; |
| 1068 | } | 1068 | } |
| 1069 | /* fall through */ | 1069 | fallthrough; |
| 1070 | case SAVAGE_CMD_DMA_PRIM: | 1070 | case SAVAGE_CMD_DMA_PRIM: |
| 1071 | case SAVAGE_CMD_VB_PRIM: | 1071 | case SAVAGE_CMD_VB_PRIM: |
| 1072 | if (!first_draw_cmd) | 1072 | if (!first_draw_cmd) |
| @@ -850,13 +850,13 @@ static int hdmi_audio_configure(struct sti_hdmi *hdmi) · 849 unmodified lines | |||
| 850 | switch (info->channels) { | 850 | switch (info->channels) { |
| 851 | case 8: | 851 | case 8: |
| 852 | audio_cfg |= HDMI_AUD_CFG_CH78_VALID; | 852 | audio_cfg |= HDMI_AUD_CFG_CH78_VALID; |
| 853 | /* fall through */ | 853 | fallthrough; |
| 854 | case 6: | 854 | case 6: |
| 855 | audio_cfg |= HDMI_AUD_CFG_CH56_VALID; | 855 | audio_cfg |= HDMI_AUD_CFG_CH56_VALID; |
| 856 | /* fall through */ | 856 | fallthrough; |
| 857 | case 4: | 857 | case 4: |
| 858 | audio_cfg |= HDMI_AUD_CFG_CH34_VALID | HDMI_AUD_CFG_8CH; | 858 | audio_cfg |= HDMI_AUD_CFG_CH34_VALID | HDMI_AUD_CFG_8CH; |
| 859 | /* fall through */ | 859 | fallthrough; |
| 860 | case 2: | 860 | case 2: |
| 861 | audio_cfg |= HDMI_AUD_CFG_CH12_VALID; | 861 | audio_cfg |= HDMI_AUD_CFG_CH12_VALID; |
| 862 | break; | 862 | break; |
| @@ -195,7 +195,7 @@ void sun4i_tcon_set_status(struct sun4i_tcon *tcon, · 194 unmodified lines | |||
| 195 | switch (encoder->encoder_type) { | 195 | switch (encoder->encoder_type) { |
| 196 | case DRM_MODE_ENCODER_LVDS: | 196 | case DRM_MODE_ENCODER_LVDS: |
| 197 | is_lvds = true; | 197 | is_lvds = true; |
| 198 | /* Fallthrough */ | 198 | fallthrough; |
| 199 | case DRM_MODE_ENCODER_DSI: | 199 | case DRM_MODE_ENCODER_DSI: |
| 200 | case DRM_MODE_ENCODER_NONE: | 200 | case DRM_MODE_ENCODER_NONE: |
| 201 | channel = 0; | 201 | channel = 0; |
| @@ -342,7 +342,7 @@ static void sun4i_tcon0_mode_set_dithering(struct sun4i_tcon *tcon, · 140 unmodified lines | |||
| 342 | /* R and B components are only 5 bits deep */ | 342 | /* R and B components are only 5 bits deep */ |
| 343 | val |= SUN4I_TCON0_FRM_CTL_MODE_R; | 343 | val |= SUN4I_TCON0_FRM_CTL_MODE_R; |
| 344 | val |= SUN4I_TCON0_FRM_CTL_MODE_B; | 344 | val |= SUN4I_TCON0_FRM_CTL_MODE_B; |
| 345 | /* Fall through */ | 345 | fallthrough; |
| 346 | case MEDIA_BUS_FMT_RGB666_1X18: | 346 | case MEDIA_BUS_FMT_RGB666_1X18: |
| 347 | case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG: | 347 | case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG: |
| 348 | /* Fall through: enable dithering */ | 348 | /* Fall through: enable dithering */ |
| @@ -1027,7 +1027,7 @@ static ssize_t sun6i_dsi_transfer(struct mipi_dsi_host *host, · 1026 unmodified lines | |||
| 1027 | ret = sun6i_dsi_dcs_read(dsi, msg); | 1027 | ret = sun6i_dsi_dcs_read(dsi, msg); |
| 1028 | break; | 1028 | break; |
| 1029 | } | 1029 | } |
| 1030 | /* Else, fall through */ | 1030 | fallthrough; |
| 1031 | 1031 | ||
| 1032 | default: | 1032 | default: |
| 1033 | ret = -EINVAL; | 1033 | ret = -EINVAL; |
| @@ -135,7 +135,7 @@ static inline u32 compute_dda_inc(unsigned int in, unsigned int out, bool v, · 134 unmodified lines | |||
| 135 | 135 | ||
| 136 | default: | 136 | default: |
| 137 | WARN_ON_ONCE(1); | 137 | WARN_ON_ONCE(1); |
| 138 | /* fallthrough */ | 138 | fallthrough; |
| 139 | case 4: | 139 | case 4: |
| 140 | max = 4; | 140 | max = 4; |
| 141 | break; | 141 | break; |
| @@ -386,7 +386,7 @@ static void tilcdc_crtc_set_mode(struct drm_crtc *crtc) · 385 unmodified lines | |||
| 386 | case DRM_FORMAT_XBGR8888: | 386 | case DRM_FORMAT_XBGR8888: |
| 387 | case DRM_FORMAT_XRGB8888: | 387 | case DRM_FORMAT_XRGB8888: |
| 388 | reg |= LCDC_V2_TFT_24BPP_UNPACK; | 388 | reg |= LCDC_V2_TFT_24BPP_UNPACK; |
| 389 | /* fallthrough */ | 389 | fallthrough; |
| 390 | case DRM_FORMAT_BGR888: | 390 | case DRM_FORMAT_BGR888: |
| 391 | case DRM_FORMAT_RGB888: | 391 | case DRM_FORMAT_RGB888: |
| 392 | reg |= LCDC_V2_TFT_24BPP_MODE; | 392 | reg |= LCDC_V2_TFT_24BPP_MODE; |
| @@ -525,7 +525,7 @@ int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr, · 524 unmodified lines | |||
| 525 | if (unlikely(ret != 0)) | 525 | if (unlikely(ret != 0)) |
| 526 | return ret; | 526 | return ret; |
| 527 | } | 527 | } |
| 528 | /* fall through */ | 528 | fallthrough; |
| 529 | case TTM_PL_TT: | 529 | case TTM_PL_TT: |
| 530 | ret = ttm_bo_vm_access_kmap(bo, offset, buf, len, write); | 530 | ret = ttm_bo_vm_access_kmap(bo, offset, buf, len, write); |
| 531 | break; | 531 | break; |
| @@ -179,21 +179,21 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg) · 178 unmodified lines | |||
| 179 | switch (vsg->state) { | 179 | switch (vsg->state) { |
| 180 | case dr_via_device_mapped: | 180 | case dr_via_device_mapped: |
| 181 | via_unmap_blit_from_device(pdev, vsg); | 181 | via_unmap_blit_from_device(pdev, vsg); |
| 182 | /* fall through */ | 182 | fallthrough; |
| 183 | case dr_via_desc_pages_alloc: | 183 | case dr_via_desc_pages_alloc: |
| 184 | for (i = 0; i < vsg->num_desc_pages; ++i) { | 184 | for (i = 0; i < vsg->num_desc_pages; ++i) { |
| 185 | if (vsg->desc_pages[i] != NULL) | 185 | if (vsg->desc_pages[i] != NULL) |
| 186 | free_page((unsigned long)vsg->desc_pages[i]); | 186 | free_page((unsigned long)vsg->desc_pages[i]); |
| 187 | } | 187 | } |
| 188 | kfree(vsg->desc_pages); | 188 | kfree(vsg->desc_pages); |
| 189 | /* fall through */ | 189 | fallthrough; |
| 190 | case dr_via_pages_locked: | 190 | case dr_via_pages_locked: |
| 191 | unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages, | 191 | unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages, |
| 192 | (vsg->direction == DMA_FROM_DEVICE)); | 192 | (vsg->direction == DMA_FROM_DEVICE)); |
| 193 | /* fall through */ | 193 | fallthrough; |
| 194 | case dr_via_pages_alloc: | 194 | case dr_via_pages_alloc: |
| 195 | vfree(vsg->pages); | 195 | vfree(vsg->pages); |
| 196 | /* fall through */ | 196 | fallthrough; |
| 197 | default: | 197 | default: |
| 198 | vsg->state = dr_via_sg_init; | 198 | vsg->state = dr_via_sg_init; |
| 199 | } | 199 | } |
| @@ -179,6 +179,7 @@ static int virtio_gpu_execbuffer_ioctl(struct drm_device *dev, void *data, · 178 unmodified lines | |||
| 179 | 179 | ||
| 180 | virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, | 180 | virtio_gpu_cmd_submit(vgdev, buf, exbuf->size, |
| 181 | vfpriv->ctx_id, buflist, out_fence); | 181 | vfpriv->ctx_id, buflist, out_fence); |
| 182 | dma_fence_put(&out_fence->f); | ||
| 182 | virtio_gpu_notify(vgdev); | 183 | virtio_gpu_notify(vgdev); |
| 183 | return 0; | 184 | return 0; |
| 184 | 185 | ||
| @@ -79,6 +79,7 @@ void virtio_gpu_cleanup_object(struct virtio_gpu_object *bo) · 78 unmodified lines | |||
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | sg_free_table(shmem->pages); | 81 | sg_free_table(shmem->pages); |
| 82 | kfree(shmem->pages); | ||
| 82 | shmem->pages = NULL; | 83 | shmem->pages = NULL; |
| 83 | drm_gem_shmem_unpin(&bo->base.base); | 84 | drm_gem_shmem_unpin(&bo->base.base); |
| 84 | } | 85 | } |
| @@ -649,9 +649,7 @@ static void displback_changed(struct xenbus_device *xb_dev, · 648 unmodified lines | |||
| 649 | 649 | ||
| 650 | switch (backend_state) { | 650 | switch (backend_state) { |
| 651 | case XenbusStateReconfiguring: | 651 | case XenbusStateReconfiguring: |
| 652 | /* fall through */ | ||
| 653 | case XenbusStateReconfigured: | 652 | case XenbusStateReconfigured: |
| 654 | /* fall through */ | ||
| 655 | case XenbusStateInitialised: | 653 | case XenbusStateInitialised: |
| 656 | break; | 654 | break; |
| 657 | 655 | ||
| @@ -701,7 +699,6 @@ static void displback_changed(struct xenbus_device *xb_dev, · 43 unmodified lines | |||
| 701 | break; | 699 | break; |
| 702 | 700 | ||
| 703 | case XenbusStateUnknown: | 701 | case XenbusStateUnknown: |
| 704 | /* fall through */ | ||
| 705 | case XenbusStateClosed: | 702 | case XenbusStateClosed: |
| 706 | if (xb_dev->state == XenbusStateClosed) | 703 | if (xb_dev->state == XenbusStateClosed) |
| 707 | break; | 704 | break; |
| @@ -141,7 +141,7 @@ static int ipu_bus_format_to_map(u32 fmt) · 140 unmodified lines | |||
| 141 | switch (fmt) { | 141 | switch (fmt) { |
| 142 | default: | 142 | default: |
| 143 | WARN_ON(1); | 143 | WARN_ON(1); |
| 144 | /* fall-through */ | 144 | fallthrough; |
| 145 | case MEDIA_BUS_FMT_RGB888_1X24: | 145 | case MEDIA_BUS_FMT_RGB888_1X24: |
| 146 | return IPU_DC_MAP_RGB24; | 146 | return IPU_DC_MAP_RGB24; |
| 147 | case MEDIA_BUS_FMT_RGB565_1X16: | 147 | case MEDIA_BUS_FMT_RGB565_1X16: |
| @@ -321,7 +321,7 @@ static const struct kernel_param_ops cougar_g6_is_space_ops = { · 320 unmodified lines | |||
| 321 | }; | 321 | }; |
| 322 | module_param_cb(g6_is_space, &cougar_g6_is_space_ops, &g6_is_space, 0644); | 322 | module_param_cb(g6_is_space, &cougar_g6_is_space_ops, &g6_is_space, 0644); |
| 323 | 323 | ||
| 324 | static struct hid_device_id cougar_id_table[] = { | 324 | static const struct hid_device_id cougar_id_table[] = { |
| 325 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, | 325 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, |
| 326 | USB_DEVICE_ID_COUGAR_500K_GAMING_KEYBOARD) }, | 326 | USB_DEVICE_ID_COUGAR_500K_GAMING_KEYBOARD) }, |
| 327 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, | 327 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, |
| @@ -728,6 +728,9 @@ · 727 unmodified lines | |||
| 728 | #define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067 | 728 | #define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067 |
| 729 | #define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085 | 729 | #define USB_DEVICE_ID_LENOVO_X1_COVER 0x6085 |
| 730 | #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D 0x608d | 730 | #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D 0x608d |
| 731 | #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019 0x6019 | ||
| 732 | #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_602E 0x602e | ||
| 733 | #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6093 0x6093 | ||
| 731 | 734 | ||
| 732 | #define USB_VENDOR_ID_LG 0x1fd2 | 735 | #define USB_VENDOR_ID_LG 0x1fd2 |
| 733 | #define USB_DEVICE_ID_LG_MULTITOUCH 0x0064 | 736 | #define USB_DEVICE_ID_LG_MULTITOUCH 0x0064 |
| @@ -680,7 +680,7 @@ static int lg_g15_register_led(struct lg_g15_data *g15, int i) · 679 unmodified lines | |||
| 680 | * but it does have a separate power-on (reset) value. | 680 | * but it does have a separate power-on (reset) value. |
| 681 | */ | 681 | */ |
| 682 | g15->leds[i].cdev.name = "g15::power_on_backlight_val"; | 682 | g15->leds[i].cdev.name = "g15::power_on_backlight_val"; |
| 683 | /* fall through */ | 683 | fallthrough; |
| 684 | case LG_G15_KBD_BRIGHTNESS: | 684 | case LG_G15_KBD_BRIGHTNESS: |
| 685 | g15->leds[i].cdev.brightness_set_blocking = | 685 | g15->leds[i].cdev.brightness_set_blocking = |
| 686 | lg_g510_kbd_led_set; | 686 | lg_g510_kbd_led_set; |
| @@ -844,7 +844,7 @@ static void logi_dj_recv_queue_notification(struct dj_receiver_dev *djrcv_dev, · 843 unmodified lines | |||
| 844 | workitem.type = WORKITEM_TYPE_EMPTY; | 844 | workitem.type = WORKITEM_TYPE_EMPTY; |
| 845 | break; | 845 | break; |
| 846 | } | 846 | } |
| 847 | /* fall-through */ | 847 | fallthrough; |
| 848 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: | 848 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: |
| 849 | workitem.quad_id_msb = | 849 | workitem.quad_id_msb = |
| 850 | dj_report->report_params[DEVICE_PAIRED_PARAM_EQUAD_ID_MSB]; | 850 | dj_report->report_params[DEVICE_PAIRED_PARAM_EQUAD_ID_MSB]; |
| @@ -29,7 +29,7 @@ static __u8 *macally_report_fixup(struct hid_device *hdev, __u8 *rdesc, · 28 unmodified lines | |||
| 29 | return rdesc; | 29 | return rdesc; |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | static struct hid_device_id macally_id_table[] = { | 32 | static const struct hid_device_id macally_id_table[] = { |
| 33 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, | 33 | { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, |
| 34 | USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) }, | 34 | USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) }, |
| 35 | { } | 35 | { } |
| @@ -163,16 +163,13 @@ static int ms_surface_dial_quirk(struct hid_input *hi, struct hid_field *field, · 162 unmodified lines | |||
| 163 | { | 163 | { |
| 164 | switch (usage->hid & HID_USAGE_PAGE) { | 164 | switch (usage->hid & HID_USAGE_PAGE) { |
| 165 | case 0xff070000: | 165 | case 0xff070000: |
| 166 | /* fall-through */ | ||
| 167 | case HID_UP_DIGITIZER: | 166 | case HID_UP_DIGITIZER: |
| 168 | /* ignore those axis */ | 167 | /* ignore those axis */ |
| 169 | return -1; | 168 | return -1; |
| 170 | case HID_UP_GENDESK: | 169 | case HID_UP_GENDESK: |
| 171 | switch (usage->hid) { | 170 | switch (usage->hid) { |
| 172 | case HID_GD_X: | 171 | case HID_GD_X: |
| 173 | /* fall-through */ | ||
| 174 | case HID_GD_Y: | 172 | case HID_GD_Y: |
| 175 | /* fall-through */ | ||
| 176 | case HID_GD_RFKILL_BTN: | 173 | case HID_GD_RFKILL_BTN: |
| 177 | /* ignore those axis */ | 174 | /* ignore those axis */ |
| 178 | return -1; | 175 | return -1; |
| @@ -105,6 +105,9 @@ static const struct hid_device_id hid_quirks[] = { · 104 unmodified lines | |||
| 105 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT }, | 105 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT }, |
| 106 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL }, | 106 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL }, |
| 107 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL }, | 107 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL }, |
| 108 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019), HID_QUIRK_ALWAYS_POLL }, | ||
| 109 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_602E), HID_QUIRK_ALWAYS_POLL }, | ||
| 110 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6093), HID_QUIRK_ALWAYS_POLL }, | ||
| 108 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL }, | 111 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL }, |
| 109 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL }, | 112 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL }, |
| 110 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET }, | 113 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET }, |
| @@ -428,7 +428,6 @@ static void rmi_report(struct hid_device *hid, struct hid_report *report) · 427 unmodified lines | |||
| 428 | 428 | ||
| 429 | switch (report->id) { | 429 | switch (report->id) { |
| 430 | case RMI_READ_DATA_REPORT_ID: | 430 | case RMI_READ_DATA_REPORT_ID: |
| 431 | /* fall-through */ | ||
| 432 | case RMI_ATTN_REPORT_ID: | 431 | case RMI_ATTN_REPORT_ID: |
| 433 | return; | 432 | return; |
| 434 | } | 433 | } |
| @@ -780,7 +780,7 @@ static void kone_keep_values_up_to_date(struct kone_device *kone, · 779 unmodified lines | |||
| 780 | case kone_mouse_event_switch_profile: | 780 | case kone_mouse_event_switch_profile: |
| 781 | kone->actual_dpi = kone->profiles[event->value - 1]. | 781 | kone->actual_dpi = kone->profiles[event->value - 1]. |
| 782 | startup_dpi; | 782 | startup_dpi; |
| 783 | /* fall through */ | 783 | fallthrough; |
| 784 | case kone_mouse_event_osd_profile: | 784 | case kone_mouse_event_osd_profile: |
| 785 | kone->actual_profile = event->value; | 785 | kone->actual_profile = event->value; |
| 786 | break; | 786 | break; |
| @@ -974,7 +974,7 @@ int uclogic_params_init(struct uclogic_params *params, · 973 unmodified lines | |||
| 974 | } | 974 | } |
| 975 | break; | 975 | break; |
| 976 | } | 976 | } |
| 977 | /* FALL THROUGH */ | 977 | fallthrough; |
| 978 | case VID_PID(USB_VENDOR_ID_HUION, | 978 | case VID_PID(USB_VENDOR_ID_HUION, |
| 979 | USB_DEVICE_ID_HUION_TABLET): | 979 | USB_DEVICE_ID_HUION_TABLET): |
| 980 | case VID_PID(USB_VENDOR_ID_HUION, | 980 | case VID_PID(USB_VENDOR_ID_HUION, |
| @@ -1672,7 +1672,6 @@ static ssize_t wiimote_ext_show(struct device *dev, · 1671 unmodified lines | |||
| 1672 | case WIIMOTE_EXT_GUITAR: | 1672 | case WIIMOTE_EXT_GUITAR: |
| 1673 | return sprintf(buf, "guitar\n"); | 1673 | return sprintf(buf, "guitar\n"); |
| 1674 | case WIIMOTE_EXT_UNKNOWN: | 1674 | case WIIMOTE_EXT_UNKNOWN: |
| 1675 | /* fallthrough */ | ||
| 1676 | default: | 1675 | default: |
| 1677 | return sprintf(buf, "unknown\n"); | 1676 | return sprintf(buf, "unknown\n"); |
| 1678 | } | 1677 | } |
| @@ -1722,7 +1721,6 @@ static ssize_t wiimote_dev_show(struct device *dev, · 43 unmodified lines | |||
| 1722 | case WIIMOTE_DEV_PENDING: | 1721 | case WIIMOTE_DEV_PENDING: |
| 1723 | return sprintf(buf, "pending\n"); | 1722 | return sprintf(buf, "pending\n"); |
| 1724 | case WIIMOTE_DEV_UNKNOWN: | 1723 | case WIIMOTE_DEV_UNKNOWN: |
| 1725 | /* fallthrough */ | ||
| 1726 | default: | 1724 | default: |
| 1727 | return sprintf(buf, "unknown\n"); | 1725 | return sprintf(buf, "unknown\n"); |
| 1728 | } | 1726 | } |
| @@ -420,6 +420,19 @@ static int i2c_hid_set_power(struct i2c_client *client, int power_state) · 419 unmodified lines | |||
| 420 | dev_err(&client->dev, "failed to change power setting.\n"); | 420 | dev_err(&client->dev, "failed to change power setting.\n"); |
| 421 | 421 | ||
| 422 | set_pwr_exit: | 422 | set_pwr_exit: |
| 423 | |||
| 424 | /* | ||
| 425 | * The HID over I2C specification states that if a DEVICE needs time | ||
| 426 | * after the PWR_ON request, it should utilise CLOCK stretching. | ||
| 427 | * However, it has been observered that the Windows driver provides a | ||
| 428 | * 1ms sleep between the PWR_ON and RESET requests. | ||
| 429 | * According to Goodix Windows even waits 60 ms after (other?) | ||
| 430 | * PWR_ON requests. Testing has confirmed that several devices | ||
| 431 | * will not work properly without a delay after a PWR_ON request. | ||
| 432 | */ | ||
| 433 | if (!ret && power_state == I2C_HID_PWR_ON) | ||
| 434 | msleep(60); | ||
| 435 | |||
| 423 | return ret; | 436 | return ret; |
| 424 | } | 437 | } |
| 425 | 438 | ||
| @@ -441,15 +454,6 @@ static int i2c_hid_hwreset(struct i2c_client *client) · 15 unmodified lines | |||
| 441 | if (ret) | 454 | if (ret) |
| 442 | goto out_unlock; | 455 | goto out_unlock; |
| 443 | 456 | ||
| 444 | /* | ||
| 445 | * The HID over I2C specification states that if a DEVICE needs time | ||
| 446 | * after the PWR_ON request, it should utilise CLOCK stretching. | ||
| 447 | * However, it has been observered that the Windows driver provides a | ||
| 448 | * 1ms sleep between the PWR_ON and RESET requests and that some devices | ||
| 449 | * rely on this. | ||
| 450 | */ | ||
| 451 | usleep_range(1000, 5000); | ||
| 452 | |||
| 453 | i2c_hid_dbg(ihid, "resetting...\n"); | 457 | i2c_hid_dbg(ihid, "resetting...\n"); |
| 454 | 458 | ||
| 455 | ret = i2c_hid_command(client, &hid_reset_cmd, NULL, 0); | 459 | ret = i2c_hid_command(client, &hid_reset_cmd, NULL, 0); |
| @@ -26,7 +26,6 @@ · 25 unmodified lines | |||
| 26 | #include <linux/wait.h> | 26 | #include <linux/wait.h> |
| 27 | #include <linux/workqueue.h> | 27 | #include <linux/workqueue.h> |
| 28 | #include <linux/string.h> | 28 | #include <linux/string.h> |
| 29 | #include <linux/timekeeping.h> | ||
| 30 | 29 | ||
| 31 | #include <linux/usb.h> | 30 | #include <linux/usb.h> |
| 32 | 31 | ||
| @@ -96,18 +95,6 @@ static int hid_start_in(struct hid_device *hid) · 63 unmodified lines | |||
| 96 | set_bit(HID_NO_BANDWIDTH, &usbhid->iofl); | 95 | set_bit(HID_NO_BANDWIDTH, &usbhid->iofl); |
| 97 | } else { | 96 | } else { |
| 98 | clear_bit(HID_NO_BANDWIDTH, &usbhid->iofl); | 97 | clear_bit(HID_NO_BANDWIDTH, &usbhid->iofl); |
| 99 | |||
| 100 | if (test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) { | ||
| 101 | /* | ||
| 102 | * In case events are generated while nobody was | ||
| 103 | * listening, some are released when the device | ||
| 104 | * is re-opened. Wait 50 msec for the queue to | ||
| 105 | * empty before allowing events to go through | ||
| 106 | * hid. | ||
| 107 | */ | ||
| 108 | usbhid->input_start_time = | ||
| 109 | ktime_add_ms(ktime_get_coarse(), 50); | ||
| 110 | } | ||
| 111 | } | 98 | } |
| 112 | } | 99 | } |
| 113 | spin_unlock_irqrestore(&usbhid->lock, flags); | 100 | spin_unlock_irqrestore(&usbhid->lock, flags); |
| @@ -293,23 +280,20 @@ static void hid_irq_in(struct urb *urb) · 179 unmodified lines | |||
| 293 | if (!test_bit(HID_OPENED, &usbhid->iofl)) | 280 | if (!test_bit(HID_OPENED, &usbhid->iofl)) |
| 294 | break; | 281 | break; |
| 295 | usbhid_mark_busy(usbhid); | 282 | usbhid_mark_busy(usbhid); |
| 296 | if (test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) { | 283 | if (!test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) { |
| 297 | if (ktime_before(ktime_get_coarse(), | 284 | hid_input_report(urb->context, HID_INPUT_REPORT, |
| 298 | usbhid->input_start_time)) | 285 | urb->transfer_buffer, |
| 299 | break; | 286 | urb->actual_length, 1); |
| 300 | clear_bit(HID_RESUME_RUNNING, &usbhid->iofl); | 287 | /* |
| 288 | * autosuspend refused while keys are pressed | ||
| 289 | * because most keyboards don't wake up when | ||
| 290 | * a key is released | ||
| 291 | */ | ||
| 292 | if (hid_check_keys_pressed(hid)) | ||
| 293 | set_bit(HID_KEYS_PRESSED, &usbhid->iofl); | ||
| 294 | else | ||
| 295 | clear_bit(HID_KEYS_PRESSED, &usbhid->iofl); | ||
| 301 | } | 296 | } |
| 302 | hid_input_report(urb->context, HID_INPUT_REPORT, | ||
| 303 | urb->transfer_buffer, urb->actual_length, 1); | ||
| 304 | /* | ||
| 305 | * autosuspend refused while keys are pressed | ||
| 306 | * because most keyboards don't wake up when | ||
| 307 | * a key is released | ||
| 308 | */ | ||
| 309 | if (hid_check_keys_pressed(hid)) | ||
| 310 | set_bit(HID_KEYS_PRESSED, &usbhid->iofl); | ||
| 311 | else | ||
| 312 | clear_bit(HID_KEYS_PRESSED, &usbhid->iofl); | ||
| 313 | break; | 297 | break; |
| 314 | case -EPIPE: /* stall */ | 298 | case -EPIPE: /* stall */ |
| 315 | usbhid_mark_busy(usbhid); | 299 | usbhid_mark_busy(usbhid); |
| @@ -736,6 +720,17 @@ static int usbhid_open(struct hid_device *hid) · 420 unmodified lines | |||
| 736 | 720 | ||
| 737 | usb_autopm_put_interface(usbhid->intf); | 721 | usb_autopm_put_interface(usbhid->intf); |
| 738 | 722 | ||
| 723 | /* | ||
| 724 | * In case events are generated while nobody was listening, | ||
| 725 | * some are released when the device is re-opened. | ||
| 726 | * Wait 50 msec for the queue to empty before allowing events | ||
| 727 | * to go through hid. | ||
| 728 | */ | ||
| 729 | if (res == 0) | ||
| 730 | msleep(50); | ||
| 731 | |||
| 732 | clear_bit(HID_RESUME_RUNNING, &usbhid->iofl); | ||
| 733 | |||
| 739 | Done: | 734 | Done: |
| 740 | mutex_unlock(&usbhid->mutex); | 735 | mutex_unlock(&usbhid->mutex); |
| 741 | return res; | 736 | return res; |
| @@ -519,12 +519,16 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, · 518 unmodified lines | |||
| 519 | 519 | ||
| 520 | switch (cmd) { | 520 | switch (cmd) { |
| 521 | case HIDIOCGUSAGE: | 521 | case HIDIOCGUSAGE: |
| 522 | if (uref->usage_index >= field->report_count) | ||
| 523 | goto inval; | ||
| 522 | uref->value = field->value[uref->usage_index]; | 524 | uref->value = field->value[uref->usage_index]; |
| 523 | if (copy_to_user(user_arg, uref, sizeof(*uref))) | 525 | if (copy_to_user(user_arg, uref, sizeof(*uref))) |
| 524 | goto fault; | 526 | goto fault; |
| 525 | goto goodreturn; | 527 | goto goodreturn; |
| 526 | 528 | ||
| 527 | case HIDIOCSUSAGE: | 529 | case HIDIOCSUSAGE: |
| 530 | if (uref->usage_index >= field->report_count) | ||
| 531 | goto inval; | ||
| 528 | field->value[uref->usage_index] = uref->value; | 532 | field->value[uref->usage_index] = uref->value; |
| 529 | goto goodreturn; | 533 | goto goodreturn; |
| 530 | 534 | ||
| @@ -781,7 +785,6 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) · 250 unmodified lines | |||
| 781 | break; | 785 | break; |
| 782 | 786 | ||
| 783 | case HIDIOCGUCODE: | 787 | case HIDIOCGUCODE: |
| 784 | /* fall through */ | ||
| 785 | case HIDIOCGUSAGE: | 788 | case HIDIOCGUSAGE: |
| 786 | case HIDIOCSUSAGE: | 789 | case HIDIOCSUSAGE: |
| 787 | case HIDIOCGUSAGES: | 790 | case HIDIOCGUSAGES: |
| @@ -13,7 +13,6 @@ · 12 unmodified lines | |||
| 13 | 13 | ||
| 14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
| 15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
| 16 | #include <linux/ktime.h> | ||
| 17 | #include <linux/list.h> | 16 | #include <linux/list.h> |
| 18 | #include <linux/mutex.h> | 17 | #include <linux/mutex.h> |
| 19 | #include <linux/timer.h> | 18 | #include <linux/timer.h> |
| @@ -84,7 +83,6 @@ struct usbhid_device { · 64 unmodified lines | |||
| 84 | struct mutex mutex; /* start/stop/open/close */ | 83 | struct mutex mutex; /* start/stop/open/close */ |
| 85 | spinlock_t lock; /* fifo spinlock */ | 84 | spinlock_t lock; /* fifo spinlock */ |
| 86 | unsigned long iofl; /* I/O flags (CTRL_RUNNING, OUT_RUNNING) */ | 85 | unsigned long iofl; /* I/O flags (CTRL_RUNNING, OUT_RUNNING) */ |
| 87 | ktime_t input_start_time; /* When to start handling input */ | ||
| 88 | struct timer_list io_retry; /* Retry timer */ | 86 | struct timer_list io_retry; /* Retry timer */ |
| 89 | unsigned long stop_retry; /* Time to give up, in jiffies */ | 87 | unsigned long stop_retry; /* Time to give up, in jiffies */ |
| 90 | unsigned int retry_delay; /* Delay length in ms */ | 88 | unsigned int retry_delay; /* Delay length in ms */ |
| @@ -341,7 +341,7 @@ static int wacom_graphire_irq(struct wacom_wac *wacom) · 340 unmodified lines | |||
| 341 | 341 | ||
| 342 | case 2: /* Mouse with wheel */ | 342 | case 2: /* Mouse with wheel */ |
| 343 | input_report_key(input, BTN_MIDDLE, data[1] & 0x04); | 343 | input_report_key(input, BTN_MIDDLE, data[1] & 0x04); |
| 344 | /* fall through */ | 344 | fallthrough; |
| 345 | 345 | ||
| 346 | case 3: /* Mouse without wheel */ | 346 | case 3: /* Mouse without wheel */ |
| 347 | wacom->tool[0] = BTN_TOOL_MOUSE; | 347 | wacom->tool[0] = BTN_TOOL_MOUSE; |
| @@ -1201,7 +1201,7 @@ static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len) · 853 unmodified lines | |||
| 1201 | case 0x04: | 1201 | case 0x04: |
| 1202 | wacom_intuos_bt_process_data(wacom, data + i); | 1202 | wacom_intuos_bt_process_data(wacom, data + i); |
| 1203 | i += 10; | 1203 | i += 10; |
| 1204 | /* fall through */ | 1204 | fallthrough; |
| 1205 | case 0x03: | 1205 | case 0x03: |
| 1206 | wacom_intuos_bt_process_data(wacom, data + i); | 1206 | wacom_intuos_bt_process_data(wacom, data + i); |
| 1207 | i += 10; | 1207 | i += 10; |
| @@ -2148,7 +2148,7 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field · 940 unmodified lines | |||
| 2148 | for (i = 0; i < wacom->led.count; i++) | 2148 | for (i = 0; i < wacom->led.count; i++) |
| 2149 | wacom_update_led(wacom, features->numbered_buttons, | 2149 | wacom_update_led(wacom, features->numbered_buttons, |
| 2150 | value, i); | 2150 | value, i); |
| 2151 | /* fall through*/ | 2151 | fallthrough; |
| 2152 | default: | 2152 | default: |
| 2153 | do_report = true; | 2153 | do_report = true; |
| 2154 | break; | 2154 | break; |
| @@ -3602,14 +3602,14 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · 1447 unmodified lines | |||
| 3602 | switch (features->type) { | 3602 | switch (features->type) { |
| 3603 | case GRAPHIRE_BT: | 3603 | case GRAPHIRE_BT: |
| 3604 | __clear_bit(ABS_MISC, input_dev->absbit); | 3604 | __clear_bit(ABS_MISC, input_dev->absbit); |
| 3605 | /* fall through */ | 3605 | fallthrough; |
| 3606 | 3606 | ||
| 3607 | case WACOM_MO: | 3607 | case WACOM_MO: |
| 3608 | case WACOM_G4: | 3608 | case WACOM_G4: |
| 3609 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, | 3609 | input_set_abs_params(input_dev, ABS_DISTANCE, 0, |
| 3610 | features->distance_max, | 3610 | features->distance_max, |
| 3611 | features->distance_fuzz, 0); | 3611 | features->distance_fuzz, 0); |
| 3612 | /* fall through */ | 3612 | fallthrough; |
| 3613 | 3613 | ||
| 3614 | case GRAPHIRE: | 3614 | case GRAPHIRE: |
| 3615 | input_set_capability(input_dev, EV_REL, REL_WHEEL); | 3615 | input_set_capability(input_dev, EV_REL, REL_WHEEL); |
| @@ -3649,7 +3649,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · 33 unmodified lines | |||
| 3649 | case INTUOS4S: | 3649 | case INTUOS4S: |
| 3650 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); | 3650 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); |
| 3651 | input_abs_set_res(input_dev, ABS_Z, 287); | 3651 | input_abs_set_res(input_dev, ABS_Z, 287); |
| 3652 | /* fall through */ | 3652 | fallthrough; |
| 3653 | 3653 | ||
| 3654 | case INTUOS: | 3654 | case INTUOS: |
| 3655 | wacom_setup_intuos(wacom_wac); | 3655 | wacom_setup_intuos(wacom_wac); |
| @@ -3682,7 +3682,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · 26 unmodified lines | |||
| 3682 | case TABLETPC: | 3682 | case TABLETPC: |
| 3683 | case TABLETPCE: | 3683 | case TABLETPCE: |
| 3684 | __clear_bit(ABS_MISC, input_dev->absbit); | 3684 | __clear_bit(ABS_MISC, input_dev->absbit); |
| 3685 | /* fall through */ | 3685 | fallthrough; |
| 3686 | 3686 | ||
| 3687 | case DTUS: | 3687 | case DTUS: |
| 3688 | case DTUSX: | 3688 | case DTUSX: |
| @@ -3696,7 +3696,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, · 7 unmodified lines | |||
| 3696 | 3696 | ||
| 3697 | case PTU: | 3697 | case PTU: |
| 3698 | __set_bit(BTN_STYLUS2, input_dev->keybit); | 3698 | __set_bit(BTN_STYLUS2, input_dev->keybit); |
| 3699 | /* fall through */ | 3699 | fallthrough; |
| 3700 | 3700 | ||
| 3701 | case PENPARTNER: | 3701 | case PENPARTNER: |
| 3702 | __set_bit(BTN_TOOL_PEN, input_dev->keybit); | 3702 | __set_bit(BTN_TOOL_PEN, input_dev->keybit); |
| @@ -3799,7 +3799,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, · 96 unmodified lines | |||
| 3799 | input_abs_set_res(input_dev, ABS_MT_POSITION_X, 40); | 3799 | input_abs_set_res(input_dev, ABS_MT_POSITION_X, 40); |
| 3800 | input_abs_set_res(input_dev, ABS_MT_POSITION_Y, 40); | 3800 | input_abs_set_res(input_dev, ABS_MT_POSITION_Y, 40); |
| 3801 | 3801 | ||
| 3802 | /* fall through */ | 3802 | fallthrough; |
| 3803 | 3803 | ||
| 3804 | case INTUOS5: | 3804 | case INTUOS5: |
| 3805 | case INTUOS5L: | 3805 | case INTUOS5L: |
| @@ -3817,7 +3817,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, · 11 unmodified lines | |||
| 3817 | input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0); | 3817 | input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0); |
| 3818 | input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0); | 3818 | input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0); |
| 3819 | input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 0, 1, 0, 0); | 3819 | input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 0, 1, 0, 0); |
| 3820 | /* fall through */ | 3820 | fallthrough; |
| 3821 | 3821 | ||
| 3822 | case WACOM_27QHDT: | 3822 | case WACOM_27QHDT: |
| 3823 | if (wacom_wac->shared->touch->product == 0x32C || | 3823 | if (wacom_wac->shared->touch->product == 0x32C || |
| @@ -3826,14 +3826,14 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, · 2 unmodified lines | |||
| 3826 | __set_bit(SW_MUTE_DEVICE, input_dev->swbit); | 3826 | __set_bit(SW_MUTE_DEVICE, input_dev->swbit); |
| 3827 | wacom_wac->shared->has_mute_touch_switch = true; | 3827 | wacom_wac->shared->has_mute_touch_switch = true; |
| 3828 | } | 3828 | } |
| 3829 | /* fall through */ | 3829 | fallthrough; |
| 3830 | 3830 | ||
| 3831 | case MTSCREEN: | 3831 | case MTSCREEN: |
| 3832 | case MTTPC: | 3832 | case MTTPC: |
| 3833 | case MTTPC_B: | 3833 | case MTTPC_B: |
| 3834 | case TABLETPC2FG: | 3834 | case TABLETPC2FG: |
| 3835 | input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_DIRECT); | 3835 | input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_DIRECT); |
| 3836 | /*fall through */ | 3836 | fallthrough; |
| 3837 | 3837 | ||
| 3838 | case TABLETPC: | 3838 | case TABLETPC: |
| 3839 | case TABLETPCE: | 3839 | case TABLETPCE: |
| @@ -3843,7 +3843,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev, · 3 unmodified lines | |||
| 3843 | case INTUOSHT2: | 3843 | case INTUOSHT2: |
| 3844 | input_dev->evbit[0] |= BIT_MASK(EV_SW); | 3844 | input_dev->evbit[0] |= BIT_MASK(EV_SW); |
| 3845 | __set_bit(SW_MUTE_DEVICE, input_dev->swbit); | 3845 | __set_bit(SW_MUTE_DEVICE, input_dev->swbit); |
| 3846 | /* fall through */ | 3846 | fallthrough; |
| 3847 | 3847 | ||
| 3848 | case BAMBOO_PT: | 3848 | case BAMBOO_PT: |
| 3849 | case BAMBOO_TOUCH: | 3849 | case BAMBOO_TOUCH: |
| @@ -4099,7 +4099,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, · 249 unmodified lines | |||
| 4099 | 4099 | ||
| 4100 | __set_bit(KEY_BUTTONCONFIG, input_dev->keybit); | 4100 | __set_bit(KEY_BUTTONCONFIG, input_dev->keybit); |
| 4101 | __set_bit(KEY_INFO, input_dev->keybit); | 4101 | __set_bit(KEY_INFO, input_dev->keybit); |
| 4102 | /* fall through */ | 4102 | fallthrough; |
| 4103 | 4103 | ||
| 4104 | case WACOM_21UX2: | 4104 | case WACOM_21UX2: |
| 4105 | case WACOM_BEE: | 4105 | case WACOM_BEE: |
| @@ -4115,7 +4115,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, · 9 unmodified lines | |||
| 4115 | case INTUOS3: | 4115 | case INTUOS3: |
| 4116 | case INTUOS3L: | 4116 | case INTUOS3L: |
| 4117 | input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0); | 4117 | input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0); |
| 4118 | /* fall through */ | 4118 | fallthrough; |
| 4119 | 4119 | ||
| 4120 | case INTUOS3S: | 4120 | case INTUOS3S: |
| 4121 | input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0); | 4121 | input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0); |
| @@ -4139,7 +4139,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, · 17 unmodified lines | |||
| 4139 | * ID_INPUT_TABLET to be set. | 4139 | * ID_INPUT_TABLET to be set. |
| 4140 | */ | 4140 | */ |
| 4141 | __set_bit(BTN_STYLUS, input_dev->keybit); | 4141 | __set_bit(BTN_STYLUS, input_dev->keybit); |
| 4142 | /* fall through */ | 4142 | fallthrough; |
| 4143 | 4143 | ||
| 4144 | case INTUOS4: | 4144 | case INTUOS4: |
| 4145 | case INTUOS4L: | 4145 | case INTUOS4L: |
| @@ -291,7 +291,7 @@ static void ssip_set_rxstate(struct ssi_protocol *ssi, unsigned int state) · 290 unmodified lines | |||
| 291 | /* CMT speech workaround */ | 291 | /* CMT speech workaround */ |
| 292 | if (atomic_read(&ssi->tx_usecnt)) | 292 | if (atomic_read(&ssi->tx_usecnt)) |
| 293 | break; | 293 | break; |
| 294 | /* Else, fall through */ | 294 | fallthrough; |
| 295 | case RECEIVING: | 295 | case RECEIVING: |
| 296 | mod_timer(&ssi->keep_alive, jiffies + | 296 | mod_timer(&ssi->keep_alive, jiffies + |
| 297 | msecs_to_jiffies(SSIP_KATOUT)); | 297 | msecs_to_jiffies(SSIP_KATOUT)); |
| @@ -466,7 +466,7 @@ static void ssip_keep_alive(struct timer_list *t) · 168 unmodified lines | |||
| 466 | case SEND_READY: | 466 | case SEND_READY: |
| 467 | if (atomic_read(&ssi->tx_usecnt) == 0) | 467 | if (atomic_read(&ssi->tx_usecnt) == 0) |
| 468 | break; | 468 | break; |
| 469 | /* Fall through */ | 469 | fallthrough; |
| 470 | /* | 470 | /* |
| 471 | * Workaround for cmt-speech in that case | 471 | * Workaround for cmt-speech in that case |
| 472 | * we relay on audio timers. | 472 | * we relay on audio timers. |
| @@ -668,7 +668,7 @@ static void ssip_rx_bootinforeq(struct hsi_client *cl, u32 cmd) · 195 unmodified lines | |||
| 668 | case ACTIVE: | 668 | case ACTIVE: |
| 669 | dev_err(&cl->device, "Boot info req on active state\n"); | 669 | dev_err(&cl->device, "Boot info req on active state\n"); |
| 670 | ssip_error(cl); | 670 | ssip_error(cl); |
| 671 | /* Fall through */ | 671 | fallthrough; |
| 672 | case INIT: | 672 | case INIT: |
| 673 | case HANDSHAKE: | 673 | case HANDSHAKE: |
| 674 | spin_lock_bh(&ssi->lock); | 674 | spin_lock_bh(&ssi->lock); |
| @@ -296,7 +296,7 @@ static int ssi_clk_event(struct notifier_block *nb, unsigned long event, · 295 unmodified lines | |||
| 296 | break; | 296 | break; |
| 297 | case ABORT_RATE_CHANGE: | 297 | case ABORT_RATE_CHANGE: |
| 298 | dev_dbg(&ssi->device, "abort rate change\n"); | 298 | dev_dbg(&ssi->device, "abort rate change\n"); |
| 299 | /* Fall through */ | 299 | fallthrough; |
| 300 | case POST_RATE_CHANGE: | 300 | case POST_RATE_CHANGE: |
| 301 | dev_dbg(&ssi->device, "post rate change (%lu -> %lu)\n", | 301 | dev_dbg(&ssi->device, "post rate change (%lu -> %lu)\n", |
| 302 | clk_data->old_rate, clk_data->new_rate); | 302 | clk_data->old_rate, clk_data->new_rate); |
| @@ -354,7 +354,7 @@ static void process_ib_ipinfo(void *in_msg, void *out_msg, int op) · 353 unmodified lines | |||
| 354 | 354 | ||
| 355 | out->body.kvp_ip_val.dhcp_enabled = in->kvp_ip_val.dhcp_enabled; | 355 | out->body.kvp_ip_val.dhcp_enabled = in->kvp_ip_val.dhcp_enabled; |
| 356 | 356 | ||
| 357 | /* fallthrough */ | 357 | fallthrough; |
| 358 | 358 | ||
| 359 | case KVP_OP_GET_IP_INFO: | 359 | case KVP_OP_GET_IP_INFO: |
| 360 | utf16s_to_utf8s((wchar_t *)in->kvp_ip_val.adapter_id, | 360 | utf16s_to_utf8s((wchar_t *)in->kvp_ip_val.adapter_id, |
| @@ -282,26 +282,52 @@ static struct { · 281 unmodified lines | |||
| 282 | spinlock_t lock; | 282 | spinlock_t lock; |
| 283 | } host_ts; | 283 | } host_ts; |
| 284 | 284 | ||
| 285 | static struct timespec64 hv_get_adj_host_time(void) | 285 | static inline u64 reftime_to_ns(u64 reftime) |
| 286 | { | 286 | { |
| 287 | struct timespec64 ts; | 287 | return (reftime - WLTIMEDELTA) * 100; |
| 288 | u64 newtime, reftime; | 288 | } |
| 289 | |||
| 290 | /* | ||
| 291 | * Hard coded threshold for host timesync delay: 600 seconds | ||
| 292 | */ | ||
| 293 | static const u64 HOST_TIMESYNC_DELAY_THRESH = 600 * (u64)NSEC_PER_SEC; | ||
| 294 | |||
| 295 | static int hv_get_adj_host_time(struct timespec64 *ts) | ||
| 296 | { | ||
| 297 | u64 newtime, reftime, timediff_adj; | ||
| 289 | unsigned long flags; | 298 | unsigned long flags; |
| 299 | int ret = 0; | ||
| 290 | 300 | ||
| 291 | spin_lock_irqsave(&host_ts.lock, flags); | 301 | spin_lock_irqsave(&host_ts.lock, flags); |
| 292 | reftime = hv_read_reference_counter(); | 302 | reftime = hv_read_reference_counter(); |
| 293 | newtime = host_ts.host_time + (reftime - host_ts.ref_time); | 303 | |
| 294 | ts = ns_to_timespec64((newtime - WLTIMEDELTA) * 100); | 304 | /* |
| 305 | * We need to let the caller know that last update from host | ||
| 306 | * is older than the max allowable threshold. clock_gettime() | ||
| 307 | * and PTP ioctl do not have a documented error that we could | ||
| 308 | * return for this specific case. Use ESTALE to report this. | ||
| 309 | */ | ||
| 310 | timediff_adj = reftime - host_ts.ref_time; | ||
| 311 | if (timediff_adj * 100 > HOST_TIMESYNC_DELAY_THRESH) { | ||
| 312 | pr_warn_once("TIMESYNC IC: Stale time stamp, %llu nsecs old\n", | ||
| 313 | (timediff_adj * 100)); | ||
| 314 | ret = -ESTALE; | ||
| 315 | } | ||
| 316 | |||
| 317 | newtime = host_ts.host_time + timediff_adj; | ||
| 318 | *ts = ns_to_timespec64(reftime_to_ns(newtime)); | ||
| 295 | spin_unlock_irqrestore(&host_ts.lock, flags); | 319 | spin_unlock_irqrestore(&host_ts.lock, flags); |
| 296 | 320 | ||
| 297 | return ts; | 321 | return ret; |
| 298 | } | 322 | } |
| 299 | 323 | ||
| 300 | static void hv_set_host_time(struct work_struct *work) | 324 | static void hv_set_host_time(struct work_struct *work) |
| 301 | { | 325 | { |
| 302 | struct timespec64 ts = hv_get_adj_host_time(); | ||
| 303 | 326 | ||
| 304 | do_settimeofday64(&ts); | 327 | struct timespec64 ts; |
| 328 | |||
| 329 | if (!hv_get_adj_host_time(&ts)) | ||
| 330 | do_settimeofday64(&ts); | ||
| 305 | } | 331 | } |
| 306 | 332 | ||
| 307 | /* | 333 | /* |
| @@ -361,10 +387,23 @@ static void timesync_onchannelcallback(void *context) · 53 unmodified lines | |||
| 361 | struct ictimesync_ref_data *refdata; | 387 | struct ictimesync_ref_data *refdata; |
| 362 | u8 *time_txf_buf = util_timesynch.recv_buffer; | 388 | u8 *time_txf_buf = util_timesynch.recv_buffer; |
| 363 | 389 | ||
| 364 | vmbus_recvpacket(channel, time_txf_buf, | 390 | /* |
| 365 | HV_HYP_PAGE_SIZE, &recvlen, &requestid); | 391 | * Drain the ring buffer and use the last packet to update |
| 392 | * host_ts | ||
| 393 | */ | ||
| 394 | while (1) { | ||
| 395 | int ret = vmbus_recvpacket(channel, time_txf_buf, | ||
| 396 | HV_HYP_PAGE_SIZE, &recvlen, | ||
| 397 | &requestid); | ||
| 398 | if (ret) { | ||
| 399 | pr_warn_once("TimeSync IC pkt recv failed (Err: %d)\n", | ||
| 400 | ret); | ||
| 401 | break; | ||
| 402 | } | ||
| 403 | |||
| 404 | if (!recvlen) | ||
| 405 | break; | ||
| 366 | 406 | ||
| 367 | if (recvlen > 0) { | ||
| 368 | icmsghdrp = (struct icmsg_hdr *)&time_txf_buf[ | 407 | icmsghdrp = (struct icmsg_hdr *)&time_txf_buf[ |
| 369 | sizeof(struct vmbuspipe_hdr)]; | 408 | sizeof(struct vmbuspipe_hdr)]; |
| 370 | 409 | ||
| @@ -622,9 +661,7 @@ static int hv_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) · 251 unmodified lines | |||
| 622 | 661 | ||
| 623 | static int hv_ptp_gettime(struct ptp_clock_info *info, struct timespec64 *ts) | 662 | static int hv_ptp_gettime(struct ptp_clock_info *info, struct timespec64 *ts) |
| 624 | { | 663 | { |
| 625 | *ts = hv_get_adj_host_time(); | 664 | return hv_get_adj_host_time(ts); |
| 626 | |||
| 627 | return 0; | ||
| 628 | } | 665 | } |
| 629 | 666 | ||
| 630 | static struct ptp_clock_info ptp_hyperv_info = { | 667 | static struct ptp_clock_info ptp_hyperv_info = { |
| @@ -435,7 +435,7 @@ static const char *voltage_label(struct adt7462_data *data, int which) · 434 unmodified lines | |||
| 435 | case 3: | 435 | case 3: |
| 436 | return "+1.5V"; | 436 | return "+1.5V"; |
| 437 | } | 437 | } |
| 438 | /* fall through */ | 438 | fallthrough; |
| 439 | case 2: | 439 | case 2: |
| 440 | if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) | 440 | if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) |
| 441 | return "+12V3"; | 441 | return "+12V3"; |
| @@ -493,7 +493,7 @@ static const char *voltage_label(struct adt7462_data *data, int which) · 51 unmodified lines | |||
| 493 | case 3: | 493 | case 3: |
| 494 | return "+1.5"; | 494 | return "+1.5"; |
| 495 | } | 495 | } |
| 496 | /* fall through */ | 496 | fallthrough; |
| 497 | case 11: | 497 | case 11: |
| 498 | if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == | 498 | if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == |
| 499 | ADT7462_PIN28_VOLT && | 499 | ADT7462_PIN28_VOLT && |
| @@ -531,7 +531,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which) · 31 unmodified lines | |||
| 531 | case 3: | 531 | case 3: |
| 532 | return 7800; | 532 | return 7800; |
| 533 | } | 533 | } |
| 534 | /* fall through */ | 534 | fallthrough; |
| 535 | case 2: | 535 | case 2: |
| 536 | if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) | 536 | if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT)) |
| 537 | return 62500; | 537 | return 62500; |
| @@ -589,7 +589,7 @@ static int voltage_multiplier(struct adt7462_data *data, int which) · 51 unmodified lines | |||
| 589 | case 3: | 589 | case 3: |
| 590 | return 7800; | 590 | return 7800; |
| 591 | } | 591 | } |
| 592 | /* fall through */ | 592 | fallthrough; |
| 593 | case 11: | 593 | case 11: |
| 594 | case 12: | 594 | case 12: |
| 595 | if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == | 595 | if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT == |
| @@ -753,15 +753,18 @@ static ssize_t applesmc_light_show(struct device *dev, · 752 unmodified lines | |||
| 753 | } | 753 | } |
| 754 | 754 | ||
| 755 | ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length); | 755 | ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length); |
| 756 | if (ret) | ||
| 757 | goto out; | ||
| 756 | /* newer macbooks report a single 10-bit bigendian value */ | 758 | /* newer macbooks report a single 10-bit bigendian value */ |
| 757 | if (data_length == 10) { | 759 | if (data_length == 10) { |
| 758 | left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2; | 760 | left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2; |
| 759 | goto out; | 761 | goto out; |
| 760 | } | 762 | } |
| 761 | left = buffer[2]; | 763 | left = buffer[2]; |
| 764 | |||
| 765 | ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length); | ||
| 762 | if (ret) | 766 | if (ret) |
| 763 | goto out; | 767 | goto out; |
| 764 | ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length); | ||
| 765 | right = buffer[2]; | 768 | right = buffer[2]; |
| 766 | 769 | ||
| 767 | out: | 770 | out: |
| @@ -810,12 +813,11 @@ static ssize_t applesmc_show_fan_speed(struct device *dev, · 42 unmodified lines | |||
| 810 | to_index(attr)); | 813 | to_index(attr)); |
| 811 | 814 | ||
| 812 | ret = applesmc_read_key(newkey, buffer, 2); | 815 | ret = applesmc_read_key(newkey, buffer, 2); |
| 813 | speed = ((buffer[0] << 8 | buffer[1]) >> 2); | ||
| 814 | |||
| 815 | if (ret) | 816 | if (ret) |
| 816 | return ret; | 817 | return ret; |
| 817 | else | 818 | |
| 818 | return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed); | 819 | speed = ((buffer[0] << 8 | buffer[1]) >> 2); |
| 820 | return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed); | ||
| 819 | } | 821 | } |
| 820 | 822 | ||
| 821 | static ssize_t applesmc_store_fan_speed(struct device *dev, | 823 | static ssize_t applesmc_store_fan_speed(struct device *dev, |
| @@ -851,12 +853,11 @@ static ssize_t applesmc_show_fan_manual(struct device *dev, · 29 unmodified lines | |||
| 851 | u8 buffer[2]; | 853 | u8 buffer[2]; |
| 852 | 854 | ||
| 853 | ret = applesmc_read_key(FANS_MANUAL, buffer, 2); | 855 | ret = applesmc_read_key(FANS_MANUAL, buffer, 2); |
| 854 | manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01; | ||
| 855 | |||
| 856 | if (ret) | 856 | if (ret) |
| 857 | return ret; | 857 | return ret; |
| 858 | else | 858 | |
| 859 | return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual); | 859 | manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01; |
| 860 | return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual); | ||
| 860 | } | 861 | } |
| 861 | 862 | ||
| 862 | static ssize_t applesmc_store_fan_manual(struct device *dev, | 863 | static ssize_t applesmc_store_fan_manual(struct device *dev, |
| @@ -872,10 +873,11 @@ static ssize_t applesmc_store_fan_manual(struct device *dev, · 9 unmodified lines | |||
| 872 | return -EINVAL; | 873 | return -EINVAL; |
| 873 | 874 | ||
| 874 | ret = applesmc_read_key(FANS_MANUAL, buffer, 2); | 875 | ret = applesmc_read_key(FANS_MANUAL, buffer, 2); |
| 875 | val = (buffer[0] << 8 | buffer[1]); | ||
| 876 | if (ret) | 876 | if (ret) |
| 877 | goto out; | 877 | goto out; |
| 878 | 878 | ||
| 879 | val = (buffer[0] << 8 | buffer[1]); | ||
| 880 | |||
| 879 | if (input) | 881 | if (input) |
| 880 | val = val | (0x01 << to_index(attr)); | 882 | val = val | (0x01 << to_index(attr)); |
| 881 | else | 883 | else |
| @@ -951,13 +953,12 @@ static ssize_t applesmc_key_count_show(struct device *dev, · 69 unmodified lines | |||
| 951 | u32 count; | 953 | u32 count; |
| 952 | 954 | ||
| 953 | ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4); | 955 | ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4); |
| 954 | count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) + | ||
| 955 | ((u32)buffer[2]<<8) + buffer[3]; | ||
| 956 | |||
| 957 | if (ret) | 956 | if (ret) |
| 958 | return ret; | 957 | return ret; |
| 959 | else | 958 | |
| 960 | return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count); | 959 | count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) + |
| 960 | ((u32)buffer[2]<<8) + buffer[3]; | ||
| 961 | return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count); | ||
| 961 | } | 962 | } |
| 962 | 963 | ||
| 963 | static ssize_t applesmc_key_at_index_read_show(struct device *dev, | 964 | static ssize_t applesmc_key_at_index_read_show(struct device *dev, |
| @@ -406,10 +406,10 @@ static int emc1403_probe(struct i2c_client *client, · 405 unmodified lines | |||
| 406 | switch (id->driver_data) { | 406 | switch (id->driver_data) { |
| 407 | case emc1404: | 407 | case emc1404: |
| 408 | data->groups[2] = &emc1404_group; | 408 | data->groups[2] = &emc1404_group; |
| 409 | /* fall through */ | 409 | fallthrough; |
| 410 | case emc1403: | 410 | case emc1403: |
| 411 | data->groups[1] = &emc1403_group; | 411 | data->groups[1] = &emc1403_group; |
| 412 | /* fall through */ | 412 | fallthrough; |
| 413 | case emc1402: | 413 | case emc1402: |
| 414 | data->groups[0] = &emc1402_group; | 414 | data->groups[0] = &emc1402_group; |
| 415 | } | 415 | } |
| @@ -1285,7 +1285,7 @@ static struct f71882fg_data *f71882fg_update_device(struct device *dev) · 1284 unmodified lines | |||
| 1285 | data->pwm_auto_point_pwm[nr][0] = | 1285 | data->pwm_auto_point_pwm[nr][0] = |
| 1286 | f71882fg_read8(data, | 1286 | f71882fg_read8(data, |
| 1287 | F71882FG_REG_POINT_PWM(nr, 0)); | 1287 | F71882FG_REG_POINT_PWM(nr, 0)); |
| 1288 | /* Fall through */ | 1288 | fallthrough; |
| 1289 | case f71862fg: | 1289 | case f71862fg: |
| 1290 | data->pwm_auto_point_pwm[nr][1] = | 1290 | data->pwm_auto_point_pwm[nr][1] = |
| 1291 | f71882fg_read8(data, | 1291 | f71882fg_read8(data, |
| @@ -2442,7 +2442,7 @@ static int f71882fg_probe(struct platform_device *pdev) · 1150 unmodified lines | |||
| 2442 | case f71869a: | 2442 | case f71869a: |
| 2443 | /* These always have signed auto point temps */ | 2443 | /* These always have signed auto point temps */ |
| 2444 | data->auto_point_temp_signed = 1; | 2444 | data->auto_point_temp_signed = 1; |
| 2445 | /* Fall through - to select correct fan/pwm reg bank! */ | 2445 | fallthrough; /* to select correct fan/pwm reg bank! */ |
| 2446 | case f71889fg: | 2446 | case f71889fg: |
| 2447 | case f71889ed: | 2447 | case f71889ed: |
| 2448 | case f71889a: | 2448 | case f71889a: |
| @@ -172,6 +172,7 @@ gsc_hwmon_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, · 171 unmodified lines | |||
| 172 | case mode_temperature: | 172 | case mode_temperature: |
| 173 | if (tmp > 0x8000) | 173 | if (tmp > 0x8000) |
| 174 | tmp -= 0xffff; | 174 | tmp -= 0xffff; |
| 175 | tmp *= 100; /* convert to millidegrees celsius */ | ||
| 175 | break; | 176 | break; |
| 176 | case mode_voltage_raw: | 177 | case mode_voltage_raw: |
| 177 | tmp = clamp_val(tmp, 0, BIT(GSC_HWMON_RESOLUTION)); | 178 | tmp = clamp_val(tmp, 0, BIT(GSC_HWMON_RESOLUTION)); |
| @@ -96,7 +96,7 @@ int vid_from_reg(int val, u8 vrm) · 95 unmodified lines | |||
| 96 | val &= 0x1f; | 96 | val &= 0x1f; |
| 97 | if (val == 0x1f) | 97 | if (val == 0x1f) |
| 98 | return 0; | 98 | return 0; |
| 99 | /* fall through */ | 99 | fallthrough; |
| 100 | case 25: /* AMD NPT 0Fh */ | 100 | case 25: /* AMD NPT 0Fh */ |
| 101 | val &= 0x3f; | 101 | val &= 0x3f; |
| 102 | return (val < 32) ? 1550 - 25 * val | 102 | return (val < 32) ? 1550 - 25 * val |
| @@ -122,7 +122,7 @@ int vid_from_reg(int val, u8 vrm) · 19 unmodified lines | |||
| 122 | 122 | ||
| 123 | case 84: /* VRM 8.4 */ | 123 | case 84: /* VRM 8.4 */ |
| 124 | val &= 0x0f; | 124 | val &= 0x0f; |
| 125 | /* fall through */ | 125 | fallthrough; |
| 126 | case 82: /* VRM 8.2 */ | 126 | case 82: /* VRM 8.2 */ |
| 127 | val &= 0x1f; | 127 | val &= 0x1f; |
| 128 | return val == 0x1f ? 0 : | 128 | return val == 0x1f ? 0 : |
| @@ -352,7 +352,7 @@ static int ina3221_read_curr(struct device *dev, u32 attr, · 351 unmodified lines | |||
| 352 | if (ret) | 352 | if (ret) |
| 353 | return ret; | 353 | return ret; |
| 354 | 354 | ||
| 355 | /* fall through */ | 355 | fallthrough; |
| 356 | case hwmon_curr_crit: | 356 | case hwmon_curr_crit: |
| 357 | case hwmon_curr_max: | 357 | case hwmon_curr_max: |
| 358 | if (!resistance_uo) | 358 | if (!resistance_uo) |
| @@ -2669,7 +2669,7 @@ static void pwm_update_registers(struct nct6775_data *data, int nr) · 2668 unmodified lines | |||
| 2669 | case thermal_cruise: | 2669 | case thermal_cruise: |
| 2670 | nct6775_write_value(data, data->REG_TARGET[nr], | 2670 | nct6775_write_value(data, data->REG_TARGET[nr], |
| 2671 | data->target_temp[nr]); | 2671 | data->target_temp[nr]); |
| 2672 | /* fall through */ | 2672 | fallthrough; |
| 2673 | default: | 2673 | default: |
| 2674 | reg = nct6775_read_value(data, data->REG_FAN_MODE[nr]); | 2674 | reg = nct6775_read_value(data, data->REG_FAN_MODE[nr]); |
| 2675 | reg = (reg & ~data->tolerance_mask) | | 2675 | reg = (reg & ~data->tolerance_mask) | |
| @@ -231,7 +231,7 @@ static int nct7904_read_fan(struct device *dev, u32 attr, int channel, · 230 unmodified lines | |||
| 231 | if (ret < 0) | 231 | if (ret < 0) |
| 232 | return ret; | 232 | return ret; |
| 233 | cnt = ((ret & 0xff00) >> 3) | (ret & 0x1f); | 233 | cnt = ((ret & 0xff00) >> 3) | (ret & 0x1f); |
| 234 | if (cnt == 0x1fff) | 234 | if (cnt == 0 || cnt == 0x1fff) |
| 235 | rpm = 0; | 235 | rpm = 0; |
| 236 | else | 236 | else |
| 237 | rpm = 1350000 / cnt; | 237 | rpm = 1350000 / cnt; |
| @@ -243,7 +243,7 @@ static int nct7904_read_fan(struct device *dev, u32 attr, int channel, · 5 unmodified lines | |||
| 243 | if (ret < 0) | 243 | if (ret < 0) |
| 244 | return ret; | 244 | return ret; |
| 245 | cnt = ((ret & 0xff00) >> 3) | (ret & 0x1f); | 245 | cnt = ((ret & 0xff00) >> 3) | (ret & 0x1f); |
| 246 | if (cnt == 0x1fff) | 246 | if (cnt == 0 || cnt == 0x1fff) |
| 247 | rpm = 0; | 247 | rpm = 0; |
| 248 | else | 248 | else |
| 249 | rpm = 1350000 / cnt; | 249 | rpm = 1350000 / cnt; |
| @@ -752,7 +752,7 @@ static int occ_setup_sensor_attrs(struct occ *occ) · 751 unmodified lines | |||
| 752 | switch (sensors->freq.version) { | 752 | switch (sensors->freq.version) { |
| 753 | case 2: | 753 | case 2: |
| 754 | show_freq = occ_show_freq_2; | 754 | show_freq = occ_show_freq_2; |
| 755 | /* fall through */ | 755 | fallthrough; |
| 756 | case 1: | 756 | case 1: |
| 757 | num_attrs += (sensors->freq.num_sensors * 2); | 757 | num_attrs += (sensors->freq.num_sensors * 2); |
| 758 | break; | 758 | break; |
| @@ -763,7 +763,7 @@ static int occ_setup_sensor_attrs(struct occ *occ) · 4 unmodified lines | |||
| 763 | switch (sensors->power.version) { | 763 | switch (sensors->power.version) { |
| 764 | case 2: | 764 | case 2: |
| 765 | show_power = occ_show_power_2; | 765 | show_power = occ_show_power_2; |
| 766 | /* fall through */ | 766 | fallthrough; |
| 767 | case 1: | 767 | case 1: |
| 768 | num_attrs += (sensors->power.num_sensors * 4); | 768 | num_attrs += (sensors->power.num_sensors * 4); |
| 769 | break; | 769 | break; |
| @@ -781,7 +781,7 @@ static int occ_setup_sensor_attrs(struct occ *occ) · 11 unmodified lines | |||
| 781 | break; | 781 | break; |
| 782 | case 3: | 782 | case 3: |
| 783 | show_caps = occ_show_caps_3; | 783 | show_caps = occ_show_caps_3; |
| 784 | /* fall through */ | 784 | fallthrough; |
| 785 | case 2: | 785 | case 2: |
| 786 | num_attrs += (sensors->caps.num_sensors * 8); | 786 | num_attrs += (sensors->caps.num_sensors * 8); |
| 787 | break; | 787 | break; |
| @@ -67,6 +67,7 @@ enum variants { · 66 unmodified lines | |||
| 67 | raa_dmpvr1_2rail, | 67 | raa_dmpvr1_2rail, |
| 68 | raa_dmpvr2_1rail, | 68 | raa_dmpvr2_1rail, |
| 69 | raa_dmpvr2_2rail, | 69 | raa_dmpvr2_2rail, |
| 70 | raa_dmpvr2_2rail_nontc, | ||
| 70 | raa_dmpvr2_3rail, | 71 | raa_dmpvr2_3rail, |
| 71 | raa_dmpvr2_hv, | 72 | raa_dmpvr2_hv, |
| 72 | }; | 73 | }; |
| @@ -241,6 +242,10 @@ static int isl68137_probe(struct i2c_client *client, · 168 unmodified lines | |||
| 241 | info->pages = 1; | 242 | info->pages = 1; |
| 242 | info->read_word_data = raa_dmpvr2_read_word_data; | 243 | info->read_word_data = raa_dmpvr2_read_word_data; |
| 243 | break; | 244 | break; |
| 245 | case raa_dmpvr2_2rail_nontc: | ||
| 246 | info->func[0] &= ~PMBUS_HAVE_TEMP; | ||
| 247 | info->func[1] &= ~PMBUS_HAVE_TEMP; | ||
| 248 | fallthrough; | ||
| 244 | case raa_dmpvr2_2rail: | 249 | case raa_dmpvr2_2rail: |
| 245 | info->pages = 2; | 250 | info->pages = 2; |
| 246 | info->read_word_data = raa_dmpvr2_read_word_data; | 251 | info->read_word_data = raa_dmpvr2_read_word_data; |
| @@ -304,7 +309,7 @@ static const struct i2c_device_id raa_dmpvr_id[] = { · 57 unmodified lines | |||
| 304 | {"raa228000", raa_dmpvr2_hv}, | 309 | {"raa228000", raa_dmpvr2_hv}, |
| 305 | {"raa228004", raa_dmpvr2_hv}, | 310 | {"raa228004", raa_dmpvr2_hv}, |
| 306 | {"raa228006", raa_dmpvr2_hv}, | 311 | {"raa228006", raa_dmpvr2_hv}, |
| 307 | {"raa228228", raa_dmpvr2_2rail}, | 312 | {"raa228228", raa_dmpvr2_2rail_nontc}, |
| 308 | {"raa229001", raa_dmpvr2_2rail}, | 313 | {"raa229001", raa_dmpvr2_2rail}, |
| 309 | {"raa229004", raa_dmpvr2_2rail}, | 314 | {"raa229004", raa_dmpvr2_2rail}, |
| 310 | {} | 315 | {} |
| @@ -1213,7 +1213,7 @@ temp_type_store(struct device *dev, struct device_attribute *devattr, · 1212 unmodified lines | |||
| 1213 | case W83781D_DEFAULT_BETA: | 1213 | case W83781D_DEFAULT_BETA: |
| 1214 | dev_warn(dev, "Sensor type %d is deprecated, please use 4 " | 1214 | dev_warn(dev, "Sensor type %d is deprecated, please use 4 " |
| 1215 | "instead\n", W83781D_DEFAULT_BETA); | 1215 | "instead\n", W83781D_DEFAULT_BETA); |
| 1216 | /* fall through */ | 1216 | fallthrough; |
| 1217 | case 4: /* thermistor */ | 1217 | case 4: /* thermistor */ |
| 1218 | tmp = w83627hf_read_value(data, W83781D_REG_SCFG1); | 1218 | tmp = w83627hf_read_value(data, W83781D_REG_SCFG1); |
| 1219 | w83627hf_write_value(data, W83781D_REG_SCFG1, | 1219 | w83627hf_write_value(data, W83781D_REG_SCFG1, |
| @@ -814,7 +814,7 @@ store_sensor(struct device *dev, struct device_attribute *da, · 813 unmodified lines | |||
| 814 | dev_warn(dev, | 814 | dev_warn(dev, |
| 815 | "Sensor type %d is deprecated, please use 4 instead\n", | 815 | "Sensor type %d is deprecated, please use 4 instead\n", |
| 816 | W83781D_DEFAULT_BETA); | 816 | W83781D_DEFAULT_BETA); |
| 817 | /* fall through */ | 817 | fallthrough; |
| 818 | case 4: /* thermistor */ | 818 | case 4: /* thermistor */ |
| 819 | tmp = w83781d_read_value(data, W83781D_REG_SCFG1); | 819 | tmp = w83781d_read_value(data, W83781D_REG_SCFG1); |
| 820 | w83781d_write_value(data, W83781D_REG_SCFG1, | 820 | w83781d_write_value(data, W83781D_REG_SCFG1, |
| @@ -2127,7 +2127,7 @@ static void w83795_apply_temp_config(struct w83795_data *data, u8 config, · 2126 unmodified lines | |||
| 2127 | if (temp_chan >= 4) | 2127 | if (temp_chan >= 4) |
| 2128 | break; | 2128 | break; |
| 2129 | data->temp_mode |= 1 << temp_chan; | 2129 | data->temp_mode |= 1 << temp_chan; |
| 2130 | /* fall through */ | 2130 | fallthrough; |
| 2131 | case 0x3: /* Thermistor */ | 2131 | case 0x3: /* Thermistor */ |
| 2132 | data->has_temp |= 1 << temp_chan; | 2132 | data->has_temp |= 1 << temp_chan; |
| 2133 | break; | 2133 | break; |
| @@ -346,10 +346,10 @@ static void debug_init_arch_data(void *info) · 345 unmodified lines | |||
| 346 | switch (mode) { | 346 | switch (mode) { |
| 347 | case EDDEVID_IMPL_FULL: | 347 | case EDDEVID_IMPL_FULL: |
| 348 | drvdata->edvidsr_present = true; | 348 | drvdata->edvidsr_present = true; |
| 349 | /* Fall through */ | 349 | fallthrough; |
| 350 | case EDDEVID_IMPL_EDPCSR_EDCIDSR: | 350 | case EDDEVID_IMPL_EDPCSR_EDCIDSR: |
| 351 | drvdata->edcidsr_present = true; | 351 | drvdata->edcidsr_present = true; |
| 352 | /* Fall through */ | 352 | fallthrough; |
| 353 | case EDDEVID_IMPL_EDPCSR: | 353 | case EDDEVID_IMPL_EDPCSR: |
| 354 | /* | 354 | /* |
| 355 | * In ARM DDI 0487A.k, the EDDEVID1.PCSROffset is used to | 355 | * In ARM DDI 0487A.k, the EDDEVID1.PCSROffset is used to |
| @@ -1382,7 +1382,6 @@ static int etm4_cpu_pm_notify(struct notifier_block *nb, unsigned long cmd, · 1381 unmodified lines | |||
| 1382 | return NOTIFY_BAD; | 1382 | return NOTIFY_BAD; |
| 1383 | break; | 1383 | break; |
| 1384 | case CPU_PM_EXIT: | 1384 | case CPU_PM_EXIT: |
| 1385 | /* fallthrough */ | ||
| 1386 | case CPU_PM_ENTER_FAILED: | 1385 | case CPU_PM_ENTER_FAILED: |
| 1387 | if (drvdata->state_needs_restore) | 1386 | if (drvdata->state_needs_restore) |
| 1388 | etm4_cpu_restore(drvdata); | 1387 | etm4_cpu_restore(drvdata); |
| @@ -84,9 +84,7 @@ u32 tmc_get_memwidth_mask(struct tmc_drvdata *drvdata) · 83 unmodified lines | |||
| 84 | */ | 84 | */ |
| 85 | switch (drvdata->memwidth) { | 85 | switch (drvdata->memwidth) { |
| 86 | case TMC_MEM_INTF_WIDTH_32BITS: | 86 | case TMC_MEM_INTF_WIDTH_32BITS: |
| 87 | /* fallthrough */ | ||
| 88 | case TMC_MEM_INTF_WIDTH_64BITS: | 87 | case TMC_MEM_INTF_WIDTH_64BITS: |
| 89 | /* fallthrough */ | ||
| 90 | case TMC_MEM_INTF_WIDTH_128BITS: | 88 | case TMC_MEM_INTF_WIDTH_128BITS: |
| 91 | mask = GENMASK(31, 4); | 89 | mask = GENMASK(31, 4); |
| 92 | break; | 90 | break; |
| @@ -84,11 +84,11 @@ static ssize_t notrace sth_stm_packet(struct stm_data *stm_data, · 83 unmodified lines | |||
| 84 | /* Global packets (GERR, XSYNC, TRIG) are sent with register writes */ | 84 | /* Global packets (GERR, XSYNC, TRIG) are sent with register writes */ |
| 85 | case STP_PACKET_GERR: | 85 | case STP_PACKET_GERR: |
| 86 | reg += 4; | 86 | reg += 4; |
| 87 | /* fall through */ | 87 | fallthrough; |
| 88 | 88 | ||
| 89 | case STP_PACKET_XSYNC: | 89 | case STP_PACKET_XSYNC: |
| 90 | reg += 8; | 90 | reg += 8; |
| 91 | /* fall through */ | 91 | fallthrough; |
| 92 | 92 | ||
| 93 | case STP_PACKET_TRIG: | 93 | case STP_PACKET_TRIG: |
| 94 | if (flags & STP_PACKET_TIMESTAMPED) | 94 | if (flags & STP_PACKET_TIMESTAMPED) |
| @@ -720,7 +720,7 @@ static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c, · 719 unmodified lines | |||
| 720 | 720 | ||
| 721 | /* mark the last byte */ | 721 | /* mark the last byte */ |
| 722 | if (!process_call && (i == msg->len - 1)) | 722 | if (!process_call && (i == msg->len - 1)) |
| 723 | val |= 1 << M_TX_WR_STATUS_SHIFT; | 723 | val |= BIT(M_TX_WR_STATUS_SHIFT); |
| 724 | 724 | ||
| 725 | iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); | 725 | iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); |
| 726 | } | 726 | } |
| @@ -738,7 +738,7 @@ static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c, · 11 unmodified lines | |||
| 738 | */ | 738 | */ |
| 739 | addr = i2c_8bit_addr_from_msg(msg); | 739 | addr = i2c_8bit_addr_from_msg(msg); |
| 740 | /* mark it the last byte out */ | 740 | /* mark it the last byte out */ |
| 741 | val = addr | (1 << M_TX_WR_STATUS_SHIFT); | 741 | val = addr | BIT(M_TX_WR_STATUS_SHIFT); |
| 742 | iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); | 742 | iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); |
| 743 | } | 743 | } |
| 744 | 744 | ||
| @@ -1425,7 +1425,6 @@ omap_i2c_probe(struct platform_device *pdev) · 1424 unmodified lines | |||
| 1425 | major = OMAP_I2C_REV_SCHEME_0_MAJOR(omap->rev); | 1425 | major = OMAP_I2C_REV_SCHEME_0_MAJOR(omap->rev); |
| 1426 | break; | 1426 | break; |
| 1427 | case OMAP_I2C_SCHEME_1: | 1427 | case OMAP_I2C_SCHEME_1: |
| 1428 | /* FALLTHROUGH */ | ||
| 1429 | default: | 1428 | default: |
| 1430 | omap->regs = (u8 *)reg_map_ip_v2; | 1429 | omap->regs = (u8 *)reg_map_ip_v2; |
| 1431 | rev = (rev << 16) | | 1430 | rev = (rev << 16) | |
| @@ -125,7 +125,7 @@ static int i2c_opal_smbus_xfer(struct i2c_adapter *adap, u16 addr, · 124 unmodified lines | |||
| 125 | case I2C_SMBUS_BYTE: | 125 | case I2C_SMBUS_BYTE: |
| 126 | req.buffer_ra = cpu_to_be64(__pa(&data->byte)); | 126 | req.buffer_ra = cpu_to_be64(__pa(&data->byte)); |
| 127 | req.size = cpu_to_be32(1); | 127 | req.size = cpu_to_be32(1); |
| 128 | /* Fall through */ | 128 | fallthrough; |
| 129 | case I2C_SMBUS_QUICK: | 129 | case I2C_SMBUS_QUICK: |
| 130 | req.type = (read_write == I2C_SMBUS_READ) ? | 130 | req.type = (read_write == I2C_SMBUS_READ) ? |
| 131 | OPAL_I2C_RAW_READ : OPAL_I2C_RAW_WRITE; | 131 | OPAL_I2C_RAW_READ : OPAL_I2C_RAW_WRITE; |
| @@ -590,6 +590,7 @@ static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv) · 589 unmodified lines | |||
| 590 | /* master sent stop */ | 590 | /* master sent stop */ |
| 591 | if (ssr_filtered & SSR) { | 591 | if (ssr_filtered & SSR) { |
| 592 | i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value); | 592 | i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value); |
| 593 | rcar_i2c_write(priv, ICSCR, SIE | SDBS); /* clear our NACK */ | ||
| 593 | rcar_i2c_write(priv, ICSIER, SAR); | 594 | rcar_i2c_write(priv, ICSIER, SAR); |
| 594 | rcar_i2c_write(priv, ICSSR, ~SSR & 0xff); | 595 | rcar_i2c_write(priv, ICSSR, ~SSR & 0xff); |
| 595 | } | 596 | } |
| @@ -276,16 +276,6 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap) · 275 unmodified lines | |||
| 276 | dev_warn(&adap->dev, "failed to enumerate I2C slaves\n"); | 276 | dev_warn(&adap->dev, "failed to enumerate I2C slaves\n"); |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | const struct acpi_device_id * | ||
| 280 | i2c_acpi_match_device(const struct acpi_device_id *matches, | ||
| 281 | struct i2c_client *client) | ||
| 282 | { | ||
| 283 | if (!(client && matches)) | ||
| 284 | return NULL; | ||
| 285 | |||
| 286 | return acpi_match_device(matches, &client->dev); | ||
| 287 | } | ||
| 288 | |||
| 289 | static const struct acpi_device_id i2c_acpi_force_400khz_device_ids[] = { | 279 | static const struct acpi_device_id i2c_acpi_force_400khz_device_ids[] = { |
| 290 | /* | 280 | /* |
| 291 | * These Silead touchscreen controllers only work at 400KHz, for | 281 | * These Silead touchscreen controllers only work at 400KHz, for |
| @@ -480,7 +480,7 @@ static int i2c_device_probe(struct device *dev) · 479 unmodified lines | |||
| 480 | * or ACPI ID table is supplied for the probing device. | 480 | * or ACPI ID table is supplied for the probing device. |
| 481 | */ | 481 | */ |
| 482 | if (!driver->id_table && | 482 | if (!driver->id_table && |
| 483 | !i2c_acpi_match_device(dev->driver->acpi_match_table, client) && | 483 | !acpi_driver_match_device(dev, dev->driver) && |
| 484 | !i2c_of_match_device(dev->driver->of_match_table, client)) { | 484 | !i2c_of_match_device(dev->driver->of_match_table, client)) { |
| 485 | status = -ENODEV; | 485 | status = -ENODEV; |
| 486 | goto put_sync_adapter; | 486 | goto put_sync_adapter; |
| @@ -59,20 +59,11 @@ static inline int __i2c_check_suspended(struct i2c_adapter *adap) · 58 unmodified lines | |||
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | #ifdef CONFIG_ACPI | 61 | #ifdef CONFIG_ACPI |
| 62 | const struct acpi_device_id * | ||
| 63 | i2c_acpi_match_device(const struct acpi_device_id *matches, | ||
| 64 | struct i2c_client *client); | ||
| 65 | void i2c_acpi_register_devices(struct i2c_adapter *adap); | 62 | void i2c_acpi_register_devices(struct i2c_adapter *adap); |
| 66 | 63 | ||
| 67 | int i2c_acpi_get_irq(struct i2c_client *client); | 64 | int i2c_acpi_get_irq(struct i2c_client *client); |
| 68 | #else /* CONFIG_ACPI */ | 65 | #else /* CONFIG_ACPI */ |
| 69 | static inline void i2c_acpi_register_devices(struct i2c_adapter *adap) { } | 66 | static inline void i2c_acpi_register_devices(struct i2c_adapter *adap) { } |
| 70 | static inline const struct acpi_device_id * | ||
| 71 | i2c_acpi_match_device(const struct acpi_device_id *matches, | ||
| 72 | struct i2c_client *client) | ||
| 73 | { | ||
| 74 | return NULL; | ||
| 75 | } | ||
| 76 | 67 | ||
| 77 | static inline int i2c_acpi_get_irq(struct i2c_client *client) | 68 | static inline int i2c_acpi_get_irq(struct i2c_client *client) |
| 78 | { | 69 | { |
| @@ -603,7 +603,7 @@ static int dw_i3c_master_bus_init(struct i3c_master_controller *m) · 602 unmodified lines | |||
| 603 | ret = dw_i2c_clk_cfg(master); | 603 | ret = dw_i2c_clk_cfg(master); |
| 604 | if (ret) | 604 | if (ret) |
| 605 | return ret; | 605 | return ret; |
| 606 | /* fall through */ | 606 | fallthrough; |
| 607 | case I3C_BUS_MODE_PURE: | 607 | case I3C_BUS_MODE_PURE: |
| 608 | ret = dw_i3c_clk_cfg(master); | 608 | ret = dw_i3c_clk_cfg(master); |
| 609 | if (ret) | 609 | if (ret) |
| @@ -575,14 +575,14 @@ static u8 hpt3xx_udma_filter(ide_drive_t *drive) · 574 unmodified lines | |||
| 575 | if (!HPT370_ALLOW_ATA100_5 || | 575 | if (!HPT370_ALLOW_ATA100_5 || |
| 576 | check_in_drive_list(drive, bad_ata100_5)) | 576 | check_in_drive_list(drive, bad_ata100_5)) |
| 577 | return ATA_UDMA4; | 577 | return ATA_UDMA4; |
| 578 | /* fall through */ | 578 | fallthrough; |
| 579 | case HPT372 : | 579 | case HPT372 : |
| 580 | case HPT372A: | 580 | case HPT372A: |
| 581 | case HPT372N: | 581 | case HPT372N: |
| 582 | case HPT374 : | 582 | case HPT374 : |
| 583 | if (ata_id_is_sata(drive->id)) | 583 | if (ata_id_is_sata(drive->id)) |
| 584 | mask &= ~0x0e; | 584 | mask &= ~0x0e; |
| 585 | /* fall through */ | 585 | fallthrough; |
| 586 | default: | 586 | default: |
| 587 | return mask; | 587 | return mask; |
| 588 | } | 588 | } |
| @@ -602,7 +602,7 @@ static u8 hpt3xx_mdma_filter(ide_drive_t *drive) · 13 unmodified lines | |||
| 602 | case HPT374 : | 602 | case HPT374 : |
| 603 | if (ata_id_is_sata(drive->id)) | 603 | if (ata_id_is_sata(drive->id)) |
| 604 | return 0x00; | 604 | return 0x00; |
| 605 | /* fall through */ | 605 | fallthrough; |
| 606 | default: | 606 | default: |
| 607 | return 0x07; | 607 | return 0x07; |
| 608 | } | 608 | } |
| @@ -350,7 +350,7 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat) · 349 unmodified lines | |||
| 350 | */ | 350 | */ |
| 351 | if (scsi_req(rq)->cmd[0] == GPCMD_START_STOP_UNIT) | 351 | if (scsi_req(rq)->cmd[0] == GPCMD_START_STOP_UNIT) |
| 352 | break; | 352 | break; |
| 353 | /* fall-through */ | 353 | fallthrough; |
| 354 | case DATA_PROTECT: | 354 | case DATA_PROTECT: |
| 355 | /* | 355 | /* |
| 356 | * No point in retrying after an illegal request or data | 356 | * No point in retrying after an illegal request or data |
| @@ -750,7 +750,7 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) · 393 unmodified lines | |||
| 750 | case REQ_OP_DRV_IN: | 750 | case REQ_OP_DRV_IN: |
| 751 | case REQ_OP_DRV_OUT: | 751 | case REQ_OP_DRV_OUT: |
| 752 | expiry = ide_cd_expiry; | 752 | expiry = ide_cd_expiry; |
| 753 | /*FALLTHRU*/ | 753 | fallthrough; |
| 754 | default: | 754 | default: |
| 755 | timeout = ATAPI_WAIT_PC; | 755 | timeout = ATAPI_WAIT_PC; |
| 756 | break; | 756 | break; |
| @@ -428,7 +428,7 @@ static int ide_floppy_get_capacity(ide_drive_t *drive) · 427 unmodified lines | |||
| 428 | * (maintains previous driver behaviour) | 428 | * (maintains previous driver behaviour) |
| 429 | */ | 429 | */ |
| 430 | break; | 430 | break; |
| 431 | /* fall through */ | 431 | fallthrough; |
| 432 | case CAPACITY_CURRENT: | 432 | case CAPACITY_CURRENT: |
| 433 | /* Normal Zip/LS-120 disks */ | 433 | /* Normal Zip/LS-120 disks */ |
| 434 | if (memcmp(cap_desc, &floppy->cap_desc, 8)) | 434 | if (memcmp(cap_desc, &floppy->cap_desc, 8)) |
| @@ -143,7 +143,7 @@ static void ide_classify_atapi_dev(ide_drive_t *drive) · 142 unmodified lines | |||
| 143 | } | 143 | } |
| 144 | /* Early cdrom models used zero */ | 144 | /* Early cdrom models used zero */ |
| 145 | type = ide_cdrom; | 145 | type = ide_cdrom; |
| 146 | /* fall through */ | 146 | fallthrough; |
| 147 | case ide_cdrom: | 147 | case ide_cdrom: |
| 148 | drive->dev_flags |= IDE_DFLAG_REMOVABLE; | 148 | drive->dev_flags |= IDE_DFLAG_REMOVABLE; |
| 149 | #ifdef CONFIG_PPC | 149 | #ifdef CONFIG_PPC |
| @@ -129,7 +129,7 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd) · 128 unmodified lines | |||
| 129 | return pre_task_out_intr(drive, cmd); | 129 | return pre_task_out_intr(drive, cmd); |
| 130 | } | 130 | } |
| 131 | handler = task_pio_intr; | 131 | handler = task_pio_intr; |
| 132 | /* fall through */ | 132 | fallthrough; |
| 133 | case ATA_PROT_NODATA: | 133 | case ATA_PROT_NODATA: |
| 134 | if (handler == NULL) | 134 | if (handler == NULL) |
| 135 | handler = task_no_data_intr; | 135 | handler = task_no_data_intr; |
| @@ -141,7 +141,7 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd) · 5 unmodified lines | |||
| 141 | hwif->expiry = dma_ops->dma_timer_expiry; | 141 | hwif->expiry = dma_ops->dma_timer_expiry; |
| 142 | ide_execute_command(drive, cmd, ide_dma_intr, 2 * WAIT_CMD); | 142 | ide_execute_command(drive, cmd, ide_dma_intr, 2 * WAIT_CMD); |
| 143 | dma_ops->dma_start(drive); | 143 | dma_ops->dma_start(drive); |
| 144 | /* fall through */ | 144 | fallthrough; |
| 145 | default: | 145 | default: |
| 146 | return ide_started; | 146 | return ide_started; |
| 147 | } | 147 | } |
| @@ -579,10 +579,10 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) · 431 unmodified lines | |||
| 579 | goto abort; | 579 | goto abort; |
| 580 | } | 580 | } |
| 581 | cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; | 581 | cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; |
| 582 | /* fall through */ | 582 | fallthrough; |
| 583 | case TASKFILE_OUT: | 583 | case TASKFILE_OUT: |
| 584 | cmd.protocol = ATA_PROT_PIO; | 584 | cmd.protocol = ATA_PROT_PIO; |
| 585 | /* fall through */ | 585 | fallthrough; |
| 586 | case TASKFILE_OUT_DMAQ: | 586 | case TASKFILE_OUT_DMAQ: |
| 587 | case TASKFILE_OUT_DMA: | 587 | case TASKFILE_OUT_DMA: |
| 588 | cmd.tf_flags |= IDE_TFLAG_WRITE; | 588 | cmd.tf_flags |= IDE_TFLAG_WRITE; |
| @@ -598,10 +598,10 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) · 9 unmodified lines | |||
| 598 | goto abort; | 598 | goto abort; |
| 599 | } | 599 | } |
| 600 | cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; | 600 | cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; |
| 601 | /* fall through */ | 601 | fallthrough; |
| 602 | case TASKFILE_IN: | 602 | case TASKFILE_IN: |
| 603 | cmd.protocol = ATA_PROT_PIO; | 603 | cmd.protocol = ATA_PROT_PIO; |
| 604 | /* fall through */ | 604 | fallthrough; |
| 605 | case TASKFILE_IN_DMAQ: | 605 | case TASKFILE_IN_DMAQ: |
| 606 | case TASKFILE_IN_DMA: | 606 | case TASKFILE_IN_DMA: |
| 607 | nsect = taskin / SECTOR_SIZE; | 607 | nsect = taskin / SECTOR_SIZE; |
| @@ -494,7 +494,7 @@ static int init_chipset_sis5513(struct pci_dev *dev) · 493 unmodified lines | |||
| 494 | pci_read_config_byte(dev, 0x09, ®); | 494 | pci_read_config_byte(dev, 0x09, ®); |
| 495 | if ((reg & 0x0f) != 0x00) | 495 | if ((reg & 0x0f) != 0x00) |
| 496 | pci_write_config_byte(dev, 0x09, reg&0xf0); | 496 | pci_write_config_byte(dev, 0x09, reg&0xf0); |
| 497 | /* fall through */ | 497 | fallthrough; |
| 498 | case ATA_16: | 498 | case ATA_16: |
| 499 | /* force per drive recovery and active timings | 499 | /* force per drive recovery and active timings |
| 500 | needed on ATA_33 and below chips */ | 500 | needed on ATA_33 and below chips */ |
| @@ -89,14 +89,6 @@ static unsigned int mwait_substates __initdata; · 88 unmodified lines | |||
| 89 | */ | 89 | */ |
| 90 | #define CPUIDLE_FLAG_ALWAYS_ENABLE BIT(15) | 90 | #define CPUIDLE_FLAG_ALWAYS_ENABLE BIT(15) |
| 91 | 91 | ||
| 92 | /* | ||
| 93 | * Set this flag for states where the HW flushes the TLB for us | ||
| 94 | * and so we don't need cross-calls to keep it consistent. | ||
| 95 | * If this flag is set, SW flushes the TLB, so even if the | ||
| 96 | * HW doesn't do the flushing, this flag is safe to use. | ||
| 97 | */ | ||
| 98 | #define CPUIDLE_FLAG_TLB_FLUSHED BIT(16) | ||
| 99 | |||
| 100 | /* | 92 | /* |
| 101 | * MWAIT takes an 8-bit "hint" in EAX "suggesting" | 93 | * MWAIT takes an 8-bit "hint" in EAX "suggesting" |
| 102 | * the C-state (top nibble) and sub-state (bottom nibble) | 94 | * the C-state (top nibble) and sub-state (bottom nibble) |
| @@ -131,14 +123,6 @@ static __cpuidle int intel_idle(struct cpuidle_device *dev, · 28 unmodified lines | |||
| 131 | unsigned long eax = flg2MWAIT(state->flags); | 123 | unsigned long eax = flg2MWAIT(state->flags); |
| 132 | unsigned long ecx = 1; /* break on interrupt flag */ | 124 | unsigned long ecx = 1; /* break on interrupt flag */ |
| 133 | bool tick; | 125 | bool tick; |
| 134 | int cpu = smp_processor_id(); | ||
| 135 | |||
| 136 | /* | ||
| 137 | * leave_mm() to avoid costly and often unnecessary wakeups | ||
| 138 | * for flushing the user TLB's associated with the active mm. | ||
| 139 | */ | ||
| 140 | if (state->flags & CPUIDLE_FLAG_TLB_FLUSHED) | ||
| 141 | leave_mm(cpu); | ||
| 142 | 126 | ||
| 143 | if (!static_cpu_has(X86_FEATURE_ARAT)) { | 127 | if (!static_cpu_has(X86_FEATURE_ARAT)) { |
| 144 | /* | 128 | /* |
| @@ -1580,7 +1580,7 @@ static int mma8452_probe(struct i2c_client *client, · 1579 unmodified lines | |||
| 1580 | case FXLS8471_DEVICE_ID: | 1580 | case FXLS8471_DEVICE_ID: |
| 1581 | if (ret == data->chip_info->chip_id) | 1581 | if (ret == data->chip_info->chip_id) |
| 1582 | break; | 1582 | break; |
| 1583 | /* fall through */ | 1583 | fallthrough; |
| 1584 | default: | 1584 | default: |
| 1585 | ret = -ENODEV; | 1585 | ret = -ENODEV; |
| 1586 | goto disable_regulators; | 1586 | goto disable_regulators; |
| @@ -484,7 +484,7 @@ static int ab8500_gpadc_read(struct ab8500_gpadc *gpadc, · 483 unmodified lines | |||
| 484 | delay_max = 10000; /* large range optimises sleepmode */ | 484 | delay_max = 10000; /* large range optimises sleepmode */ |
| 485 | break; | 485 | break; |
| 486 | } | 486 | } |
| 487 | /* Fall through */ | 487 | fallthrough; |
| 488 | default: | 488 | default: |
| 489 | ctrl1 |= AB8500_GPADC_CTRL1_BUF_ENA; | 489 | ctrl1 |= AB8500_GPADC_CTRL1_BUF_ENA; |
| 490 | break; | 490 | break; |
| @@ -690,7 +690,7 @@ static void cpcap_adc_phase(struct cpcap_adc_request *req) · 689 unmodified lines | |||
| 690 | break; | 690 | break; |
| 691 | case CPCAP_ADC_BATTI_PI17: | 691 | case CPCAP_ADC_BATTI_PI17: |
| 692 | index = req->bank_index; | 692 | index = req->bank_index; |
| 693 | /* fallthrough */ | 693 | fallthrough; |
| 694 | default: | 694 | default: |
| 695 | req->result += conv_tbl[index].cal_offset; | 695 | req->result += conv_tbl[index].cal_offset; |
| 696 | req->result += conv_tbl[index].align_offset; | 696 | req->result += conv_tbl[index].align_offset; |
| @@ -118,7 +118,7 @@ static int sps30_do_cmd(struct sps30_state *state, u16 cmd, u8 *data, int size) · 117 unmodified lines | |||
| 118 | case SPS30_READ_AUTO_CLEANING_PERIOD: | 118 | case SPS30_READ_AUTO_CLEANING_PERIOD: |
| 119 | buf[0] = SPS30_AUTO_CLEANING_PERIOD >> 8; | 119 | buf[0] = SPS30_AUTO_CLEANING_PERIOD >> 8; |
| 120 | buf[1] = (u8)(SPS30_AUTO_CLEANING_PERIOD & 0xff); | 120 | buf[1] = (u8)(SPS30_AUTO_CLEANING_PERIOD & 0xff); |
| 121 | /* fall through */ | 121 | fallthrough; |
| 122 | case SPS30_READ_DATA_READY_FLAG: | 122 | case SPS30_READ_DATA_READY_FLAG: |
| 123 | case SPS30_READ_DATA: | 123 | case SPS30_READ_DATA: |
| 124 | case SPS30_READ_SERIAL: | 124 | case SPS30_READ_SERIAL: |
| @@ -220,7 +220,6 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) · 219 unmodified lines | |||
| 220 | break; | 220 | break; |
| 221 | 221 | ||
| 222 | case CH_MODE_UNUSED: | 222 | case CH_MODE_UNUSED: |
| 223 | /* fall-through */ | ||
| 224 | default: | 223 | default: |
| 225 | switch (st->channel_offstate[i]) { | 224 | switch (st->channel_offstate[i]) { |
| 226 | case CH_OFFSTATE_OUT_TRISTATE: | 225 | case CH_OFFSTATE_OUT_TRISTATE: |
| @@ -237,7 +236,6 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) · 10 unmodified lines | |||
| 237 | break; | 236 | break; |
| 238 | 237 | ||
| 239 | case CH_OFFSTATE_PULLDOWN: | 238 | case CH_OFFSTATE_PULLDOWN: |
| 240 | /* fall-through */ | ||
| 241 | default: | 239 | default: |
| 242 | pulldown |= BIT(i); | 240 | pulldown |= BIT(i); |
| 243 | break; | 241 | break; |
| @@ -74,11 +74,12 @@ static int dpot_dac_read_raw(struct iio_dev *indio_dev, · 73 unmodified lines | |||
| 74 | case IIO_VAL_INT: | 74 | case IIO_VAL_INT: |
| 75 | /* | 75 | /* |
| 76 | * Convert integer scale to fractional scale by | 76 | * Convert integer scale to fractional scale by |
| 77 | * setting the denominator (val2) to one, and... | 77 | * setting the denominator (val2) to one... |
| 78 | */ | 78 | */ |
| 79 | *val2 = 1; | 79 | *val2 = 1; |
| 80 | ret = IIO_VAL_FRACTIONAL; | 80 | ret = IIO_VAL_FRACTIONAL; |
| 81 | /* fall through */ | 81 | /* ...and fall through. Say it again for GCC. */ |
| 82 | fallthrough; | ||
| 82 | case IIO_VAL_FRACTIONAL: | 83 | case IIO_VAL_FRACTIONAL: |
| 83 | *val *= regulator_get_voltage(dac->vref) / 1000; | 84 | *val *= regulator_get_voltage(dac->vref) / 1000; |
| 84 | *val2 *= dac->max_ohms; | 85 | *val2 *= dac->max_ohms; |
| @@ -273,10 +273,10 @@ static int max30102_read_measurement(struct max30102_data *data, · 272 unmodified lines | |||
| 273 | switch (measurements) { | 273 | switch (measurements) { |
| 274 | case 3: | 274 | case 3: |
| 275 | MAX30102_COPY_DATA(2); | 275 | MAX30102_COPY_DATA(2); |
| 276 | /* fall through */ | 276 | fallthrough; |
| 277 | case 2: | 277 | case 2: |
| 278 | MAX30102_COPY_DATA(1); | 278 | MAX30102_COPY_DATA(1); |
| 279 | /* fall through */ | 279 | fallthrough; |
| 280 | case 1: | 280 | case 1: |
| 281 | MAX30102_COPY_DATA(0); | 281 | MAX30102_COPY_DATA(0); |
| 282 | break; | 282 | break; |
| @@ -97,11 +97,11 @@ int __adis_write_reg(struct adis *adis, unsigned int reg, · 96 unmodified lines | |||
| 97 | adis->tx[9] = (value >> 24) & 0xff; | 97 | adis->tx[9] = (value >> 24) & 0xff; |
| 98 | adis->tx[6] = ADIS_WRITE_REG(reg + 2); | 98 | adis->tx[6] = ADIS_WRITE_REG(reg + 2); |
| 99 | adis->tx[7] = (value >> 16) & 0xff; | 99 | adis->tx[7] = (value >> 16) & 0xff; |
| 100 | /* fall through */ | 100 | fallthrough; |
| 101 | case 2: | 101 | case 2: |
| 102 | adis->tx[4] = ADIS_WRITE_REG(reg + 1); | 102 | adis->tx[4] = ADIS_WRITE_REG(reg + 1); |
| 103 | adis->tx[5] = (value >> 8) & 0xff; | 103 | adis->tx[5] = (value >> 8) & 0xff; |
| 104 | /* fall through */ | 104 | fallthrough; |
| 105 | case 1: | 105 | case 1: |
| 106 | adis->tx[2] = ADIS_WRITE_REG(reg); | 106 | adis->tx[2] = ADIS_WRITE_REG(reg); |
| 107 | adis->tx[3] = value & 0xff; | 107 | adis->tx[3] = value & 0xff; |
| @@ -191,7 +191,7 @@ int __adis_read_reg(struct adis *adis, unsigned int reg, · 83 unmodified lines | |||
| 191 | adis->tx[2] = ADIS_READ_REG(reg + 2); | 191 | adis->tx[2] = ADIS_READ_REG(reg + 2); |
| 192 | adis->tx[3] = 0; | 192 | adis->tx[3] = 0; |
| 193 | spi_message_add_tail(&xfers[1], &msg); | 193 | spi_message_add_tail(&xfers[1], &msg); |
| 194 | /* fall through */ | 194 | fallthrough; |
| 195 | case 2: | 195 | case 2: |
| 196 | adis->tx[4] = ADIS_READ_REG(reg); | 196 | adis->tx[4] = ADIS_READ_REG(reg); |
| 197 | adis->tx[5] = 0; | 197 | adis->tx[5] = 0; |
| @@ -599,7 +599,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type, · 598 unmodified lines | |||
| 599 | return scnprintf(buf, len, "%d", vals[0]); | 599 | return scnprintf(buf, len, "%d", vals[0]); |
| 600 | case IIO_VAL_INT_PLUS_MICRO_DB: | 600 | case IIO_VAL_INT_PLUS_MICRO_DB: |
| 601 | scale_db = true; | 601 | scale_db = true; |
| 602 | /* fall through */ | 602 | fallthrough; |
| 603 | case IIO_VAL_INT_PLUS_MICRO: | 603 | case IIO_VAL_INT_PLUS_MICRO: |
| 604 | if (vals[1] < 0) | 604 | if (vals[1] < 0) |
| 605 | return scnprintf(buf, len, "-%d.%06u%s", abs(vals[0]), | 605 | return scnprintf(buf, len, "-%d.%06u%s", abs(vals[0]), |
| @@ -918,7 +918,7 @@ static ssize_t iio_write_channel_info(struct device *dev, · 312 unmodified lines | |||
| 918 | break; | 918 | break; |
| 919 | case IIO_VAL_INT_PLUS_MICRO_DB: | 919 | case IIO_VAL_INT_PLUS_MICRO_DB: |
| 920 | scale_db = true; | 920 | scale_db = true; |
| 921 | /* fall through */ | 921 | fallthrough; |
| 922 | case IIO_VAL_INT_PLUS_MICRO: | 922 | case IIO_VAL_INT_PLUS_MICRO: |
| 923 | fract_mult = 100000; | 923 | fract_mult = 100000; |
| 924 | break; | 924 | break; |
| @@ -1042,7 +1042,7 @@ static int si1145_initialize(struct si1145_data *data) · 1041 unmodified lines | |||
| 1042 | SI1145_LED_CURRENT_45mA); | 1042 | SI1145_LED_CURRENT_45mA); |
| 1043 | if (ret < 0) | 1043 | if (ret < 0) |
| 1044 | return ret; | 1044 | return ret; |
| 1045 | /* fallthrough */ | 1045 | fallthrough; |
| 1046 | case 2: | 1046 | case 2: |
| 1047 | ret = i2c_smbus_write_byte_data(client, | 1047 | ret = i2c_smbus_write_byte_data(client, |
| 1048 | SI1145_REG_PS_LED21, | 1048 | SI1145_REG_PS_LED21, |
| @@ -499,7 +499,7 @@ static int ak8974_detect(struct ak8974 *ak8974) · 498 unmodified lines | |||
| 499 | switch (whoami) { | 499 | switch (whoami) { |
| 500 | case AK8974_WHOAMI_VALUE_AMI306: | 500 | case AK8974_WHOAMI_VALUE_AMI306: |
| 501 | name = "ami306"; | 501 | name = "ami306"; |
| 502 | /* fall-through */ | 502 | fallthrough; |
| 503 | case AK8974_WHOAMI_VALUE_AMI305: | 503 | case AK8974_WHOAMI_VALUE_AMI305: |
| 504 | ret = regmap_read(ak8974->map, AMI305_VER, &fw); | 504 | ret = regmap_read(ak8974->map, AMI305_VER, &fw); |
| 505 | if (ret) | 505 | if (ret) |
| @@ -3034,7 +3034,7 @@ static int cm_rej_handler(struct cm_work *work) · 3033 unmodified lines | |||
| 3034 | case IB_CM_REP_SENT: | 3034 | case IB_CM_REP_SENT: |
| 3035 | case IB_CM_MRA_REP_RCVD: | 3035 | case IB_CM_MRA_REP_RCVD: |
| 3036 | ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); | 3036 | ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); |
| 3037 | /* fall through */ | 3037 | fallthrough; |
| 3038 | case IB_CM_REQ_RCVD: | 3038 | case IB_CM_REQ_RCVD: |
| 3039 | case IB_CM_MRA_REQ_SENT: | 3039 | case IB_CM_MRA_REQ_SENT: |
| 3040 | if (IBA_GET(CM_REJ_REASON, rej_msg) == IB_CM_REJ_STALE_CONN) | 3040 | if (IBA_GET(CM_REJ_REASON, rej_msg) == IB_CM_REJ_STALE_CONN) |
| @@ -3044,7 +3044,7 @@ static int cm_rej_handler(struct cm_work *work) · 3 unmodified lines | |||
| 3044 | break; | 3044 | break; |
| 3045 | case IB_CM_DREQ_SENT: | 3045 | case IB_CM_DREQ_SENT: |
| 3046 | ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); | 3046 | ib_cancel_mad(cm_id_priv->av.port->mad_agent, cm_id_priv->msg); |
| 3047 | /* fall through */ | 3047 | fallthrough; |
| 3048 | case IB_CM_REP_RCVD: | 3048 | case IB_CM_REP_RCVD: |
| 3049 | case IB_CM_MRA_REP_SENT: | 3049 | case IB_CM_MRA_REP_SENT: |
| 3050 | cm_enter_timewait(cm_id_priv); | 3050 | cm_enter_timewait(cm_id_priv); |
| @@ -3058,7 +3058,7 @@ static int cm_rej_handler(struct cm_work *work) · 7 unmodified lines | |||
| 3058 | cm_enter_timewait(cm_id_priv); | 3058 | cm_enter_timewait(cm_id_priv); |
| 3059 | break; | 3059 | break; |
| 3060 | } | 3060 | } |
| 3061 | /* fall through */ | 3061 | fallthrough; |
| 3062 | default: | 3062 | default: |
| 3063 | pr_debug("%s: local_id %d, cm_id_priv->id.state: %d\n", | 3063 | pr_debug("%s: local_id %d, cm_id_priv->id.state: %d\n", |
| 3064 | __func__, be32_to_cpu(cm_id_priv->id.local_id), | 3064 | __func__, be32_to_cpu(cm_id_priv->id.local_id), |
| @@ -3116,7 +3116,7 @@ int ib_send_cm_mra(struct ib_cm_id *cm_id, · 51 unmodified lines | |||
| 3116 | msg_response = CM_MSG_RESPONSE_OTHER; | 3116 | msg_response = CM_MSG_RESPONSE_OTHER; |
| 3117 | break; | 3117 | break; |
| 3118 | } | 3118 | } |
| 3119 | /* fall through */ | 3119 | fallthrough; |
| 3120 | default: | 3120 | default: |
| 3121 | pr_debug("%s: local_id %d, cm_id_priv->id.state: %d\n", | 3121 | pr_debug("%s: local_id %d, cm_id_priv->id.state: %d\n", |
| 3122 | __func__, be32_to_cpu(cm_id_priv->id.local_id), | 3122 | __func__, be32_to_cpu(cm_id_priv->id.local_id), |
| @@ -3227,7 +3227,7 @@ static int cm_mra_handler(struct cm_work *work) · 104 unmodified lines | |||
| 3227 | case IB_CM_MRA_REP_RCVD: | 3227 | case IB_CM_MRA_REP_RCVD: |
| 3228 | atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. | 3228 | atomic_long_inc(&work->port->counter_group[CM_RECV_DUPLICATES]. |
| 3229 | counter[CM_MRA_COUNTER]); | 3229 | counter[CM_MRA_COUNTER]); |
| 3230 | /* fall through */ | 3230 | fallthrough; |
| 3231 | default: | 3231 | default: |
| 3232 | pr_debug("%s local_id %d, cm_id_priv->id.state: %d\n", | 3232 | pr_debug("%s local_id %d, cm_id_priv->id.state: %d\n", |
| 3233 | __func__, be32_to_cpu(cm_id_priv->id.local_id), | 3233 | __func__, be32_to_cpu(cm_id_priv->id.local_id), |
| @@ -4214,7 +4214,7 @@ static int cm_init_qp_rts_attr(struct cm_id_private *cm_id_priv, · 980 unmodified lines | |||
| 4214 | qp_attr->retry_cnt = cm_id_priv->retry_count; | 4214 | qp_attr->retry_cnt = cm_id_priv->retry_count; |
| 4215 | qp_attr->rnr_retry = cm_id_priv->rnr_retry_count; | 4215 | qp_attr->rnr_retry = cm_id_priv->rnr_retry_count; |
| 4216 | qp_attr->max_rd_atomic = cm_id_priv->initiator_depth; | 4216 | qp_attr->max_rd_atomic = cm_id_priv->initiator_depth; |
| 4217 | /* fall through */ | 4217 | fallthrough; |
| 4218 | case IB_QPT_XRC_TGT: | 4218 | case IB_QPT_XRC_TGT: |
| 4219 | *qp_attr_mask |= IB_QP_TIMEOUT; | 4219 | *qp_attr_mask |= IB_QP_TIMEOUT; |
| 4220 | qp_attr->timeout = cm_id_priv->av.timeout; | 4220 | qp_attr->timeout = cm_id_priv->av.timeout; |
| @@ -1985,7 +1985,8 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, · 1984 unmodified lines | |||
| 1985 | event.event = RDMA_CM_EVENT_ESTABLISHED; | 1985 | event.event = RDMA_CM_EVENT_ESTABLISHED; |
| 1986 | break; | 1986 | break; |
| 1987 | case IB_CM_DREQ_ERROR: | 1987 | case IB_CM_DREQ_ERROR: |
| 1988 | event.status = -ETIMEDOUT; /* fall through */ | 1988 | event.status = -ETIMEDOUT; |
| 1989 | fallthrough; | ||
| 1989 | case IB_CM_DREQ_RECEIVED: | 1990 | case IB_CM_DREQ_RECEIVED: |
| 1990 | case IB_CM_DREP_RECEIVED: | 1991 | case IB_CM_DREP_RECEIVED: |
| 1991 | if (!cma_comp_exch(id_priv, RDMA_CM_CONNECT, | 1992 | if (!cma_comp_exch(id_priv, RDMA_CM_CONNECT, |
| @@ -2751,7 +2751,7 @@ static int __init ib_core_init(void) · 2750 unmodified lines | |||
| 2751 | 2751 | ||
| 2752 | ret = addr_init(); | 2752 | ret = addr_init(); |
| 2753 | if (ret) { | 2753 | if (ret) { |
| 2754 | pr_warn("Could't init IB address resolution\n"); | 2754 | pr_warn("Couldn't init IB address resolution\n"); |
| 2755 | goto err_ibnl; | 2755 | goto err_ibnl; |
| 2756 | } | 2756 | } |
| 2757 | 2757 | ||
| @@ -510,7 +510,6 @@ struct ib_send_wr *rdma_rw_ctx_wrs(struct rdma_rw_ctx *ctx, struct ib_qp *qp, · 509 unmodified lines | |||
| 510 | switch (ctx->type) { | 510 | switch (ctx->type) { |
| 511 | case RDMA_RW_SIG_MR: | 511 | case RDMA_RW_SIG_MR: |
| 512 | case RDMA_RW_MR: | 512 | case RDMA_RW_MR: |
| 513 | /* fallthrough */ | ||
| 514 | for (i = 0; i < ctx->nr_ops; i++) { | 513 | for (i = 0; i < ctx->nr_ops; i++) { |
| 515 | rdma_rw_update_lkey(&ctx->reg[i], | 514 | rdma_rw_update_lkey(&ctx->reg[i], |
| 516 | ctx->reg[i].wr.wr.opcode != | 515 | ctx->reg[i].wr.wr.opcode != |
| @@ -794,7 +794,7 @@ static void ucma_copy_ib_route(struct rdma_ucm_query_route_resp *resp, · 793 unmodified lines | |||
| 794 | case 2: | 794 | case 2: |
| 795 | ib_copy_path_rec_to_user(&resp->ib_route[1], | 795 | ib_copy_path_rec_to_user(&resp->ib_route[1], |
| 796 | &route->path_rec[1]); | 796 | &route->path_rec[1]); |
| 797 | /* fall through */ | 797 | fallthrough; |
| 798 | case 1: | 798 | case 1: |
| 799 | ib_copy_path_rec_to_user(&resp->ib_route[0], | 799 | ib_copy_path_rec_to_user(&resp->ib_route[0], |
| 800 | &route->path_rec[0]); | 800 | &route->path_rec[0]); |
| @@ -820,7 +820,7 @@ static void ucma_copy_iboe_route(struct rdma_ucm_query_route_resp *resp, · 19 unmodified lines | |||
| 820 | case 2: | 820 | case 2: |
| 821 | ib_copy_path_rec_to_user(&resp->ib_route[1], | 821 | ib_copy_path_rec_to_user(&resp->ib_route[1], |
| 822 | &route->path_rec[1]); | 822 | &route->path_rec[1]); |
| 823 | /* fall through */ | 823 | fallthrough; |
| 824 | case 1: | 824 | case 1: |
| 825 | ib_copy_path_rec_to_user(&resp->ib_route[0], | 825 | ib_copy_path_rec_to_user(&resp->ib_route[0], |
| 826 | &route->path_rec[0]); | 826 | &route->path_rec[0]); |
| @@ -259,7 +259,7 @@ static int uverbs_process_attr(struct bundle_priv *pbundle, · 258 unmodified lines | |||
| 259 | return -EOPNOTSUPP; | 259 | return -EOPNOTSUPP; |
| 260 | 260 | ||
| 261 | e->ptr_attr.enum_id = uattr->attr_data.enum_data.elem_id; | 261 | e->ptr_attr.enum_id = uattr->attr_data.enum_data.elem_id; |
| 262 | /* fall through */ | 262 | fallthrough; |
| 263 | case UVERBS_ATTR_TYPE_PTR_IN: | 263 | case UVERBS_ATTR_TYPE_PTR_IN: |
| 264 | /* Ensure that any data provided by userspace beyond the known | 264 | /* Ensure that any data provided by userspace beyond the known |
| 265 | * struct is zero. Userspace that knows how to use some future | 265 | * struct is zero. Userspace that knows how to use some future |
| @@ -271,7 +271,7 @@ static int uverbs_process_attr(struct bundle_priv *pbundle, · 5 unmodified lines | |||
| 271 | !uverbs_is_attr_cleared(uattr, val_spec->u.ptr.len)) | 271 | !uverbs_is_attr_cleared(uattr, val_spec->u.ptr.len)) |
| 272 | return -EOPNOTSUPP; | 272 | return -EOPNOTSUPP; |
| 273 | 273 | ||
| 274 | /* fall through */ | 274 | fallthrough; |
| 275 | case UVERBS_ATTR_TYPE_PTR_OUT: | 275 | case UVERBS_ATTR_TYPE_PTR_OUT: |
| 276 | if (uattr->len < val_spec->u.ptr.min_len || | 276 | if (uattr->len < val_spec->u.ptr.min_len || |
| 277 | (!val_spec->zero_trailing && | 277 | (!val_spec->zero_trailing && |
| @@ -2657,7 +2657,7 @@ int bnxt_re_post_send(struct ib_qp *ib_qp, const struct ib_send_wr *wr, · 2656 unmodified lines | |||
| 2657 | default: | 2657 | default: |
| 2658 | break; | 2658 | break; |
| 2659 | } | 2659 | } |
| 2660 | /* fall through */ | 2660 | fallthrough; |
| 2661 | case IB_WR_SEND_WITH_INV: | 2661 | case IB_WR_SEND_WITH_INV: |
| 2662 | rc = bnxt_re_build_send_wqe(qp, wr, &wqe); | 2662 | rc = bnxt_re_build_send_wqe(qp, wr, &wqe); |
| 2663 | break; | 2663 | break; |
| @@ -821,7 +821,8 @@ static int bnxt_re_handle_qp_async_event(struct creq_qp_event *qp_event, · 820 unmodified lines | |||
| 821 | struct ib_event event; | 821 | struct ib_event event; |
| 822 | unsigned int flags; | 822 | unsigned int flags; |
| 823 | 823 | ||
| 824 | if (qp->qplib_qp.state == CMDQ_MODIFY_QP_NEW_STATE_ERR) { | 824 | if (qp->qplib_qp.state == CMDQ_MODIFY_QP_NEW_STATE_ERR && |
| 825 | rdma_is_kernel_res(&qp->ib_qp.res)) { | ||
| 825 | flags = bnxt_re_lock_cqs(qp); | 826 | flags = bnxt_re_lock_cqs(qp); |
| 826 | bnxt_qplib_add_flush_qp(&qp->qplib_qp); | 827 | bnxt_qplib_add_flush_qp(&qp->qplib_qp); |
| 827 | bnxt_re_unlock_cqs(qp, flags); | 828 | bnxt_re_unlock_cqs(qp, flags); |
| @@ -1779,7 +1779,7 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp, · 1778 unmodified lines | |||
| 1779 | 1779 | ||
| 1780 | break; | 1780 | break; |
| 1781 | } | 1781 | } |
| 1782 | /* fall thru */ | 1782 | fallthrough; |
| 1783 | case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_IMM: | 1783 | case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_IMM: |
| 1784 | case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_INV: | 1784 | case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_INV: |
| 1785 | { | 1785 | { |
| @@ -2885,7 +2885,7 @@ static int peer_abort(struct c4iw_dev *dev, struct sk_buff *skb) · 2884 unmodified lines | |||
| 2885 | case MORIBUND: | 2885 | case MORIBUND: |
| 2886 | case CLOSING: | 2886 | case CLOSING: |
| 2887 | stop_ep_timer(ep); | 2887 | stop_ep_timer(ep); |
| 2888 | /*FALLTHROUGH*/ | 2888 | fallthrough; |
| 2889 | case FPDU_MODE: | 2889 | case FPDU_MODE: |
| 2890 | if (ep->com.qp && ep->com.qp->srq) { | 2890 | if (ep->com.qp && ep->com.qp->srq) { |
| 2891 | srqidx = ABORT_RSS_SRQIDX_G( | 2891 | srqidx = ABORT_RSS_SRQIDX_G( |
| @@ -3759,7 +3759,7 @@ static void active_ofld_conn_reply(struct c4iw_dev *dev, struct sk_buff *skb, · 867 unmodified lines | |||
| 3759 | send_fw_act_open_req(ep, atid); | 3759 | send_fw_act_open_req(ep, atid); |
| 3760 | return; | 3760 | return; |
| 3761 | } | 3761 | } |
| 3762 | /* fall through */ | 3762 | fallthrough; |
| 3763 | case FW_EADDRINUSE: | 3763 | case FW_EADDRINUSE: |
| 3764 | set_bit(ACT_RETRY_INUSE, &ep->com.history); | 3764 | set_bit(ACT_RETRY_INUSE, &ep->com.history); |
| 3765 | if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) { | 3765 | if (ep->retry_count++ < ACT_OPEN_RETRY_COUNT) { |
| @@ -1165,7 +1165,7 @@ int c4iw_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, · 1164 unmodified lines | |||
| 1165 | break; | 1165 | break; |
| 1166 | } | 1166 | } |
| 1167 | fw_flags |= FW_RI_RDMA_WRITE_WITH_IMMEDIATE; | 1167 | fw_flags |= FW_RI_RDMA_WRITE_WITH_IMMEDIATE; |
| 1168 | /*FALLTHROUGH*/ | 1168 | fallthrough; |
| 1169 | case IB_WR_RDMA_WRITE: | 1169 | case IB_WR_RDMA_WRITE: |
| 1170 | fw_opcode = FW_RI_RDMA_WRITE_WR; | 1170 | fw_opcode = FW_RI_RDMA_WRITE_WR; |
| 1171 | swsqe->opcode = FW_RI_RDMA_WRITE; | 1171 | swsqe->opcode = FW_RI_RDMA_WRITE; |
| @@ -209,7 +209,6 @@ static inline void jcopy(u8 *dest, const u8 *src, u32 n) · 208 unmodified lines | |||
| 209 | fallthrough; | 209 | fallthrough; |
| 210 | case 1: | 210 | case 1: |
| 211 | *dest++ = *src++; | 211 | *dest++ = *src++; |
| 212 | /* fall through */ | ||
| 213 | } | 212 | } |
| 214 | } | 213 | } |
| 215 | 214 | ||
| @@ -3215,6 +3215,7 @@ bool hfi1_tid_rdma_wqe_interlock(struct rvt_qp *qp, struct rvt_swqe *wqe) · 3214 unmodified lines | |||
| 3215 | case IB_WR_ATOMIC_CMP_AND_SWP: | 3215 | case IB_WR_ATOMIC_CMP_AND_SWP: |
| 3216 | case IB_WR_ATOMIC_FETCH_AND_ADD: | 3216 | case IB_WR_ATOMIC_FETCH_AND_ADD: |
| 3217 | case IB_WR_RDMA_WRITE: | 3217 | case IB_WR_RDMA_WRITE: |
| 3218 | case IB_WR_RDMA_WRITE_WITH_IMM: | ||
| 3218 | switch (prev->wr.opcode) { | 3219 | switch (prev->wr.opcode) { |
| 3219 | case IB_WR_TID_RDMA_WRITE: | 3220 | case IB_WR_TID_RDMA_WRITE: |
| 3220 | req = wqe_to_tid_req(prev); | 3221 | req = wqe_to_tid_req(prev); |
| @@ -65,8 +65,6 @@ · 64 unmodified lines | |||
| 65 | #define HNS_ROCE_CQE_WCMD_EMPTY_BIT 0x2 | 65 | #define HNS_ROCE_CQE_WCMD_EMPTY_BIT 0x2 |
| 66 | #define HNS_ROCE_MIN_CQE_CNT 16 | 66 | #define HNS_ROCE_MIN_CQE_CNT 16 |
| 67 | 67 | ||
| 68 | #define HNS_ROCE_RESERVED_SGE 1 | ||
| 69 | |||
| 70 | #define HNS_ROCE_MAX_IRQ_NUM 128 | 68 | #define HNS_ROCE_MAX_IRQ_NUM 128 |
| 71 | 69 | ||
| 72 | #define HNS_ROCE_SGE_IN_WQE 2 | 70 | #define HNS_ROCE_SGE_IN_WQE 2 |
| @@ -535,7 +535,7 @@ static void hns_roce_set_sdb_ext(struct hns_roce_dev *hr_dev, u32 ext_sdb_alept, · 534 unmodified lines | |||
| 535 | roce_write(hr_dev, ROCEE_EXT_DB_SQ_H_REG, val); | 535 | roce_write(hr_dev, ROCEE_EXT_DB_SQ_H_REG, val); |
| 536 | 536 | ||
| 537 | dev_dbg(dev, "ext SDB depth: 0x%x\n", db->ext_db->esdb_dep); | 537 | dev_dbg(dev, "ext SDB depth: 0x%x\n", db->ext_db->esdb_dep); |
| 538 | dev_dbg(dev, "ext SDB threshold: epmty: 0x%x, ful: 0x%x\n", | 538 | dev_dbg(dev, "ext SDB threshold: empty: 0x%x, ful: 0x%x\n", |
| 539 | ext_sdb_alept, ext_sdb_alful); | 539 | ext_sdb_alept, ext_sdb_alful); |
| 540 | } | 540 | } |
| 541 | 541 | ||
| @@ -633,7 +633,7 @@ static int hns_roce_v2_post_recv(struct ib_qp *ibqp, · 632 unmodified lines | |||
| 633 | 633 | ||
| 634 | wqe_idx = (hr_qp->rq.head + nreq) & (hr_qp->rq.wqe_cnt - 1); | 634 | wqe_idx = (hr_qp->rq.head + nreq) & (hr_qp->rq.wqe_cnt - 1); |
| 635 | 635 | ||
| 636 | if (unlikely(wr->num_sge >= hr_qp->rq.max_gs)) { | 636 | if (unlikely(wr->num_sge > hr_qp->rq.max_gs)) { |
| 637 | ibdev_err(ibdev, "rq:num_sge=%d >= qp->sq.max_gs=%d\n", | 637 | ibdev_err(ibdev, "rq:num_sge=%d >= qp->sq.max_gs=%d\n", |
| 638 | wr->num_sge, hr_qp->rq.max_gs); | 638 | wr->num_sge, hr_qp->rq.max_gs); |
| 639 | ret = -EINVAL; | 639 | ret = -EINVAL; |
| @@ -653,7 +653,6 @@ static int hns_roce_v2_post_recv(struct ib_qp *ibqp, · 13 unmodified lines | |||
| 653 | if (wr->num_sge < hr_qp->rq.max_gs) { | 653 | if (wr->num_sge < hr_qp->rq.max_gs) { |
| 654 | dseg->lkey = cpu_to_le32(HNS_ROCE_INVALID_LKEY); | 654 | dseg->lkey = cpu_to_le32(HNS_ROCE_INVALID_LKEY); |
| 655 | dseg->addr = 0; | 655 | dseg->addr = 0; |
| 656 | dseg->len = cpu_to_le32(HNS_ROCE_INVALID_SGE_LENGTH); | ||
| 657 | } | 656 | } |
| 658 | 657 | ||
| 659 | /* rq support inline data */ | 658 | /* rq support inline data */ |
| @@ -787,8 +786,8 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq, · 127 unmodified lines | |||
| 787 | } | 786 | } |
| 788 | 787 | ||
| 789 | if (wr->num_sge < srq->max_gs) { | 788 | if (wr->num_sge < srq->max_gs) { |
| 790 | dseg[i].len = cpu_to_le32(HNS_ROCE_INVALID_SGE_LENGTH); | 789 | dseg[i].len = 0; |
| 791 | dseg[i].lkey = cpu_to_le32(HNS_ROCE_INVALID_LKEY); | 790 | dseg[i].lkey = cpu_to_le32(0x100); |
| 792 | dseg[i].addr = 0; | 791 | dseg[i].addr = 0; |
| 793 | } | 792 | } |
| 794 | 793 | ||
| @@ -5070,7 +5069,7 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr) · 4275 unmodified lines | |||
| 5070 | 5069 | ||
| 5071 | attr->srq_limit = limit_wl; | 5070 | attr->srq_limit = limit_wl; |
| 5072 | attr->max_wr = srq->wqe_cnt - 1; | 5071 | attr->max_wr = srq->wqe_cnt - 1; |
| 5073 | attr->max_sge = srq->max_gs - HNS_ROCE_RESERVED_SGE; | 5072 | attr->max_sge = srq->max_gs; |
| 5074 | 5073 | ||
| 5075 | out: | 5074 | out: |
| 5076 | hns_roce_free_cmd_mailbox(hr_dev, mailbox); | 5075 | hns_roce_free_cmd_mailbox(hr_dev, mailbox); |
| @@ -92,9 +92,7 @@ · 91 unmodified lines | |||
| 92 | #define HNS_ROCE_V2_CQC_TIMER_ENTRY_SZ PAGE_SIZE | 92 | #define HNS_ROCE_V2_CQC_TIMER_ENTRY_SZ PAGE_SIZE |
| 93 | #define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFFF000 | 93 | #define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFFF000 |
| 94 | #define HNS_ROCE_V2_MAX_INNER_MTPT_NUM 2 | 94 | #define HNS_ROCE_V2_MAX_INNER_MTPT_NUM 2 |
| 95 | #define HNS_ROCE_INVALID_LKEY 0x0 | 95 | #define HNS_ROCE_INVALID_LKEY 0x100 |
| 96 | #define HNS_ROCE_INVALID_SGE_LENGTH 0x80000000 | ||
| 97 | |||
| 98 | #define HNS_ROCE_CMQ_TX_TIMEOUT 30000 | 96 | #define HNS_ROCE_CMQ_TX_TIMEOUT 30000 |
| 99 | #define HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE 2 | 97 | #define HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE 2 |
| 100 | #define HNS_ROCE_V2_RSV_QPS 8 | 98 | #define HNS_ROCE_V2_RSV_QPS 8 |
| @@ -386,8 +386,7 @@ static int set_rq_size(struct hns_roce_dev *hr_dev, struct ib_qp_cap *cap, · 385 unmodified lines | |||
| 386 | return -EINVAL; | 386 | return -EINVAL; |
| 387 | } | 387 | } |
| 388 | 388 | ||
| 389 | hr_qp->rq.max_gs = roundup_pow_of_two(max(1U, cap->max_recv_sge) + | 389 | hr_qp->rq.max_gs = roundup_pow_of_two(max(1U, cap->max_recv_sge)); |
| 390 | HNS_ROCE_RESERVED_SGE); | ||
| 391 | 390 | ||
| 392 | if (hr_dev->caps.max_rq_sg <= HNS_ROCE_SGE_IN_WQE) | 391 | if (hr_dev->caps.max_rq_sg <= HNS_ROCE_SGE_IN_WQE) |
| 393 | hr_qp->rq.wqe_shift = ilog2(hr_dev->caps.max_rq_desc_sz); | 392 | hr_qp->rq.wqe_shift = ilog2(hr_dev->caps.max_rq_desc_sz); |
| @@ -402,7 +401,7 @@ static int set_rq_size(struct hns_roce_dev *hr_dev, struct ib_qp_cap *cap, · 8 unmodified lines | |||
| 402 | hr_qp->rq_inl_buf.wqe_cnt = 0; | 401 | hr_qp->rq_inl_buf.wqe_cnt = 0; |
| 403 | 402 | ||
| 404 | cap->max_recv_wr = cnt; | 403 | cap->max_recv_wr = cnt; |
| 405 | cap->max_recv_sge = hr_qp->rq.max_gs - HNS_ROCE_RESERVED_SGE; | 404 | cap->max_recv_sge = hr_qp->rq.max_gs; |
| 406 | 405 | ||
| 407 | return 0; | 406 | return 0; |
| 408 | } | 407 | } |
| @@ -297,7 +297,7 @@ int hns_roce_create_srq(struct ib_srq *ib_srq, · 296 unmodified lines | |||
| 297 | spin_lock_init(&srq->lock); | 297 | spin_lock_init(&srq->lock); |
| 298 | 298 | ||
| 299 | srq->wqe_cnt = roundup_pow_of_two(init_attr->attr.max_wr + 1); | 299 | srq->wqe_cnt = roundup_pow_of_two(init_attr->attr.max_wr + 1); |
| 300 | srq->max_gs = init_attr->attr.max_sge + HNS_ROCE_RESERVED_SGE; | 300 | srq->max_gs = init_attr->attr.max_sge; |
| 301 | 301 | ||
| 302 | if (udata) { | 302 | if (udata) { |
| 303 | ret = ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)); | 303 | ret = ib_copy_from_udata(&ucmd, udata, sizeof(ucmd)); |
| @@ -2443,7 +2443,7 @@ static void i40iw_handle_rst_pkt(struct i40iw_cm_node *cm_node, · 2442 unmodified lines | |||
| 2443 | case I40IW_CM_STATE_FIN_WAIT1: | 2443 | case I40IW_CM_STATE_FIN_WAIT1: |
| 2444 | case I40IW_CM_STATE_LAST_ACK: | 2444 | case I40IW_CM_STATE_LAST_ACK: |
| 2445 | cm_node->cm_id->rem_ref(cm_node->cm_id); | 2445 | cm_node->cm_id->rem_ref(cm_node->cm_id); |
| 2446 | /* fall through */ | 2446 | fallthrough; |
| 2447 | case I40IW_CM_STATE_TIME_WAIT: | 2447 | case I40IW_CM_STATE_TIME_WAIT: |
| 2448 | cm_node->state = I40IW_CM_STATE_CLOSED; | 2448 | cm_node->state = I40IW_CM_STATE_CLOSED; |
| 2449 | i40iw_rem_ref_cm_node(cm_node); | 2449 | i40iw_rem_ref_cm_node(cm_node); |
| @@ -1964,7 +1964,6 @@ static enum i40iw_status_code i40iw_sc_get_next_aeqe(struct i40iw_sc_aeq *aeq, · 1963 unmodified lines | |||
| 1964 | info->out_rdrsp = true; | 1964 | info->out_rdrsp = true; |
| 1965 | break; | 1965 | break; |
| 1966 | case I40IW_AE_SOURCE_RSVD: | 1966 | case I40IW_AE_SOURCE_RSVD: |
| 1967 | /* fallthrough */ | ||
| 1968 | default: | 1967 | default: |
| 1969 | break; | 1968 | break; |
| 1970 | } | 1969 | } |
| @@ -3762,14 +3761,14 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struct i40iw_sc_cqp *cqp, · 1791 unmodified lines | |||
| 3762 | LS_64(1, I40IW_CQPSQ_UPESD_ENTRY_VALID))); | 3761 | LS_64(1, I40IW_CQPSQ_UPESD_ENTRY_VALID))); |
| 3763 | 3762 | ||
| 3764 | set_64bit_val(wqe, 56, info->entry[2].data); | 3763 | set_64bit_val(wqe, 56, info->entry[2].data); |
| 3765 | /* fallthrough */ | 3764 | fallthrough; |
| 3766 | case 2: | 3765 | case 2: |
| 3767 | set_64bit_val(wqe, 32, | 3766 | set_64bit_val(wqe, 32, |
| 3768 | (LS_64(info->entry[1].cmd, I40IW_CQPSQ_UPESD_SDCMD) | | 3767 | (LS_64(info->entry[1].cmd, I40IW_CQPSQ_UPESD_SDCMD) | |
| 3769 | LS_64(1, I40IW_CQPSQ_UPESD_ENTRY_VALID))); | 3768 | LS_64(1, I40IW_CQPSQ_UPESD_ENTRY_VALID))); |
| 3770 | 3769 | ||
| 3771 | set_64bit_val(wqe, 40, info->entry[1].data); | 3770 | set_64bit_val(wqe, 40, info->entry[1].data); |
| 3772 | /* fallthrough */ | 3771 | fallthrough; |
| 3773 | case 1: | 3772 | case 1: |
| 3774 | set_64bit_val(wqe, 0, | 3773 | set_64bit_val(wqe, 0, |
| 3775 | LS_64(info->entry[0].cmd, I40IW_CQPSQ_UPESD_SDCMD)); | 3774 | LS_64(info->entry[0].cmd, I40IW_CQPSQ_UPESD_SDCMD)); |
| @@ -353,7 +353,6 @@ void i40iw_process_aeq(struct i40iw_device *iwdev) · 352 unmodified lines | |||
| 353 | i40iw_cm_disconn(iwqp); | 353 | i40iw_cm_disconn(iwqp); |
| 354 | break; | 354 | break; |
| 355 | case I40IW_AE_BAD_CLOSE: | 355 | case I40IW_AE_BAD_CLOSE: |
| 356 | /* fall through */ | ||
| 357 | case I40IW_AE_RESET_SENT: | 356 | case I40IW_AE_RESET_SENT: |
| 358 | i40iw_next_iw_state(iwqp, I40IW_QP_STATE_ERROR, 1, 0, 0); | 357 | i40iw_next_iw_state(iwqp, I40IW_QP_STATE_ERROR, 1, 0, 0); |
| 359 | i40iw_cm_disconn(iwqp); | 358 | i40iw_cm_disconn(iwqp); |
| @@ -413,7 +412,7 @@ void i40iw_process_aeq(struct i40iw_device *iwdev) · 53 unmodified lines | |||
| 413 | case I40IW_AE_UDA_XMIT_DGRAM_TOO_LONG: | 412 | case I40IW_AE_UDA_XMIT_DGRAM_TOO_LONG: |
| 414 | case I40IW_AE_UDA_XMIT_DGRAM_TOO_SHORT: | 413 | case I40IW_AE_UDA_XMIT_DGRAM_TOO_SHORT: |
| 415 | ctx_info->err_rq_idx_valid = false; | 414 | ctx_info->err_rq_idx_valid = false; |
| 416 | /* fall through */ | 415 | fallthrough; |
| 417 | default: | 416 | default: |
| 418 | if (!info->sq && ctx_info->err_rq_idx_valid) { | 417 | if (!info->sq && ctx_info->err_rq_idx_valid) { |
| 419 | ctx_info->err_rq_idx = info->wqe_idx; | 418 | ctx_info->err_rq_idx = info->wqe_idx; |
| @@ -1489,36 +1489,35 @@ static void i40iw_deinit_device(struct i40iw_device *iwdev) · 1488 unmodified lines | |||
| 1489 | iwdev->iw_status = 0; | 1489 | iwdev->iw_status = 0; |
| 1490 | i40iw_port_ibevent(iwdev); | 1490 | i40iw_port_ibevent(iwdev); |
| 1491 | i40iw_destroy_rdma_device(iwdev->iwibdev); | 1491 | i40iw_destroy_rdma_device(iwdev->iwibdev); |
| 1492 | /* fallthrough */ | 1492 | fallthrough; |
| 1493 | case IP_ADDR_REGISTERED: | 1493 | case IP_ADDR_REGISTERED: |
| 1494 | if (!iwdev->reset) | 1494 | if (!iwdev->reset) |
| 1495 | i40iw_del_macip_entry(iwdev, (u8)iwdev->mac_ip_table_idx); | 1495 | i40iw_del_macip_entry(iwdev, (u8)iwdev->mac_ip_table_idx); |
| 1496 | /* fallthrough */ | 1496 | fallthrough; |
| 1497 | /* fallthrough */ | ||
| 1498 | case PBLE_CHUNK_MEM: | 1497 | case PBLE_CHUNK_MEM: |
| 1499 | i40iw_destroy_pble_pool(dev, iwdev->pble_rsrc); | 1498 | i40iw_destroy_pble_pool(dev, iwdev->pble_rsrc); |
| 1500 | /* fallthrough */ | 1499 | fallthrough; |
| 1501 | case CEQ_CREATED: | 1500 | case CEQ_CREATED: |
| 1502 | i40iw_dele_ceqs(iwdev); | 1501 | i40iw_dele_ceqs(iwdev); |
| 1503 | /* fallthrough */ | 1502 | fallthrough; |
| 1504 | case AEQ_CREATED: | 1503 | case AEQ_CREATED: |
| 1505 | i40iw_destroy_aeq(iwdev); | 1504 | i40iw_destroy_aeq(iwdev); |
| 1506 | /* fallthrough */ | 1505 | fallthrough; |
| 1507 | case IEQ_CREATED: | 1506 | case IEQ_CREATED: |
| 1508 | i40iw_puda_dele_resources(&iwdev->vsi, I40IW_PUDA_RSRC_TYPE_IEQ, iwdev->reset); | 1507 | i40iw_puda_dele_resources(&iwdev->vsi, I40IW_PUDA_RSRC_TYPE_IEQ, iwdev->reset); |
| 1509 | /* fallthrough */ | 1508 | fallthrough; |
| 1510 | case ILQ_CREATED: | 1509 | case ILQ_CREATED: |
| 1511 | i40iw_puda_dele_resources(&iwdev->vsi, I40IW_PUDA_RSRC_TYPE_ILQ, iwdev->reset); | 1510 | i40iw_puda_dele_resources(&iwdev->vsi, I40IW_PUDA_RSRC_TYPE_ILQ, iwdev->reset); |
| 1512 | /* fallthrough */ | 1511 | fallthrough; |
| 1513 | case CCQ_CREATED: | 1512 | case CCQ_CREATED: |
| 1514 | i40iw_destroy_ccq(iwdev); | 1513 | i40iw_destroy_ccq(iwdev); |
| 1515 | /* fallthrough */ | 1514 | fallthrough; |
| 1516 | case HMC_OBJS_CREATED: | 1515 | case HMC_OBJS_CREATED: |
| 1517 | i40iw_del_hmc_objects(dev, dev->hmc_info, true, iwdev->reset); | 1516 | i40iw_del_hmc_objects(dev, dev->hmc_info, true, iwdev->reset); |
| 1518 | /* fallthrough */ | 1517 | fallthrough; |
| 1519 | case CQP_CREATED: | 1518 | case CQP_CREATED: |
| 1520 | i40iw_destroy_cqp(iwdev, true); | 1519 | i40iw_destroy_cqp(iwdev, true); |
| 1521 | /* fallthrough */ | 1520 | fallthrough; |
| 1522 | case INITIAL_STATE: | 1521 | case INITIAL_STATE: |
| 1523 | i40iw_cleanup_cm_core(&iwdev->cm_core); | 1522 | i40iw_cleanup_cm_core(&iwdev->cm_core); |
| 1524 | if (iwdev->vsi.pestat) { | 1523 | if (iwdev->vsi.pestat) { |
| @@ -1528,7 +1527,6 @@ static void i40iw_deinit_device(struct i40iw_device *iwdev) · 3 unmodified lines | |||
| 1528 | i40iw_del_init_mem(iwdev); | 1527 | i40iw_del_init_mem(iwdev); |
| 1529 | break; | 1528 | break; |
| 1530 | case INVALID_STATE: | 1529 | case INVALID_STATE: |
| 1531 | /* fallthrough */ | ||
| 1532 | default: | 1530 | default: |
| 1533 | i40iw_pr_err("bad init_state = %d\n", iwdev->init_state); | 1531 | i40iw_pr_err("bad init_state = %d\n", iwdev->init_state); |
| 1534 | break; | 1532 | break; |
| @@ -814,13 +814,13 @@ void i40iw_puda_dele_resources(struct i40iw_sc_vsi *vsi, · 813 unmodified lines | |||
| 814 | switch (rsrc->completion) { | 814 | switch (rsrc->completion) { |
| 815 | case PUDA_HASH_CRC_COMPLETE: | 815 | case PUDA_HASH_CRC_COMPLETE: |
| 816 | i40iw_free_hash_desc(rsrc->hash_desc); | 816 | i40iw_free_hash_desc(rsrc->hash_desc); |
| 817 | /* fall through */ | 817 | fallthrough; |
| 818 | case PUDA_QP_CREATED: | 818 | case PUDA_QP_CREATED: |
| 819 | if (!reset) | 819 | if (!reset) |
| 820 | i40iw_puda_free_qp(rsrc); | 820 | i40iw_puda_free_qp(rsrc); |
| 821 | 821 | ||
| 822 | i40iw_free_dma_mem(dev->hw, &rsrc->qpmem); | 822 | i40iw_free_dma_mem(dev->hw, &rsrc->qpmem); |
| 823 | /* fallthrough */ | 823 | fallthrough; |
| 824 | case PUDA_CQ_CREATED: | 824 | case PUDA_CQ_CREATED: |
| 825 | if (!reset) | 825 | if (!reset) |
| 826 | i40iw_puda_free_cq(rsrc); | 826 | i40iw_puda_free_cq(rsrc); |
| @@ -190,9 +190,8 @@ int i40iw_inetaddr_event(struct notifier_block *notifier, · 189 unmodified lines | |||
| 190 | switch (event) { | 190 | switch (event) { |
| 191 | case NETDEV_DOWN: | 191 | case NETDEV_DOWN: |
| 192 | action = I40IW_ARP_DELETE; | 192 | action = I40IW_ARP_DELETE; |
| 193 | /* Fall through */ | 193 | fallthrough; |
| 194 | case NETDEV_UP: | 194 | case NETDEV_UP: |
| 195 | /* Fall through */ | ||
| 196 | case NETDEV_CHANGEADDR: | 195 | case NETDEV_CHANGEADDR: |
| 197 | 196 | ||
| 198 | /* Just skip if no need to handle ARP cache */ | 197 | /* Just skip if no need to handle ARP cache */ |
| @@ -247,9 +246,8 @@ int i40iw_inet6addr_event(struct notifier_block *notifier, · 48 unmodified lines | |||
| 247 | switch (event) { | 246 | switch (event) { |
| 248 | case NETDEV_DOWN: | 247 | case NETDEV_DOWN: |
| 249 | action = I40IW_ARP_DELETE; | 248 | action = I40IW_ARP_DELETE; |
| 250 | /* Fall through */ | 249 | fallthrough; |
| 251 | case NETDEV_UP: | 250 | case NETDEV_UP: |
| 252 | /* Fall through */ | ||
| 253 | case NETDEV_CHANGEADDR: | 251 | case NETDEV_CHANGEADDR: |
| 254 | i40iw_manage_arp_cache(iwdev, | 252 | i40iw_manage_arp_cache(iwdev, |
| 255 | netdev->dev_addr, | 253 | netdev->dev_addr, |
| @@ -344,7 +342,7 @@ int i40iw_netdevice_event(struct notifier_block *notifier, · 88 unmodified lines | |||
| 344 | switch (event) { | 342 | switch (event) { |
| 345 | case NETDEV_DOWN: | 343 | case NETDEV_DOWN: |
| 346 | iwdev->iw_status = 0; | 344 | iwdev->iw_status = 0; |
| 347 | /* Fall through */ | 345 | fallthrough; |
| 348 | case NETDEV_UP: | 346 | case NETDEV_UP: |
| 349 | i40iw_port_ibevent(iwdev); | 347 | i40iw_port_ibevent(iwdev); |
| 350 | break; | 348 | break; |
| @@ -810,7 +810,7 @@ void i40iw_hw_modify_qp(struct i40iw_device *iwdev, struct i40iw_qp *iwqp, · 809 unmodified lines | |||
| 810 | case I40IW_QP_STATE_RTS: | 810 | case I40IW_QP_STATE_RTS: |
| 811 | if (iwqp->iwarp_state == I40IW_QP_STATE_IDLE) | 811 | if (iwqp->iwarp_state == I40IW_QP_STATE_IDLE) |
| 812 | i40iw_send_reset(iwqp->cm_node); | 812 | i40iw_send_reset(iwqp->cm_node); |
| 813 | /* fall through */ | 813 | fallthrough; |
| 814 | case I40IW_QP_STATE_IDLE: | 814 | case I40IW_QP_STATE_IDLE: |
| 815 | case I40IW_QP_STATE_TERMINATE: | 815 | case I40IW_QP_STATE_TERMINATE: |
| 816 | case I40IW_QP_STATE_CLOSING: | 816 | case I40IW_QP_STATE_CLOSING: |
| @@ -2144,7 +2144,6 @@ static int i40iw_post_send(struct ib_qp *ibqp, · 1327 unmodified lines | |||
| 2144 | 2144 | ||
| 2145 | switch (ib_wr->opcode) { | 2145 | switch (ib_wr->opcode) { |
| 2146 | case IB_WR_SEND: | 2146 | case IB_WR_SEND: |
| 2147 | /* fall-through */ | ||
| 2148 | case IB_WR_SEND_WITH_INV: | 2147 | case IB_WR_SEND_WITH_INV: |
| 2149 | if (ib_wr->opcode == IB_WR_SEND) { | 2148 | if (ib_wr->opcode == IB_WR_SEND) { |
| 2150 | if (ib_wr->send_flags & IB_SEND_SOLICITED) | 2149 | if (ib_wr->send_flags & IB_SEND_SOLICITED) |
| @@ -2201,7 +2200,7 @@ static int i40iw_post_send(struct ib_qp *ibqp, · 50 unmodified lines | |||
| 2201 | break; | 2200 | break; |
| 2202 | case IB_WR_RDMA_READ_WITH_INV: | 2201 | case IB_WR_RDMA_READ_WITH_INV: |
| 2203 | inv_stag = true; | 2202 | inv_stag = true; |
| 2204 | /* fall-through*/ | 2203 | fallthrough; |
| 2205 | case IB_WR_RDMA_READ: | 2204 | case IB_WR_RDMA_READ: |
| 2206 | if (ib_wr->num_sge > I40IW_MAX_SGE_RD) { | 2205 | if (ib_wr->num_sge > I40IW_MAX_SGE_RD) { |
| 2207 | err = -EINVAL; | 2206 | err = -EINVAL; |
| @@ -765,13 +765,13 @@ repoll: · 764 unmodified lines | |||
| 765 | switch (cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) { | 765 | switch (cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) { |
| 766 | case MLX4_OPCODE_RDMA_WRITE_IMM: | 766 | case MLX4_OPCODE_RDMA_WRITE_IMM: |
| 767 | wc->wc_flags |= IB_WC_WITH_IMM; | 767 | wc->wc_flags |= IB_WC_WITH_IMM; |
| 768 | /* fall through */ | 768 | fallthrough; |
| 769 | case MLX4_OPCODE_RDMA_WRITE: | 769 | case MLX4_OPCODE_RDMA_WRITE: |
| 770 | wc->opcode = IB_WC_RDMA_WRITE; | 770 | wc->opcode = IB_WC_RDMA_WRITE; |
| 771 | break; | 771 | break; |
| 772 | case MLX4_OPCODE_SEND_IMM: | 772 | case MLX4_OPCODE_SEND_IMM: |
| 773 | wc->wc_flags |= IB_WC_WITH_IMM; | 773 | wc->wc_flags |= IB_WC_WITH_IMM; |
| 774 | /* fall through */ | 774 | fallthrough; |
| 775 | case MLX4_OPCODE_SEND: | 775 | case MLX4_OPCODE_SEND: |
| 776 | case MLX4_OPCODE_SEND_INVAL: | 776 | case MLX4_OPCODE_SEND_INVAL: |
| 777 | wc->opcode = IB_WC_SEND; | 777 | wc->opcode = IB_WC_SEND; |
| @@ -944,7 +944,7 @@ int mlx4_ib_mcg_multiplex_handler(struct ib_device *ibdev, int port, · 943 unmodified lines | |||
| 944 | switch (sa_mad->mad_hdr.method) { | 944 | switch (sa_mad->mad_hdr.method) { |
| 945 | case IB_MGMT_METHOD_SET: | 945 | case IB_MGMT_METHOD_SET: |
| 946 | may_create = 1; | 946 | may_create = 1; |
| 947 | /* fall through */ | 947 | fallthrough; |
| 948 | case IB_SA_METHOD_DELETE: | 948 | case IB_SA_METHOD_DELETE: |
| 949 | req = kzalloc(sizeof *req, GFP_KERNEL); | 949 | req = kzalloc(sizeof *req, GFP_KERNEL); |
| 950 | if (!req) | 950 | if (!req) |
| @@ -1578,12 +1578,12 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd, · 1577 unmodified lines | |||
| 1578 | pd = to_mxrcd(init_attr->xrcd)->pd; | 1578 | pd = to_mxrcd(init_attr->xrcd)->pd; |
| 1579 | xrcdn = to_mxrcd(init_attr->xrcd)->xrcdn; | 1579 | xrcdn = to_mxrcd(init_attr->xrcd)->xrcdn; |
| 1580 | init_attr->send_cq = to_mxrcd(init_attr->xrcd)->cq; | 1580 | init_attr->send_cq = to_mxrcd(init_attr->xrcd)->cq; |
| 1581 | /* fall through */ | 1581 | fallthrough; |
| 1582 | case IB_QPT_XRC_INI: | 1582 | case IB_QPT_XRC_INI: |
| 1583 | if (!(to_mdev(pd->device)->dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC)) | 1583 | if (!(to_mdev(pd->device)->dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC)) |
| 1584 | return ERR_PTR(-ENOSYS); | 1584 | return ERR_PTR(-ENOSYS); |
| 1585 | init_attr->recv_cq = init_attr->send_cq; | 1585 | init_attr->recv_cq = init_attr->send_cq; |
| 1586 | /* fall through */ | 1586 | fallthrough; |
| 1587 | case IB_QPT_RC: | 1587 | case IB_QPT_RC: |
| 1588 | case IB_QPT_UC: | 1588 | case IB_QPT_UC: |
| 1589 | case IB_QPT_RAW_PACKET: | 1589 | case IB_QPT_RAW_PACKET: |
| @@ -1592,7 +1592,7 @@ static struct ib_qp *_mlx4_ib_create_qp(struct ib_pd *pd, · 2 unmodified lines | |||
| 1592 | return ERR_PTR(-ENOMEM); | 1592 | return ERR_PTR(-ENOMEM); |
| 1593 | qp->pri.vid = 0xFFFF; | 1593 | qp->pri.vid = 0xFFFF; |
| 1594 | qp->alt.vid = 0xFFFF; | 1594 | qp->alt.vid = 0xFFFF; |
| 1595 | /* fall through */ | 1595 | fallthrough; |
| 1596 | case IB_QPT_UD: | 1596 | case IB_QPT_UD: |
| 1597 | { | 1597 | { |
| 1598 | err = create_qp_common(pd, init_attr, udata, 0, &qp); | 1598 | err = create_qp_common(pd, init_attr, udata, 0, &qp); |
| @@ -121,13 +121,13 @@ static void handle_good_req(struct ib_wc *wc, struct mlx5_cqe64 *cqe, · 120 unmodified lines | |||
| 121 | switch (be32_to_cpu(cqe->sop_drop_qpn) >> 24) { | 121 | switch (be32_to_cpu(cqe->sop_drop_qpn) >> 24) { |
| 122 | case MLX5_OPCODE_RDMA_WRITE_IMM: | 122 | case MLX5_OPCODE_RDMA_WRITE_IMM: |
| 123 | wc->wc_flags |= IB_WC_WITH_IMM; | 123 | wc->wc_flags |= IB_WC_WITH_IMM; |
| 124 | /* fall through */ | 124 | fallthrough; |
| 125 | case MLX5_OPCODE_RDMA_WRITE: | 125 | case MLX5_OPCODE_RDMA_WRITE: |
| 126 | wc->opcode = IB_WC_RDMA_WRITE; | 126 | wc->opcode = IB_WC_RDMA_WRITE; |
| 127 | break; | 127 | break; |
| 128 | case MLX5_OPCODE_SEND_IMM: | 128 | case MLX5_OPCODE_SEND_IMM: |
| 129 | wc->wc_flags |= IB_WC_WITH_IMM; | 129 | wc->wc_flags |= IB_WC_WITH_IMM; |
| 130 | /* fall through */ | 130 | fallthrough; |
| 131 | case MLX5_OPCODE_SEND: | 131 | case MLX5_OPCODE_SEND: |
| 132 | case MLX5_OPCODE_SEND_INVAL: | 132 | case MLX5_OPCODE_SEND_INVAL: |
| 133 | wc->opcode = IB_WC_SEND; | 133 | wc->opcode = IB_WC_SEND; |
| @@ -250,9 +250,8 @@ int mlx5_ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, · 249 unmodified lines | |||
| 250 | if (MLX5_CAP_GEN(dev->mdev, vport_counters) && | 250 | if (MLX5_CAP_GEN(dev->mdev, vport_counters) && |
| 251 | method == IB_MGMT_METHOD_GET) | 251 | method == IB_MGMT_METHOD_GET) |
| 252 | return process_pma_cmd(dev, port_num, in, out); | 252 | return process_pma_cmd(dev, port_num, in, out); |
| 253 | /* fallthrough */ | 253 | fallthrough; |
| 254 | case MLX5_IB_VENDOR_CLASS1: | 254 | case MLX5_IB_VENDOR_CLASS1: |
| 255 | /* fallthrough */ | ||
| 256 | case MLX5_IB_VENDOR_CLASS2: | 255 | case MLX5_IB_VENDOR_CLASS2: |
| 257 | case IB_MGMT_CLASS_CONG_MGMT: { | 256 | case IB_MGMT_CLASS_CONG_MGMT: { |
| 258 | if (method != IB_MGMT_METHOD_GET && | 257 | if (method != IB_MGMT_METHOD_GET && |
| @@ -2872,7 +2872,7 @@ static void mlx5_ib_handle_event(struct work_struct *_work) · 2871 unmodified lines | |||
| 2872 | break; | 2872 | break; |
| 2873 | case MLX5_EVENT_TYPE_GENERAL_EVENT: | 2873 | case MLX5_EVENT_TYPE_GENERAL_EVENT: |
| 2874 | handle_general_event(ibdev, work->param, &ibev); | 2874 | handle_general_event(ibdev, work->param, &ibev); |
| 2875 | /* fall through */ | 2875 | fallthrough; |
| 2876 | default: | 2876 | default: |
| 2877 | goto out; | 2877 | goto out; |
| 2878 | } | 2878 | } |
| @@ -416,7 +416,7 @@ static int sq_overhead(struct ib_qp_init_attr *attr) · 415 unmodified lines | |||
| 416 | switch (attr->qp_type) { | 416 | switch (attr->qp_type) { |
| 417 | case IB_QPT_XRC_INI: | 417 | case IB_QPT_XRC_INI: |
| 418 | size += sizeof(struct mlx5_wqe_xrc_seg); | 418 | size += sizeof(struct mlx5_wqe_xrc_seg); |
| 419 | /* fall through */ | 419 | fallthrough; |
| 420 | case IB_QPT_RC: | 420 | case IB_QPT_RC: |
| 421 | size += sizeof(struct mlx5_wqe_ctrl_seg) + | 421 | size += sizeof(struct mlx5_wqe_ctrl_seg) + |
| 422 | max(sizeof(struct mlx5_wqe_atomic_seg) + | 422 | max(sizeof(struct mlx5_wqe_atomic_seg) + |
| @@ -441,7 +441,7 @@ static int sq_overhead(struct ib_qp_init_attr *attr) · 18 unmodified lines | |||
| 441 | if (attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO) | 441 | if (attr->create_flags & IB_QP_CREATE_IPOIB_UD_LSO) |
| 442 | size += sizeof(struct mlx5_wqe_eth_pad) + | 442 | size += sizeof(struct mlx5_wqe_eth_pad) + |
| 443 | sizeof(struct mlx5_wqe_eth_seg); | 443 | sizeof(struct mlx5_wqe_eth_seg); |
| 444 | /* fall through */ | 444 | fallthrough; |
| 445 | case IB_QPT_SMI: | 445 | case IB_QPT_SMI: |
| 446 | case MLX5_IB_QPT_HW_GSI: | 446 | case MLX5_IB_QPT_HW_GSI: |
| 447 | size += sizeof(struct mlx5_wqe_ctrl_seg) + | 447 | size += sizeof(struct mlx5_wqe_ctrl_seg) + |
| @@ -115,7 +115,7 @@ static u8 ib_rate_to_memfree(u8 req_rate, u8 cur_rate) · 114 unmodified lines | |||
| 115 | switch ((cur_rate - 1) / req_rate) { | 115 | switch ((cur_rate - 1) / req_rate) { |
| 116 | case 0: return MTHCA_RATE_MEMFREE_FULL; | 116 | case 0: return MTHCA_RATE_MEMFREE_FULL; |
| 117 | case 1: return MTHCA_RATE_MEMFREE_HALF; | 117 | case 1: return MTHCA_RATE_MEMFREE_HALF; |
| 118 | case 2: /* fall through */ | 118 | case 2: |
| 119 | case 3: return MTHCA_RATE_MEMFREE_QUARTER; | 119 | case 3: return MTHCA_RATE_MEMFREE_QUARTER; |
| 120 | default: return MTHCA_RATE_MEMFREE_EIGHTH; | 120 | default: return MTHCA_RATE_MEMFREE_EIGHTH; |
| 121 | } | 121 | } |
| @@ -2134,7 +2134,7 @@ int ocrdma_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, · 2133 unmodified lines | |||
| 2134 | case IB_WR_SEND_WITH_IMM: | 2134 | case IB_WR_SEND_WITH_IMM: |
| 2135 | hdr->cw |= (OCRDMA_FLAG_IMM << OCRDMA_WQE_FLAGS_SHIFT); | 2135 | hdr->cw |= (OCRDMA_FLAG_IMM << OCRDMA_WQE_FLAGS_SHIFT); |
| 2136 | hdr->immdt = ntohl(wr->ex.imm_data); | 2136 | hdr->immdt = ntohl(wr->ex.imm_data); |
| 2137 | /* fall through */ | 2137 | fallthrough; |
| 2138 | case IB_WR_SEND: | 2138 | case IB_WR_SEND: |
| 2139 | hdr->cw |= (OCRDMA_SEND << OCRDMA_WQE_OPCODE_SHIFT); | 2139 | hdr->cw |= (OCRDMA_SEND << OCRDMA_WQE_OPCODE_SHIFT); |
| 2140 | ocrdma_build_send(qp, hdr, wr); | 2140 | ocrdma_build_send(qp, hdr, wr); |
| @@ -2148,7 +2148,7 @@ int ocrdma_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, · 7 unmodified lines | |||
| 2148 | case IB_WR_RDMA_WRITE_WITH_IMM: | 2148 | case IB_WR_RDMA_WRITE_WITH_IMM: |
| 2149 | hdr->cw |= (OCRDMA_FLAG_IMM << OCRDMA_WQE_FLAGS_SHIFT); | 2149 | hdr->cw |= (OCRDMA_FLAG_IMM << OCRDMA_WQE_FLAGS_SHIFT); |
| 2150 | hdr->immdt = ntohl(wr->ex.imm_data); | 2150 | hdr->immdt = ntohl(wr->ex.imm_data); |
| 2151 | /* fall through */ | 2151 | fallthrough; |
| 2152 | case IB_WR_RDMA_WRITE: | 2152 | case IB_WR_RDMA_WRITE: |
| 2153 | hdr->cw |= (OCRDMA_WRITE << OCRDMA_WQE_OPCODE_SHIFT); | 2153 | hdr->cw |= (OCRDMA_WRITE << OCRDMA_WQE_OPCODE_SHIFT); |
| 2154 | status = ocrdma_build_write(qp, hdr, wr); | 2154 | status = ocrdma_build_write(qp, hdr, wr); |
| @@ -3528,7 +3528,7 @@ static int __qedr_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, · 3527 unmodified lines | |||
| 3528 | break; | 3528 | break; |
| 3529 | case IB_WR_RDMA_READ_WITH_INV: | 3529 | case IB_WR_RDMA_READ_WITH_INV: |
| 3530 | SET_FIELD2(wqe->flags, RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG, 1); | 3530 | SET_FIELD2(wqe->flags, RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG, 1); |
| 3531 | /* fallthrough -- same is identical to RDMA READ */ | 3531 | fallthrough; /* same is identical to RDMA READ */ |
| 3532 | 3532 | ||
| 3533 | case IB_WR_RDMA_READ: | 3533 | case IB_WR_RDMA_READ: |
| 3534 | wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_RD; | 3534 | wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_RD; |
| @@ -2973,11 +2973,11 @@ static u32 qib_6120_iblink_state(u64 ibcs) · 2972 unmodified lines | |||
| 2973 | state = IB_PORT_ARMED; | 2973 | state = IB_PORT_ARMED; |
| 2974 | break; | 2974 | break; |
| 2975 | case IB_6120_L_STATE_ACTIVE: | 2975 | case IB_6120_L_STATE_ACTIVE: |
| 2976 | /* fall through */ | ||
| 2977 | case IB_6120_L_STATE_ACT_DEFER: | 2976 | case IB_6120_L_STATE_ACT_DEFER: |
| 2978 | state = IB_PORT_ACTIVE; | 2977 | state = IB_PORT_ACTIVE; |
| 2979 | break; | 2978 | break; |
| 2980 | default: /* fall through */ | 2979 | default: |
| 2980 | fallthrough; | ||
| 2981 | case IB_6120_L_STATE_DOWN: | 2981 | case IB_6120_L_STATE_DOWN: |
| 2982 | state = IB_PORT_DOWN; | 2982 | state = IB_PORT_DOWN; |
| 2983 | break; | 2983 | break; |
| @@ -3586,11 +3586,11 @@ static u32 qib_7220_iblink_state(u64 ibcs) · 3585 unmodified lines | |||
| 3586 | state = IB_PORT_ARMED; | 3586 | state = IB_PORT_ARMED; |
| 3587 | break; | 3587 | break; |
| 3588 | case IB_7220_L_STATE_ACTIVE: | 3588 | case IB_7220_L_STATE_ACTIVE: |
| 3589 | /* fall through */ | ||
| 3590 | case IB_7220_L_STATE_ACT_DEFER: | 3589 | case IB_7220_L_STATE_ACT_DEFER: |
| 3591 | state = IB_PORT_ACTIVE; | 3590 | state = IB_PORT_ACTIVE; |
| 3592 | break; | 3591 | break; |
| 3593 | default: /* fall through */ | 3592 | default: |
| 3593 | fallthrough; | ||
| 3594 | case IB_7220_L_STATE_DOWN: | 3594 | case IB_7220_L_STATE_DOWN: |
| 3595 | state = IB_PORT_DOWN; | 3595 | state = IB_PORT_DOWN; |
| 3596 | break; | 3596 | break; |
| @@ -5508,11 +5508,11 @@ static u32 qib_7322_iblink_state(u64 ibcs) · 5507 unmodified lines | |||
| 5508 | state = IB_PORT_ARMED; | 5508 | state = IB_PORT_ARMED; |
| 5509 | break; | 5509 | break; |
| 5510 | case IB_7322_L_STATE_ACTIVE: | 5510 | case IB_7322_L_STATE_ACTIVE: |
| 5511 | /* fall through */ | ||
| 5512 | case IB_7322_L_STATE_ACT_DEFER: | 5511 | case IB_7322_L_STATE_ACT_DEFER: |
| 5513 | state = IB_PORT_ACTIVE; | 5512 | state = IB_PORT_ACTIVE; |
| 5514 | break; | 5513 | break; |
| 5515 | default: /* fall through */ | 5514 | default: |
| 5515 | fallthrough; | ||
| 5516 | case IB_7322_L_STATE_DOWN: | 5516 | case IB_7322_L_STATE_DOWN: |
| 5517 | state = IB_PORT_DOWN; | 5517 | state = IB_PORT_DOWN; |
| 5518 | break; | 5518 | break; |
| @@ -6533,7 +6533,7 @@ static int qib_init_7322_variables(struct qib_devdata *dd) · 1014 unmodified lines | |||
| 6533 | "Invalid num_vls %u, using 4 VLs\n", | 6533 | "Invalid num_vls %u, using 4 VLs\n", |
| 6534 | qib_num_cfg_vls); | 6534 | qib_num_cfg_vls); |
| 6535 | qib_num_cfg_vls = 4; | 6535 | qib_num_cfg_vls = 4; |
| 6536 | /* fall through */ | 6536 | fallthrough; |
| 6537 | case 4: | 6537 | case 4: |
| 6538 | ppd->vls_supported = IB_VL_VL0_3; | 6538 | ppd->vls_supported = IB_VL_VL0_3; |
| 6539 | break; | 6539 | break; |
| @@ -433,7 +433,7 @@ static int check_mkey(struct qib_ibport *ibp, struct ib_smp *smp, int mad_flags) · 432 unmodified lines | |||
| 433 | /* Bad mkey not a violation below level 2 */ | 433 | /* Bad mkey not a violation below level 2 */ |
| 434 | if (ibp->rvp.mkeyprot < 2) | 434 | if (ibp->rvp.mkeyprot < 2) |
| 435 | break; | 435 | break; |
| 436 | /* fall through */ | 436 | fallthrough; |
| 437 | case IB_MGMT_METHOD_SET: | 437 | case IB_MGMT_METHOD_SET: |
| 438 | case IB_MGMT_METHOD_TRAP_REPRESS: | 438 | case IB_MGMT_METHOD_TRAP_REPRESS: |
| 439 | if (ibp->rvp.mkey_violations != 0xFFFF) | 439 | if (ibp->rvp.mkey_violations != 0xFFFF) |
| @@ -828,7 +828,7 @@ static int subn_set_portinfo(struct ib_smp *smp, struct ib_device *ibdev, · 388 unmodified lines | |||
| 828 | case IB_PORT_NOP: | 828 | case IB_PORT_NOP: |
| 829 | if (lstate == 0) | 829 | if (lstate == 0) |
| 830 | break; | 830 | break; |
| 831 | /* FALLTHROUGH */ | 831 | fallthrough; |
| 832 | case IB_PORT_DOWN: | 832 | case IB_PORT_DOWN: |
| 833 | if (lstate == 0) | 833 | if (lstate == 0) |
| 834 | lstate = QIB_IB_LINKDOWN_ONLY; | 834 | lstate = QIB_IB_LINKDOWN_ONLY; |
| @@ -1928,7 +1928,7 @@ static int process_subn(struct ib_device *ibdev, int mad_flags, · 1093 unmodified lines | |||
| 1928 | ret = IB_MAD_RESULT_SUCCESS; | 1928 | ret = IB_MAD_RESULT_SUCCESS; |
| 1929 | goto bail; | 1929 | goto bail; |
| 1930 | } | 1930 | } |
| 1931 | /* FALLTHROUGH */ | 1931 | fallthrough; |
| 1932 | default: | 1932 | default: |
| 1933 | smp->status |= IB_SMP_UNSUP_METH_ATTR; | 1933 | smp->status |= IB_SMP_UNSUP_METH_ATTR; |
| 1934 | ret = reply(smp); | 1934 | ret = reply(smp); |
| @@ -1962,7 +1962,7 @@ static int process_subn(struct ib_device *ibdev, int mad_flags, · 27 unmodified lines | |||
| 1962 | ret = IB_MAD_RESULT_SUCCESS; | 1962 | ret = IB_MAD_RESULT_SUCCESS; |
| 1963 | goto bail; | 1963 | goto bail; |
| 1964 | } | 1964 | } |
| 1965 | /* FALLTHROUGH */ | 1965 | fallthrough; |
| 1966 | default: | 1966 | default: |
| 1967 | smp->status |= IB_SMP_UNSUP_METH_ATTR; | 1967 | smp->status |= IB_SMP_UNSUP_METH_ATTR; |
| 1968 | ret = reply(smp); | 1968 | ret = reply(smp); |
| @@ -2322,7 +2322,7 @@ static int process_cc(struct ib_device *ibdev, int mad_flags, · 353 unmodified lines | |||
| 2322 | ret = cc_get_congestion_control_table(ccp, ibdev, port); | 2322 | ret = cc_get_congestion_control_table(ccp, ibdev, port); |
| 2323 | goto bail; | 2323 | goto bail; |
| 2324 | 2324 | ||
| 2325 | /* FALLTHROUGH */ | 2325 | fallthrough; |
| 2326 | default: | 2326 | default: |
| 2327 | ccp->status |= IB_SMP_UNSUP_METH_ATTR; | 2327 | ccp->status |= IB_SMP_UNSUP_METH_ATTR; |
| 2328 | ret = reply((struct ib_smp *) ccp); | 2328 | ret = reply((struct ib_smp *) ccp); |
| @@ -2339,7 +2339,7 @@ static int process_cc(struct ib_device *ibdev, int mad_flags, · 10 unmodified lines | |||
| 2339 | ret = cc_set_congestion_control_table(ccp, ibdev, port); | 2339 | ret = cc_set_congestion_control_table(ccp, ibdev, port); |
| 2340 | goto bail; | 2340 | goto bail; |
| 2341 | 2341 | ||
| 2342 | /* FALLTHROUGH */ | 2342 | fallthrough; |
| 2343 | default: | 2343 | default: |
| 2344 | ccp->status |= IB_SMP_UNSUP_METH_ATTR; | 2344 | ccp->status |= IB_SMP_UNSUP_METH_ATTR; |
| 2345 | ret = reply((struct ib_smp *) ccp); | 2345 | ret = reply((struct ib_smp *) ccp); |
| @@ -83,7 +83,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp, · 82 unmodified lines | |||
| 83 | rvt_put_mr(e->rdma_sge.mr); | 83 | rvt_put_mr(e->rdma_sge.mr); |
| 84 | e->rdma_sge.mr = NULL; | 84 | e->rdma_sge.mr = NULL; |
| 85 | } | 85 | } |
| 86 | /* FALLTHROUGH */ | 86 | fallthrough; |
| 87 | case OP(ATOMIC_ACKNOWLEDGE): | 87 | case OP(ATOMIC_ACKNOWLEDGE): |
| 88 | /* | 88 | /* |
| 89 | * We can increment the tail pointer now that the last | 89 | * We can increment the tail pointer now that the last |
| @@ -92,7 +92,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp, · 2 unmodified lines | |||
| 92 | */ | 92 | */ |
| 93 | if (++qp->s_tail_ack_queue > QIB_MAX_RDMA_ATOMIC) | 93 | if (++qp->s_tail_ack_queue > QIB_MAX_RDMA_ATOMIC) |
| 94 | qp->s_tail_ack_queue = 0; | 94 | qp->s_tail_ack_queue = 0; |
| 95 | /* FALLTHROUGH */ | 95 | fallthrough; |
| 96 | case OP(SEND_ONLY): | 96 | case OP(SEND_ONLY): |
| 97 | case OP(ACKNOWLEDGE): | 97 | case OP(ACKNOWLEDGE): |
| 98 | /* Check for no next entry in the queue. */ | 98 | /* Check for no next entry in the queue. */ |
| @@ -149,7 +149,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp, · 50 unmodified lines | |||
| 149 | 149 | ||
| 150 | case OP(RDMA_READ_RESPONSE_FIRST): | 150 | case OP(RDMA_READ_RESPONSE_FIRST): |
| 151 | qp->s_ack_state = OP(RDMA_READ_RESPONSE_MIDDLE); | 151 | qp->s_ack_state = OP(RDMA_READ_RESPONSE_MIDDLE); |
| 152 | /* FALLTHROUGH */ | 152 | fallthrough; |
| 153 | case OP(RDMA_READ_RESPONSE_MIDDLE): | 153 | case OP(RDMA_READ_RESPONSE_MIDDLE): |
| 154 | qp->s_cur_sge = &qp->s_ack_rdma_sge; | 154 | qp->s_cur_sge = &qp->s_ack_rdma_sge; |
| 155 | qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr; | 155 | qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr; |
| @@ -471,10 +471,10 @@ no_flow_control: · 315 unmodified lines | |||
| 471 | * See qib_restart_rc(). | 471 | * See qib_restart_rc(). |
| 472 | */ | 472 | */ |
| 473 | qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu); | 473 | qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu); |
| 474 | /* FALLTHROUGH */ | 474 | fallthrough; |
| 475 | case OP(SEND_FIRST): | 475 | case OP(SEND_FIRST): |
| 476 | qp->s_state = OP(SEND_MIDDLE); | 476 | qp->s_state = OP(SEND_MIDDLE); |
| 477 | /* FALLTHROUGH */ | 477 | fallthrough; |
| 478 | case OP(SEND_MIDDLE): | 478 | case OP(SEND_MIDDLE): |
| 479 | bth2 = qp->s_psn++ & QIB_PSN_MASK; | 479 | bth2 = qp->s_psn++ & QIB_PSN_MASK; |
| 480 | ss = &qp->s_sge; | 480 | ss = &qp->s_sge; |
| @@ -510,10 +510,10 @@ no_flow_control: · 29 unmodified lines | |||
| 510 | * See qib_restart_rc(). | 510 | * See qib_restart_rc(). |
| 511 | */ | 511 | */ |
| 512 | qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu); | 512 | qp->s_len = restart_sge(&qp->s_sge, wqe, qp->s_psn, pmtu); |
| 513 | /* FALLTHROUGH */ | 513 | fallthrough; |
| 514 | case OP(RDMA_WRITE_FIRST): | 514 | case OP(RDMA_WRITE_FIRST): |
| 515 | qp->s_state = OP(RDMA_WRITE_MIDDLE); | 515 | qp->s_state = OP(RDMA_WRITE_MIDDLE); |
| 516 | /* FALLTHROUGH */ | 516 | fallthrough; |
| 517 | case OP(RDMA_WRITE_MIDDLE): | 517 | case OP(RDMA_WRITE_MIDDLE): |
| 518 | bth2 = qp->s_psn++ & QIB_PSN_MASK; | 518 | bth2 = qp->s_psn++ & QIB_PSN_MASK; |
| 519 | ss = &qp->s_sge; | 519 | ss = &qp->s_sge; |
| @@ -1807,7 +1807,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr, · 1287 unmodified lines | |||
| 1807 | if (!ret) | 1807 | if (!ret) |
| 1808 | goto rnr_nak; | 1808 | goto rnr_nak; |
| 1809 | qp->r_rcv_len = 0; | 1809 | qp->r_rcv_len = 0; |
| 1810 | /* FALLTHROUGH */ | 1810 | fallthrough; |
| 1811 | case OP(SEND_MIDDLE): | 1811 | case OP(SEND_MIDDLE): |
| 1812 | case OP(RDMA_WRITE_MIDDLE): | 1812 | case OP(RDMA_WRITE_MIDDLE): |
| 1813 | send_middle: | 1813 | send_middle: |
| @@ -1839,7 +1839,7 @@ send_middle: · 25 unmodified lines | |||
| 1839 | qp->r_rcv_len = 0; | 1839 | qp->r_rcv_len = 0; |
| 1840 | if (opcode == OP(SEND_ONLY)) | 1840 | if (opcode == OP(SEND_ONLY)) |
| 1841 | goto no_immediate_data; | 1841 | goto no_immediate_data; |
| 1842 | /* fall through -- for SEND_ONLY_WITH_IMMEDIATE */ | 1842 | fallthrough; /* for SEND_ONLY_WITH_IMMEDIATE */ |
| 1843 | case OP(SEND_LAST_WITH_IMMEDIATE): | 1843 | case OP(SEND_LAST_WITH_IMMEDIATE): |
| 1844 | send_last_imm: | 1844 | send_last_imm: |
| 1845 | wc.ex.imm_data = ohdr->u.imm_data; | 1845 | wc.ex.imm_data = ohdr->u.imm_data; |
| @@ -763,7 +763,7 @@ void __qib_sdma_process_event(struct qib_pportdata *ppd, · 762 unmodified lines | |||
| 763 | * bringing the link up with traffic active on | 763 | * bringing the link up with traffic active on |
| 764 | * 7220, e.g. */ | 764 | * 7220, e.g. */ |
| 765 | ss->go_s99_running = 1; | 765 | ss->go_s99_running = 1; |
| 766 | /* fall through -- and start dma engine */ | 766 | fallthrough; /* and start dma engine */ |
| 767 | case qib_sdma_event_e10_go_hw_start: | 767 | case qib_sdma_event_e10_go_hw_start: |
| 768 | /* This reference means the state machine is started */ | 768 | /* This reference means the state machine is started */ |
| 769 | sdma_get(&ppd->sdma_state); | 769 | sdma_get(&ppd->sdma_state); |
| @@ -161,7 +161,7 @@ int qib_make_uc_req(struct rvt_qp *qp, unsigned long *flags) · 160 unmodified lines | |||
| 161 | 161 | ||
| 162 | case OP(SEND_FIRST): | 162 | case OP(SEND_FIRST): |
| 163 | qp->s_state = OP(SEND_MIDDLE); | 163 | qp->s_state = OP(SEND_MIDDLE); |
| 164 | /* FALLTHROUGH */ | 164 | fallthrough; |
| 165 | case OP(SEND_MIDDLE): | 165 | case OP(SEND_MIDDLE): |
| 166 | len = qp->s_len; | 166 | len = qp->s_len; |
| 167 | if (len > pmtu) { | 167 | if (len > pmtu) { |
| @@ -185,7 +185,7 @@ int qib_make_uc_req(struct rvt_qp *qp, unsigned long *flags) · 17 unmodified lines | |||
| 185 | 185 | ||
| 186 | case OP(RDMA_WRITE_FIRST): | 186 | case OP(RDMA_WRITE_FIRST): |
| 187 | qp->s_state = OP(RDMA_WRITE_MIDDLE); | 187 | qp->s_state = OP(RDMA_WRITE_MIDDLE); |
| 188 | /* FALLTHROUGH */ | 188 | fallthrough; |
| 189 | case OP(RDMA_WRITE_MIDDLE): | 189 | case OP(RDMA_WRITE_MIDDLE): |
| 190 | len = qp->s_len; | 190 | len = qp->s_len; |
| 191 | if (len > pmtu) { | 191 | if (len > pmtu) { |
| @@ -351,7 +351,7 @@ send_first: · 159 unmodified lines | |||
| 351 | goto no_immediate_data; | 351 | goto no_immediate_data; |
| 352 | else if (opcode == OP(SEND_ONLY_WITH_IMMEDIATE)) | 352 | else if (opcode == OP(SEND_ONLY_WITH_IMMEDIATE)) |
| 353 | goto send_last_imm; | 353 | goto send_last_imm; |
| 354 | /* FALLTHROUGH */ | 354 | fallthrough; |
| 355 | case OP(SEND_MIDDLE): | 355 | case OP(SEND_MIDDLE): |
| 356 | /* Check for invalid length PMTU or posted rwqe len. */ | 356 | /* Check for invalid length PMTU or posted rwqe len. */ |
| 357 | if (unlikely(tlen != (hdrsize + pmtu + 4))) | 357 | if (unlikely(tlen != (hdrsize + pmtu + 4))) |
| @@ -440,7 +440,7 @@ rdma_first: · 82 unmodified lines | |||
| 440 | wc.ex.imm_data = ohdr->u.rc.imm_data; | 440 | wc.ex.imm_data = ohdr->u.rc.imm_data; |
| 441 | goto rdma_last_imm; | 441 | goto rdma_last_imm; |
| 442 | } | 442 | } |
| 443 | /* FALLTHROUGH */ | 443 | fallthrough; |
| 444 | case OP(RDMA_WRITE_MIDDLE): | 444 | case OP(RDMA_WRITE_MIDDLE): |
| 445 | /* Check for invalid length PMTU or posted rwqe len. */ | 445 | /* Check for invalid length PMTU or posted rwqe len. */ |
| 446 | if (unlikely(tlen != (hdrsize + pmtu + 4))) | 446 | if (unlikely(tlen != (hdrsize + pmtu + 4))) |
| @@ -237,7 +237,7 @@ static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct ib_header *hdr, · 236 unmodified lines | |||
| 237 | case IB_QPT_GSI: | 237 | case IB_QPT_GSI: |
| 238 | if (ib_qib_disable_sma) | 238 | if (ib_qib_disable_sma) |
| 239 | break; | 239 | break; |
| 240 | /* FALLTHROUGH */ | 240 | fallthrough; |
| 241 | case IB_QPT_UD: | 241 | case IB_QPT_UD: |
| 242 | qib_ud_rcv(ibp, hdr, has_grh, data, tlen, qp); | 242 | qib_ud_rcv(ibp, hdr, has_grh, data, tlen, qp); |
| 243 | break; | 243 | break; |
| @@ -120,7 +120,7 @@ static void usnic_ib_qp_grp_modify_active_to_err(struct usnic_ib_dev *us_ibdev) · 119 unmodified lines | |||
| 120 | IB_QPS_ERR, | 120 | IB_QPS_ERR, |
| 121 | NULL); | 121 | NULL); |
| 122 | if (status) { | 122 | if (status) { |
| 123 | usnic_err("Failed to transistion qp grp %u from %s to %s\n", | 123 | usnic_err("Failed to transition qp grp %u from %s to %s\n", |
| 124 | qp_grp->grp_id, | 124 | qp_grp->grp_id, |
| 125 | usnic_ib_qp_grp_state_to_string | 125 | usnic_ib_qp_grp_state_to_string |
| 126 | (cur_state), | 126 | (cur_state), |
| @@ -238,7 +238,7 @@ struct ib_qp *pvrdma_create_qp(struct ib_pd *pd, · 237 unmodified lines | |||
| 238 | ret = -EINVAL; | 238 | ret = -EINVAL; |
| 239 | goto err_qp; | 239 | goto err_qp; |
| 240 | } | 240 | } |
| 241 | /* fall through */ | 241 | fallthrough; |
| 242 | case IB_QPT_RC: | 242 | case IB_QPT_RC: |
| 243 | case IB_QPT_UD: | 243 | case IB_QPT_UD: |
| 244 | qp = kzalloc(sizeof(*qp), GFP_KERNEL); | 244 | qp = kzalloc(sizeof(*qp), GFP_KERNEL); |
| @@ -1111,7 +1111,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd, · 1110 unmodified lines | |||
| 1111 | if (init_attr->port_num == 0 || | 1111 | if (init_attr->port_num == 0 || |
| 1112 | init_attr->port_num > ibpd->device->phys_port_cnt) | 1112 | init_attr->port_num > ibpd->device->phys_port_cnt) |
| 1113 | return ERR_PTR(-EINVAL); | 1113 | return ERR_PTR(-EINVAL); |
| 1114 | /* fall through */ | 1114 | fallthrough; |
| 1115 | case IB_QPT_UC: | 1115 | case IB_QPT_UC: |
| 1116 | case IB_QPT_RC: | 1116 | case IB_QPT_RC: |
| 1117 | case IB_QPT_UD: | 1117 | case IB_QPT_UD: |
| @@ -282,7 +282,7 @@ static inline enum comp_state check_ack(struct rxe_qp *qp, · 281 unmodified lines | |||
| 282 | if ((syn & AETH_TYPE_MASK) != AETH_ACK) | 282 | if ((syn & AETH_TYPE_MASK) != AETH_ACK) |
| 283 | return COMPST_ERROR; | 283 | return COMPST_ERROR; |
| 284 | 284 | ||
| 285 | /* fall through */ | 285 | fallthrough; |
| 286 | /* (IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE doesn't have an AETH) | 286 | /* (IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE doesn't have an AETH) |
| 287 | */ | 287 | */ |
| 288 | case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE: | 288 | case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE: |
| @@ -71,7 +71,7 @@ void rxe_do_task(unsigned long data) · 70 unmodified lines | |||
| 71 | 71 | ||
| 72 | case TASK_STATE_BUSY: | 72 | case TASK_STATE_BUSY: |
| 73 | task->state = TASK_STATE_ARMED; | 73 | task->state = TASK_STATE_ARMED; |
| 74 | /* fall through */ | 74 | fallthrough; |
| 75 | case TASK_STATE_ARMED: | 75 | case TASK_STATE_ARMED: |
| 76 | spin_unlock_irqrestore(&task->state_lock, flags); | 76 | spin_unlock_irqrestore(&task->state_lock, flags); |
| 77 | return; | 77 | return; |
| @@ -540,7 +540,7 @@ static void init_send_wr(struct rxe_qp *qp, struct rxe_send_wr *wr, · 539 unmodified lines | |||
| 540 | switch (wr->opcode) { | 540 | switch (wr->opcode) { |
| 541 | case IB_WR_RDMA_WRITE_WITH_IMM: | 541 | case IB_WR_RDMA_WRITE_WITH_IMM: |
| 542 | wr->ex.imm_data = ibwr->ex.imm_data; | 542 | wr->ex.imm_data = ibwr->ex.imm_data; |
| 543 | /* fall through */ | 543 | fallthrough; |
| 544 | case IB_WR_RDMA_READ: | 544 | case IB_WR_RDMA_READ: |
| 545 | case IB_WR_RDMA_WRITE: | 545 | case IB_WR_RDMA_WRITE: |
| 546 | wr->wr.rdma.remote_addr = rdma_wr(ibwr)->remote_addr; | 546 | wr->wr.rdma.remote_addr = rdma_wr(ibwr)->remote_addr; |
| @@ -1224,12 +1224,10 @@ static void siw_cm_llp_data_ready(struct sock *sk) · 1223 unmodified lines | |||
| 1224 | 1224 | ||
| 1225 | switch (cep->state) { | 1225 | switch (cep->state) { |
| 1226 | case SIW_EPSTATE_RDMA_MODE: | 1226 | case SIW_EPSTATE_RDMA_MODE: |
| 1227 | /* fall through */ | ||
| 1228 | case SIW_EPSTATE_LISTENING: | 1227 | case SIW_EPSTATE_LISTENING: |
| 1229 | break; | 1228 | break; |
| 1230 | 1229 | ||
| 1231 | case SIW_EPSTATE_AWAIT_MPAREQ: | 1230 | case SIW_EPSTATE_AWAIT_MPAREQ: |
| 1232 | /* fall through */ | ||
| 1233 | case SIW_EPSTATE_AWAIT_MPAREP: | 1231 | case SIW_EPSTATE_AWAIT_MPAREP: |
| 1234 | siw_cm_queue_work(cep, SIW_CM_WORK_READ_MPAHDR); | 1232 | siw_cm_queue_work(cep, SIW_CM_WORK_READ_MPAHDR); |
| 1235 | break; | 1233 | break; |
| @@ -1215,7 +1215,7 @@ static int siw_rdmap_complete(struct siw_qp *qp, int error) · 1214 unmodified lines | |||
| 1215 | case RDMAP_SEND_SE: | 1215 | case RDMAP_SEND_SE: |
| 1216 | case RDMAP_SEND_SE_INVAL: | 1216 | case RDMAP_SEND_SE_INVAL: |
| 1217 | wqe->rqe.flags |= SIW_WQE_SOLICITED; | 1217 | wqe->rqe.flags |= SIW_WQE_SOLICITED; |
| 1218 | /* Fall through */ | 1218 | fallthrough; |
| 1219 | 1219 | ||
| 1220 | case RDMAP_SEND: | 1220 | case RDMAP_SEND: |
| 1221 | case RDMAP_SEND_INVAL: | 1221 | case RDMAP_SEND_INVAL: |
| @@ -1386,7 +1386,7 @@ int siw_tcp_rx_data(read_descriptor_t *rd_desc, struct sk_buff *skb, · 164 unmodified lines | |||
| 1386 | * DDP segment. | 1386 | * DDP segment. |
| 1387 | */ | 1387 | */ |
| 1388 | qp->rx_fpdu->first_ddp_seg = 0; | 1388 | qp->rx_fpdu->first_ddp_seg = 0; |
| 1389 | /* Fall through */ | 1389 | fallthrough; |
| 1390 | 1390 | ||
| 1391 | case SIW_GET_DATA_START: | 1391 | case SIW_GET_DATA_START: |
| 1392 | /* | 1392 | /* |
| @@ -1042,7 +1042,7 @@ next_wqe: · 1041 unmodified lines | |||
| 1042 | case SIW_OP_SEND_REMOTE_INV: | 1042 | case SIW_OP_SEND_REMOTE_INV: |
| 1043 | case SIW_OP_WRITE: | 1043 | case SIW_OP_WRITE: |
| 1044 | siw_wqe_put_mem(wqe, tx_type); | 1044 | siw_wqe_put_mem(wqe, tx_type); |
| 1045 | /* Fall through */ | 1045 | fallthrough; |
| 1046 | 1046 | ||
| 1047 | case SIW_OP_INVAL_STAG: | 1047 | case SIW_OP_INVAL_STAG: |
| 1048 | case SIW_OP_REG_MR: | 1048 | case SIW_OP_REG_MR: |
| @@ -1128,7 +1128,7 @@ next_wqe: · 79 unmodified lines | |||
| 1128 | case SIW_OP_READ: | 1128 | case SIW_OP_READ: |
| 1129 | case SIW_OP_READ_LOCAL_INV: | 1129 | case SIW_OP_READ_LOCAL_INV: |
| 1130 | siw_wqe_put_mem(wqe, tx_type); | 1130 | siw_wqe_put_mem(wqe, tx_type); |
| 1131 | /* Fall through */ | 1131 | fallthrough; |
| 1132 | 1132 | ||
| 1133 | case SIW_OP_INVAL_STAG: | 1133 | case SIW_OP_INVAL_STAG: |
| 1134 | case SIW_OP_REG_MR: | 1134 | case SIW_OP_REG_MR: |
| @@ -512,13 +512,13 @@ static int ipoib_cm_rx_handler(struct ib_cm_id *cm_id, · 511 unmodified lines | |||
| 512 | return ipoib_cm_req_handler(cm_id, event); | 512 | return ipoib_cm_req_handler(cm_id, event); |
| 513 | case IB_CM_DREQ_RECEIVED: | 513 | case IB_CM_DREQ_RECEIVED: |
| 514 | ib_send_cm_drep(cm_id, NULL, 0); | 514 | ib_send_cm_drep(cm_id, NULL, 0); |
| 515 | /* Fall through */ | 515 | fallthrough; |
| 516 | case IB_CM_REJ_RECEIVED: | 516 | case IB_CM_REJ_RECEIVED: |
| 517 | p = cm_id->context; | 517 | p = cm_id->context; |
| 518 | priv = ipoib_priv(p->dev); | 518 | priv = ipoib_priv(p->dev); |
| 519 | if (ib_modify_qp(p->qp, &ipoib_cm_err_attr, IB_QP_STATE)) | 519 | if (ib_modify_qp(p->qp, &ipoib_cm_err_attr, IB_QP_STATE)) |
| 520 | ipoib_warn(priv, "unable to move qp to error state\n"); | 520 | ipoib_warn(priv, "unable to move qp to error state\n"); |
| 521 | /* Fall through */ | 521 | fallthrough; |
| 522 | default: | 522 | default: |
| 523 | return 0; | 523 | return 0; |
| 524 | } | 524 | } |
| @@ -502,7 +502,7 @@ static struct net_device *ipoib_get_net_dev_by_params( · 501 unmodified lines | |||
| 502 | default: | 502 | default: |
| 503 | dev_warn_ratelimited(&dev->dev, | 503 | dev_warn_ratelimited(&dev->dev, |
| 504 | "duplicate IP address detected\n"); | 504 | "duplicate IP address detected\n"); |
| 505 | /* Fall through */ | 505 | fallthrough; |
| 506 | case 1: | 506 | case 1: |
| 507 | return net_dev; | 507 | return net_dev; |
| 508 | } | 508 | } |
| @@ -711,7 +711,7 @@ static int iser_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *eve · 710 unmodified lines | |||
| 711 | case RDMA_CM_EVENT_REJECTED: | 711 | case RDMA_CM_EVENT_REJECTED: |
| 712 | iser_info("Connection rejected: %s\n", | 712 | iser_info("Connection rejected: %s\n", |
| 713 | rdma_reject_msg(cma_id, event->status)); | 713 | rdma_reject_msg(cma_id, event->status)); |
| 714 | /* FALLTHROUGH */ | 714 | fallthrough; |
| 715 | case RDMA_CM_EVENT_ADDR_ERROR: | 715 | case RDMA_CM_EVENT_ADDR_ERROR: |
| 716 | case RDMA_CM_EVENT_ROUTE_ERROR: | 716 | case RDMA_CM_EVENT_ROUTE_ERROR: |
| 717 | case RDMA_CM_EVENT_CONNECT_ERROR: | 717 | case RDMA_CM_EVENT_CONNECT_ERROR: |
| @@ -664,8 +664,8 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) · 663 unmodified lines | |||
| 664 | case RDMA_CM_EVENT_ESTABLISHED: | 664 | case RDMA_CM_EVENT_ESTABLISHED: |
| 665 | isert_connected_handler(cma_id); | 665 | isert_connected_handler(cma_id); |
| 666 | break; | 666 | break; |
| 667 | case RDMA_CM_EVENT_ADDR_CHANGE: /* FALLTHRU */ | 667 | case RDMA_CM_EVENT_ADDR_CHANGE: |
| 668 | case RDMA_CM_EVENT_DISCONNECTED: /* FALLTHRU */ | 668 | case RDMA_CM_EVENT_DISCONNECTED: |
| 669 | case RDMA_CM_EVENT_TIMEWAIT_EXIT: /* FALLTHRU */ | 669 | case RDMA_CM_EVENT_TIMEWAIT_EXIT: /* FALLTHRU */ |
| 670 | ret = isert_disconnected_handler(cma_id, event->event); | 670 | ret = isert_disconnected_handler(cma_id, event->event); |
| 671 | break; | 671 | break; |
| @@ -684,7 +684,7 @@ isert_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *event) · 12 unmodified lines | |||
| 684 | case RDMA_CM_EVENT_REJECTED: | 684 | case RDMA_CM_EVENT_REJECTED: |
| 685 | isert_info("Connection rejected: %s\n", | 685 | isert_info("Connection rejected: %s\n", |
| 686 | rdma_reject_msg(cma_id, event->status)); | 686 | rdma_reject_msg(cma_id, event->status)); |
| 687 | /* fall through */ | 687 | fallthrough; |
| 688 | case RDMA_CM_EVENT_UNREACHABLE: | 688 | case RDMA_CM_EVENT_UNREACHABLE: |
| 689 | case RDMA_CM_EVENT_CONNECT_ERROR: | 689 | case RDMA_CM_EVENT_CONNECT_ERROR: |
| 690 | ret = isert_connect_error(cma_id); | 690 | ret = isert_connect_error(cma_id); |
| @@ -1470,7 +1470,7 @@ isert_put_cmd(struct isert_cmd *isert_cmd, bool comp_err) · 779 unmodified lines | |||
| 1470 | transport_generic_free_cmd(&cmd->se_cmd, 0); | 1470 | transport_generic_free_cmd(&cmd->se_cmd, 0); |
| 1471 | break; | 1471 | break; |
| 1472 | } | 1472 | } |
| 1473 | /* fall through */ | 1473 | fallthrough; |
| 1474 | default: | 1474 | default: |
| 1475 | iscsit_release_cmd(cmd); | 1475 | iscsit_release_cmd(cmd); |
| 1476 | break; | 1476 | break; |
| @@ -1648,7 +1648,7 @@ isert_do_control_comp(struct work_struct *work) · 171 unmodified lines | |||
| 1648 | switch (cmd->i_state) { | 1648 | switch (cmd->i_state) { |
| 1649 | case ISTATE_SEND_TASKMGTRSP: | 1649 | case ISTATE_SEND_TASKMGTRSP: |
| 1650 | iscsit_tmr_post_handler(cmd, cmd->conn); | 1650 | iscsit_tmr_post_handler(cmd, cmd->conn); |
| 1651 | /* fall through */ | 1651 | fallthrough; |
| 1652 | case ISTATE_SEND_REJECT: | 1652 | case ISTATE_SEND_REJECT: |
| 1653 | case ISTATE_SEND_TEXTRSP: | 1653 | case ISTATE_SEND_TEXTRSP: |
| 1654 | cmd->i_state = ISTATE_SENT_STATUS; | 1654 | cmd->i_state = ISTATE_SENT_STATUS; |
| @@ -547,7 +547,6 @@ static void vema_get(struct opa_vnic_vema_port *port, · 546 unmodified lines | |||
| 547 | vema_get_mac_entries(port, recvd_mad, rsp_mad); | 547 | vema_get_mac_entries(port, recvd_mad, rsp_mad); |
| 548 | break; | 548 | break; |
| 549 | case OPA_EM_ATTR_IFACE_UCAST_MACS: | 549 | case OPA_EM_ATTR_IFACE_UCAST_MACS: |
| 550 | /* fall through */ | ||
| 551 | case OPA_EM_ATTR_IFACE_MCAST_MACS: | 550 | case OPA_EM_ATTR_IFACE_MCAST_MACS: |
| 552 | vema_get_mac_list(port, recvd_mad, rsp_mad, attr_id); | 551 | vema_get_mac_list(port, recvd_mad, rsp_mad, attr_id); |
| 553 | break; | 552 | break; |
| @@ -102,12 +102,12 @@ static irqreturn_t fsia6b_serio_irq(struct serio *serio, · 101 unmodified lines | |||
| 102 | input_report_key(fsia6b->dev, | 102 | input_report_key(fsia6b->dev, |
| 103 | sw_id++, | 103 | sw_id++, |
| 104 | sw_state == 0); | 104 | sw_state == 0); |
| 105 | /* fall-through */ | 105 | fallthrough; |
| 106 | case '2': | 106 | case '2': |
| 107 | input_report_key(fsia6b->dev, | 107 | input_report_key(fsia6b->dev, |
| 108 | sw_id++, | 108 | sw_id++, |
| 109 | sw_state == 1); | 109 | sw_state == 1); |
| 110 | /* fall-through */ | 110 | fallthrough; |
| 111 | case '1': | 111 | case '1': |
| 112 | input_report_key(fsia6b->dev, | 112 | input_report_key(fsia6b->dev, |
| 113 | sw_id++, | 113 | sw_id++, |
| @@ -885,7 +885,6 @@ static int gc_setup_pad(struct gc *gc, int idx, int pad_type) · 884 unmodified lines | |||
| 885 | 885 | ||
| 886 | case GC_MULTI: | 886 | case GC_MULTI: |
| 887 | input_set_capability(input_dev, EV_KEY, BTN_TRIGGER); | 887 | input_set_capability(input_dev, EV_KEY, BTN_TRIGGER); |
| 888 | /* fall through */ | ||
| 889 | break; | 888 | break; |
| 890 | 889 | ||
| 891 | case GC_PSX: | 890 | case GC_PSX: |
| @@ -213,7 +213,7 @@ static void wacom_handle_model_response(struct wacom *wacom) · 212 unmodified lines | |||
| 213 | case 0x3731: /* PL-710 */ | 213 | case 0x3731: /* PL-710 */ |
| 214 | wacom->res_x = 2540; | 214 | wacom->res_x = 2540; |
| 215 | wacom->res_y = 2540; | 215 | wacom->res_y = 2540; |
| 216 | /* fall through */ | 216 | fallthrough; |
| 217 | case 0x3535: /* PL-550 */ | 217 | case 0x3535: /* PL-550 */ |
| 218 | case 0x3830: /* PL-800 */ | 218 | case 0x3830: /* PL-800 */ |
| 219 | wacom->extra_z_bits = 2; | 219 | wacom->extra_z_bits = 2; |
| @@ -477,7 +477,7 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry) · 476 unmodified lines | |||
| 477 | bootloader = appmode - 0x24; | 477 | bootloader = appmode - 0x24; |
| 478 | break; | 478 | break; |
| 479 | } | 479 | } |
| 480 | /* Fall through - for normal case */ | 480 | fallthrough; /* for normal case */ |
| 481 | case 0x4c: | 481 | case 0x4c: |
| 482 | case 0x4d: | 482 | case 0x4d: |
| 483 | case 0x5a: | 483 | case 0x5a: |
| @@ -290,7 +290,7 @@ static int wm831x_ts_probe(struct platform_device *pdev) · 289 unmodified lines | |||
| 290 | default: | 290 | default: |
| 291 | dev_err(&pdev->dev, "Unsupported ISEL setting: %d\n", | 291 | dev_err(&pdev->dev, "Unsupported ISEL setting: %d\n", |
| 292 | pdata->isel); | 292 | pdata->isel); |
| 293 | /* Fall through */ | 293 | fallthrough; |
| 294 | case 200: | 294 | case 200: |
| 295 | case 0: | 295 | case 0: |
| 296 | wm831x_set_bits(wm831x, WM831X_TOUCH_CONTROL_2, | 296 | wm831x_set_bits(wm831x, WM831X_TOUCH_CONTROL_2, |
| @@ -2258,7 +2258,7 @@ static void iommu_enable_ga(struct amd_iommu *iommu) · 2257 unmodified lines | |||
| 2258 | switch (amd_iommu_guest_ir) { | 2258 | switch (amd_iommu_guest_ir) { |
| 2259 | case AMD_IOMMU_GUEST_IR_VAPIC: | 2259 | case AMD_IOMMU_GUEST_IR_VAPIC: |
| 2260 | iommu_feature_enable(iommu, CONTROL_GAM_EN); | 2260 | iommu_feature_enable(iommu, CONTROL_GAM_EN); |
| 2261 | /* Fall through */ | 2261 | fallthrough; |
| 2262 | case AMD_IOMMU_GUEST_IR_LEGACY_GA: | 2262 | case AMD_IOMMU_GUEST_IR_LEGACY_GA: |
| 2263 | iommu_feature_enable(iommu, CONTROL_GA_EN); | 2263 | iommu_feature_enable(iommu, CONTROL_GA_EN); |
| 2264 | iommu->irte_ops = &irte_128_ops; | 2264 | iommu->irte_ops = &irte_128_ops; |
| @@ -903,7 +903,7 @@ static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent) · 902 unmodified lines | |||
| 903 | break; | 903 | break; |
| 904 | case CMDQ_OP_CFGI_CD: | 904 | case CMDQ_OP_CFGI_CD: |
| 905 | cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SSID, ent->cfgi.ssid); | 905 | cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SSID, ent->cfgi.ssid); |
| 906 | /* Fallthrough */ | 906 | fallthrough; |
| 907 | case CMDQ_OP_CFGI_STE: | 907 | case CMDQ_OP_CFGI_STE: |
| 908 | cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SID, ent->cfgi.sid); | 908 | cmd[0] |= FIELD_PREP(CMDQ_CFGI_0_SID, ent->cfgi.sid); |
| 909 | cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_LEAF, ent->cfgi.leaf); | 909 | cmd[1] |= FIELD_PREP(CMDQ_CFGI_1_LEAF, ent->cfgi.leaf); |
| @@ -936,7 +936,7 @@ static int arm_smmu_cmdq_build_cmd(u64 *cmd, struct arm_smmu_cmdq_ent *ent) · 26 unmodified lines | |||
| 936 | break; | 936 | break; |
| 937 | case CMDQ_OP_TLBI_NH_ASID: | 937 | case CMDQ_OP_TLBI_NH_ASID: |
| 938 | cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid); | 938 | cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_ASID, ent->tlbi.asid); |
| 939 | /* Fallthrough */ | 939 | fallthrough; |
| 940 | case CMDQ_OP_TLBI_S12_VMALL: | 940 | case CMDQ_OP_TLBI_S12_VMALL: |
| 941 | cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid); | 941 | cmd[0] |= FIELD_PREP(CMDQ_TLBI_0_VMID, ent->tlbi.vmid); |
| 942 | break; | 942 | break; |
| @@ -1036,7 +1036,6 @@ static void arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu) · 93 unmodified lines | |||
| 1036 | */ | 1036 | */ |
| 1037 | return; | 1037 | return; |
| 1038 | case CMDQ_ERR_CERROR_ILL_IDX: | 1038 | case CMDQ_ERR_CERROR_ILL_IDX: |
| 1039 | /* Fallthrough */ | ||
| 1040 | default: | 1039 | default: |
| 1041 | break; | 1040 | break; |
| 1042 | } | 1041 | } |
| @@ -3758,7 +3757,7 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) · 2715 unmodified lines | |||
| 3758 | switch (FIELD_GET(IDR0_STALL_MODEL, reg)) { | 3757 | switch (FIELD_GET(IDR0_STALL_MODEL, reg)) { |
| 3759 | case IDR0_STALL_MODEL_FORCE: | 3758 | case IDR0_STALL_MODEL_FORCE: |
| 3760 | smmu->features |= ARM_SMMU_FEAT_STALL_FORCE; | 3759 | smmu->features |= ARM_SMMU_FEAT_STALL_FORCE; |
| 3761 | /* Fallthrough */ | 3760 | fallthrough; |
| 3762 | case IDR0_STALL_MODEL_STALL: | 3761 | case IDR0_STALL_MODEL_STALL: |
| 3763 | smmu->features |= ARM_SMMU_FEAT_STALLS; | 3762 | smmu->features |= ARM_SMMU_FEAT_STALLS; |
| 3764 | } | 3763 | } |
| @@ -3778,7 +3777,7 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) · 13 unmodified lines | |||
| 3778 | switch (FIELD_GET(IDR0_TTF, reg)) { | 3777 | switch (FIELD_GET(IDR0_TTF, reg)) { |
| 3779 | case IDR0_TTF_AARCH32_64: | 3778 | case IDR0_TTF_AARCH32_64: |
| 3780 | smmu->ias = 40; | 3779 | smmu->ias = 40; |
| 3781 | /* Fallthrough */ | 3780 | fallthrough; |
| 3782 | case IDR0_TTF_AARCH64: | 3781 | case IDR0_TTF_AARCH64: |
| 3783 | break; | 3782 | break; |
| 3784 | default: | 3783 | default: |
| @@ -3875,7 +3874,7 @@ static int arm_smmu_device_hw_probe(struct arm_smmu_device *smmu) · 90 unmodified lines | |||
| 3875 | default: | 3874 | default: |
| 3876 | dev_info(smmu->dev, | 3875 | dev_info(smmu->dev, |
| 3877 | "unknown output address size. Truncating to 48-bit\n"); | 3876 | "unknown output address size. Truncating to 48-bit\n"); |
| 3878 | /* Fallthrough */ | 3877 | fallthrough; |
| 3879 | case IDR5_OAS_48_BIT: | 3878 | case IDR5_OAS_48_BIT: |
| 3880 | smmu->oas = 48; | 3879 | smmu->oas = 48; |
| 3881 | } | 3880 | } |
| @@ -1035,8 +1035,8 @@ static void *iommu_dma_alloc(struct device *dev, size_t size, · 1034 unmodified lines | |||
| 1035 | 1035 | ||
| 1036 | if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && | 1036 | if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) && |
| 1037 | !gfpflags_allow_blocking(gfp) && !coherent) | 1037 | !gfpflags_allow_blocking(gfp) && !coherent) |
| 1038 | cpu_addr = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &page, | 1038 | page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr, |
| 1039 | gfp); | 1039 | gfp, NULL); |
| 1040 | else | 1040 | else |
| 1041 | cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs); | 1041 | cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs); |
| 1042 | if (!cpu_addr) | 1042 | if (!cpu_addr) |
| @@ -5070,7 +5070,6 @@ static struct iommu_domain *intel_iommu_domain_alloc(unsigned type) · 5069 unmodified lines | |||
| 5070 | 5070 | ||
| 5071 | switch (type) { | 5071 | switch (type) { |
| 5072 | case IOMMU_DOMAIN_DMA: | 5072 | case IOMMU_DOMAIN_DMA: |
| 5073 | /* fallthrough */ | ||
| 5074 | case IOMMU_DOMAIN_UNMANAGED: | 5073 | case IOMMU_DOMAIN_UNMANAGED: |
| 5075 | dmar_domain = alloc_domain(0); | 5074 | dmar_domain = alloc_domain(0); |
| 5076 | if (!dmar_domain) { | 5075 | if (!dmar_domain) { |
| @@ -440,7 +440,7 @@ static int viommu_add_resv_mem(struct viommu_endpoint *vdev, · 439 unmodified lines | |||
| 440 | default: | 440 | default: |
| 441 | dev_warn(vdev->dev, "unknown resv mem subtype 0x%x\n", | 441 | dev_warn(vdev->dev, "unknown resv mem subtype 0x%x\n", |
| 442 | mem->subtype); | 442 | mem->subtype); |
| 443 | /* Fall-through */ | 443 | fallthrough; |
| 444 | case VIRTIO_IOMMU_RESV_MEM_T_RESERVED: | 444 | case VIRTIO_IOMMU_RESV_MEM_T_RESERVED: |
| 445 | region = iommu_alloc_resv_region(start, size, 0, | 445 | region = iommu_alloc_resv_region(start, size, 0, |
| 446 | IOMMU_RESV_RESERVED); | 446 | IOMMU_RESV_RESERVED); |
| @@ -425,7 +425,7 @@ config GOLDFISH_PIC · 424 unmodified lines | |||
| 425 | for Goldfish based virtual platforms. | 425 | for Goldfish based virtual platforms. |
| 426 | 426 | ||
| 427 | config QCOM_PDC | 427 | config QCOM_PDC |
| 428 | tristate "QCOM PDC" | 428 | bool "QCOM PDC" |
| 429 | depends on ARCH_QCOM | 429 | depends on ARCH_QCOM |
| 430 | select IRQ_DOMAIN_HIERARCHY | 430 | select IRQ_DOMAIN_HIERARCHY |
| 431 | help | 431 | help |
| @@ -2737,7 +2737,7 @@ static bool allocate_vpe_l2_table(int cpu, u32 id) · 2736 unmodified lines | |||
| 2737 | switch (gpsz) { | 2737 | switch (gpsz) { |
| 2738 | default: | 2738 | default: |
| 2739 | WARN_ON(1); | 2739 | WARN_ON(1); |
| 2740 | /* fall through */ | 2740 | fallthrough; |
| 2741 | case GIC_PAGE_SIZE_4K: | 2741 | case GIC_PAGE_SIZE_4K: |
| 2742 | psz = SZ_4K; | 2742 | psz = SZ_4K; |
| 2743 | break; | 2743 | break; |
| @@ -2832,7 +2832,7 @@ static int allocate_vpe_l1_table(void) · 88 unmodified lines | |||
| 2832 | switch (gpsz) { | 2832 | switch (gpsz) { |
| 2833 | default: | 2833 | default: |
| 2834 | gpsz = GIC_PAGE_SIZE_4K; | 2834 | gpsz = GIC_PAGE_SIZE_4K; |
| 2835 | /* fall through */ | 2835 | fallthrough; |
| 2836 | case GIC_PAGE_SIZE_4K: | 2836 | case GIC_PAGE_SIZE_4K: |
| 2837 | psz = SZ_4K; | 2837 | psz = SZ_4K; |
| 2838 | break; | 2838 | break; |
| @@ -965,10 +965,10 @@ static void gic_cpu_sys_reg_init(void) · 964 unmodified lines | |||
| 965 | case 7: | 965 | case 7: |
| 966 | write_gicreg(0, ICC_AP0R3_EL1); | 966 | write_gicreg(0, ICC_AP0R3_EL1); |
| 967 | write_gicreg(0, ICC_AP0R2_EL1); | 967 | write_gicreg(0, ICC_AP0R2_EL1); |
| 968 | /* Fall through */ | 968 | fallthrough; |
| 969 | case 6: | 969 | case 6: |
| 970 | write_gicreg(0, ICC_AP0R1_EL1); | 970 | write_gicreg(0, ICC_AP0R1_EL1); |
| 971 | /* Fall through */ | 971 | fallthrough; |
| 972 | case 5: | 972 | case 5: |
| 973 | case 4: | 973 | case 4: |
| 974 | write_gicreg(0, ICC_AP0R0_EL1); | 974 | write_gicreg(0, ICC_AP0R0_EL1); |
| @@ -982,10 +982,10 @@ static void gic_cpu_sys_reg_init(void) · 7 unmodified lines | |||
| 982 | case 7: | 982 | case 7: |
| 983 | write_gicreg(0, ICC_AP1R3_EL1); | 983 | write_gicreg(0, ICC_AP1R3_EL1); |
| 984 | write_gicreg(0, ICC_AP1R2_EL1); | 984 | write_gicreg(0, ICC_AP1R2_EL1); |
| 985 | /* Fall through */ | 985 | fallthrough; |
| 986 | case 6: | 986 | case 6: |
| 987 | write_gicreg(0, ICC_AP1R1_EL1); | 987 | write_gicreg(0, ICC_AP1R1_EL1); |
| 988 | /* Fall through */ | 988 | fallthrough; |
| 989 | case 5: | 989 | case 5: |
| 990 | case 4: | 990 | case 4: |
| 991 | write_gicreg(0, ICC_AP1R0_EL1); | 991 | write_gicreg(0, ICC_AP1R0_EL1); |
| @@ -259,7 +259,7 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node, · 258 unmodified lines | |||
| 259 | case 4: | 259 | case 4: |
| 260 | writel_relaxed(~0, reg + GPC_IMR1_CORE2); | 260 | writel_relaxed(~0, reg + GPC_IMR1_CORE2); |
| 261 | writel_relaxed(~0, reg + GPC_IMR1_CORE3); | 261 | writel_relaxed(~0, reg + GPC_IMR1_CORE3); |
| 262 | /* fall through */ | 262 | fallthrough; |
| 263 | case 2: | 263 | case 2: |
| 264 | writel_relaxed(~0, reg + GPC_IMR1_CORE0); | 264 | writel_relaxed(~0, reg + GPC_IMR1_CORE0); |
| 265 | writel_relaxed(~0, reg + GPC_IMR1_CORE1); | 265 | writel_relaxed(~0, reg + GPC_IMR1_CORE1); |
| @@ -125,7 +125,7 @@ static int __init ingenic_intc_of_init(struct device_node *node, · 124 unmodified lines | |||
| 125 | irq_reg_writel(gc, IRQ_MSK(32), JZ_REG_INTC_SET_MASK); | 125 | irq_reg_writel(gc, IRQ_MSK(32), JZ_REG_INTC_SET_MASK); |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | if (request_irq(parent_irq, intc_cascade, 0, | 128 | if (request_irq(parent_irq, intc_cascade, IRQF_NO_SUSPEND, |
| 129 | "SoC intc cascade interrupt", NULL)) | 129 | "SoC intc cascade interrupt", NULL)) |
| 130 | pr_err("Failed to register SoC intc cascade interrupt\n"); | 130 | pr_err("Failed to register SoC intc cascade interrupt\n"); |
| 131 | return 0; | 131 | return 0; |
| @@ -480,7 +480,7 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq, · 479 unmodified lines | |||
| 480 | case GIC_LOCAL_INT_TIMER: | 480 | case GIC_LOCAL_INT_TIMER: |
| 481 | /* CONFIG_MIPS_CMP workaround (see __gic_init) */ | 481 | /* CONFIG_MIPS_CMP workaround (see __gic_init) */ |
| 482 | map = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin; | 482 | map = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin; |
| 483 | /* fall-through */ | 483 | fallthrough; |
| 484 | case GIC_LOCAL_INT_PERFCTR: | 484 | case GIC_LOCAL_INT_PERFCTR: |
| 485 | case GIC_LOCAL_INT_FDC: | 485 | case GIC_LOCAL_INT_FDC: |
| 486 | /* | 486 | /* |
| @@ -295,6 +295,4 @@ out_free: · 294 unmodified lines | |||
| 295 | return ret; | 295 | return ret; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| 298 | IRQCHIP_PLATFORM_DRIVER_BEGIN(mtk_cirq) | 298 | IRQCHIP_DECLARE(mtk_cirq, "mediatek,mtk-cirq", mtk_cirq_of_init); |
| 299 | IRQCHIP_MATCH("mediatek,mtk-cirq", mtk_cirq_of_init) | ||
| 300 | IRQCHIP_PLATFORM_DRIVER_END(mtk_cirq) | ||
| @@ -231,6 +231,4 @@ out_free_chip: · 230 unmodified lines | |||
| 231 | kfree(chip_data); | 231 | kfree(chip_data); |
| 232 | return ret; | 232 | return ret; |
| 233 | } | 233 | } |
| 234 | IRQCHIP_PLATFORM_DRIVER_BEGIN(mtk_sysirq) | 234 | IRQCHIP_DECLARE(mtk_sysirq, "mediatek,mt6577-sysirq", mtk_sysirq_of_init); |
| 235 | IRQCHIP_MATCH("mediatek,mt6577-sysirq", mtk_sysirq_of_init) | ||
| 236 | IRQCHIP_PLATFORM_DRIVER_END(mtk_sysirq) | ||
| @@ -416,6 +416,16 @@ static void stm32_irq_ack(struct irq_data *d) · 415 unmodified lines | |||
| 416 | irq_gc_unlock(gc); | 416 | irq_gc_unlock(gc); |
| 417 | } | 417 | } |
| 418 | 418 | ||
| 419 | /* directly set the target bit without reading first. */ | ||
| 420 | static inline void stm32_exti_write_bit(struct irq_data *d, u32 reg) | ||
| 421 | { | ||
| 422 | struct stm32_exti_chip_data *chip_data = irq_data_get_irq_chip_data(d); | ||
| 423 | void __iomem *base = chip_data->host_data->base; | ||
| 424 | u32 val = BIT(d->hwirq % IRQS_PER_BANK); | ||
| 425 | |||
| 426 | writel_relaxed(val, base + reg); | ||
| 427 | } | ||
| 428 | |||
| 419 | static inline u32 stm32_exti_set_bit(struct irq_data *d, u32 reg) | 429 | static inline u32 stm32_exti_set_bit(struct irq_data *d, u32 reg) |
| 420 | { | 430 | { |
| 421 | struct stm32_exti_chip_data *chip_data = irq_data_get_irq_chip_data(d); | 431 | struct stm32_exti_chip_data *chip_data = irq_data_get_irq_chip_data(d); |
| @@ -449,9 +459,9 @@ static void stm32_exti_h_eoi(struct irq_data *d) · 27 unmodified lines | |||
| 449 | 459 | ||
| 450 | raw_spin_lock(&chip_data->rlock); | 460 | raw_spin_lock(&chip_data->rlock); |
| 451 | 461 | ||
| 452 | stm32_exti_set_bit(d, stm32_bank->rpr_ofst); | 462 | stm32_exti_write_bit(d, stm32_bank->rpr_ofst); |
| 453 | if (stm32_bank->fpr_ofst != UNDEF_REG) | 463 | if (stm32_bank->fpr_ofst != UNDEF_REG) |
| 454 | stm32_exti_set_bit(d, stm32_bank->fpr_ofst); | 464 | stm32_exti_write_bit(d, stm32_bank->fpr_ofst); |
| 455 | 465 | ||
| 456 | raw_spin_unlock(&chip_data->rlock); | 466 | raw_spin_unlock(&chip_data->rlock); |
| 457 | 467 | ||
| @@ -8,6 +8,7 @@ · 7 unmodified lines | |||
| 8 | 8 | ||
| 9 | #include <linux/err.h> | 9 | #include <linux/err.h> |
| 10 | #include <linux/io.h> | 10 | #include <linux/io.h> |
| 11 | #include <linux/irq.h> | ||
| 11 | #include <linux/irqchip.h> | 12 | #include <linux/irqchip.h> |
| 12 | #include <linux/irqdomain.h> | 13 | #include <linux/irqdomain.h> |
| 13 | #include <linux/interrupt.h> | 14 | #include <linux/interrupt.h> |
| @@ -83,6 +84,7 @@ struct ti_sci_inta_vint_desc { · 69 unmodified lines | |||
| 83 | * @vint_mutex: Mutex to protect vint_list | 84 | * @vint_mutex: Mutex to protect vint_list |
| 84 | * @base: Base address of the memory mapped IO registers | 85 | * @base: Base address of the memory mapped IO registers |
| 85 | * @pdev: Pointer to platform device. | 86 | * @pdev: Pointer to platform device. |
| 87 | * @ti_sci_id: TI-SCI device identifier | ||
| 86 | */ | 88 | */ |
| 87 | struct ti_sci_inta_irq_domain { | 89 | struct ti_sci_inta_irq_domain { |
| 88 | const struct ti_sci_handle *sci; | 90 | const struct ti_sci_handle *sci; |
| @@ -93,6 +95,7 @@ struct ti_sci_inta_irq_domain { · 4 unmodified lines | |||
| 93 | struct mutex vint_mutex; | 95 | struct mutex vint_mutex; |
| 94 | void __iomem *base; | 96 | void __iomem *base; |
| 95 | struct platform_device *pdev; | 97 | struct platform_device *pdev; |
| 98 | u32 ti_sci_id; | ||
| 96 | }; | 99 | }; |
| 97 | 100 | ||
| 98 | #define to_vint_desc(e, i) container_of(e, struct ti_sci_inta_vint_desc, \ | 101 | #define to_vint_desc(e, i) container_of(e, struct ti_sci_inta_vint_desc, \ |
| @@ -128,6 +131,37 @@ static void ti_sci_inta_irq_handler(struct irq_desc *desc) · 29 unmodified lines | |||
| 128 | chained_irq_exit(irq_desc_get_chip(desc), desc); | 131 | chained_irq_exit(irq_desc_get_chip(desc), desc); |
| 129 | } | 132 | } |
| 130 | 133 | ||
| 134 | /** | ||
| 135 | * ti_sci_inta_xlate_irq() - Translate hwirq to parent's hwirq. | ||
| 136 | * @inta: IRQ domain corresponding to Interrupt Aggregator | ||
| 137 | * @irq: Hardware irq corresponding to the above irq domain | ||
| 138 | * | ||
| 139 | * Return parent irq number if translation is available else -ENOENT. | ||
| 140 | */ | ||
| 141 | static int ti_sci_inta_xlate_irq(struct ti_sci_inta_irq_domain *inta, | ||
| 142 | u16 vint_id) | ||
| 143 | { | ||
| 144 | struct device_node *np = dev_of_node(&inta->pdev->dev); | ||
| 145 | u32 base, parent_base, size; | ||
| 146 | const __be32 *range; | ||
| 147 | int len; | ||
| 148 | |||
| 149 | range = of_get_property(np, "ti,interrupt-ranges", &len); | ||
| 150 | if (!range) | ||
| 151 | return vint_id; | ||
| 152 | |||
| 153 | for (len /= sizeof(*range); len >= 3; len -= 3) { | ||
| 154 | base = be32_to_cpu(*range++); | ||
| 155 | parent_base = be32_to_cpu(*range++); | ||
| 156 | size = be32_to_cpu(*range++); | ||
| 157 | |||
| 158 | if (base <= vint_id && vint_id < base + size) | ||
| 159 | return vint_id - base + parent_base; | ||
| 160 | } | ||
| 161 | |||
| 162 | return -ENOENT; | ||
| 163 | } | ||
| 164 | |||
| 131 | /** | 165 | /** |
| 132 | * ti_sci_inta_alloc_parent_irq() - Allocate parent irq to Interrupt aggregator | 166 | * ti_sci_inta_alloc_parent_irq() - Allocate parent irq to Interrupt aggregator |
| 133 | * @domain: IRQ domain corresponding to Interrupt Aggregator | 167 | * @domain: IRQ domain corresponding to Interrupt Aggregator |
| @@ -139,30 +173,52 @@ static struct ti_sci_inta_vint_desc *ti_sci_inta_alloc_parent_irq(struct irq_dom · 5 unmodified lines | |||
| 139 | struct ti_sci_inta_irq_domain *inta = domain->host_data; | 173 | struct ti_sci_inta_irq_domain *inta = domain->host_data; |
| 140 | struct ti_sci_inta_vint_desc *vint_desc; | 174 | struct ti_sci_inta_vint_desc *vint_desc; |
| 141 | struct irq_fwspec parent_fwspec; | 175 | struct irq_fwspec parent_fwspec; |
| 176 | struct device_node *parent_node; | ||
| 142 | unsigned int parent_virq; | 177 | unsigned int parent_virq; |
| 143 | u16 vint_id; | 178 | u16 vint_id, p_hwirq; |
| 179 | int ret; | ||
| 144 | 180 | ||
| 145 | vint_id = ti_sci_get_free_resource(inta->vint); | 181 | vint_id = ti_sci_get_free_resource(inta->vint); |
| 146 | if (vint_id == TI_SCI_RESOURCE_NULL) | 182 | if (vint_id == TI_SCI_RESOURCE_NULL) |
| 147 | return ERR_PTR(-EINVAL); | 183 | return ERR_PTR(-EINVAL); |
| 148 | 184 | ||
| 185 | p_hwirq = ti_sci_inta_xlate_irq(inta, vint_id); | ||
| 186 | if (p_hwirq < 0) { | ||
| 187 | ret = p_hwirq; | ||
| 188 | goto free_vint; | ||
| 189 | } | ||
| 190 | |||
| 149 | vint_desc = kzalloc(sizeof(*vint_desc), GFP_KERNEL); | 191 | vint_desc = kzalloc(sizeof(*vint_desc), GFP_KERNEL); |
| 150 | if (!vint_desc) | 192 | if (!vint_desc) { |
| 151 | return ERR_PTR(-ENOMEM); | 193 | ret = -ENOMEM; |
| 194 | goto free_vint; | ||
| 195 | } | ||
| 152 | 196 | ||
| 153 | vint_desc->domain = domain; | 197 | vint_desc->domain = domain; |
| 154 | vint_desc->vint_id = vint_id; | 198 | vint_desc->vint_id = vint_id; |
| 155 | INIT_LIST_HEAD(&vint_desc->list); | 199 | INIT_LIST_HEAD(&vint_desc->list); |
| 156 | 200 | ||
| 157 | parent_fwspec.fwnode = of_node_to_fwnode(of_irq_find_parent(dev_of_node(&inta->pdev->dev))); | 201 | parent_node = of_irq_find_parent(dev_of_node(&inta->pdev->dev)); |
| 158 | parent_fwspec.param_count = 2; | 202 | parent_fwspec.fwnode = of_node_to_fwnode(parent_node); |
| 159 | parent_fwspec.param[0] = inta->pdev->id; | 203 | |
| 160 | parent_fwspec.param[1] = vint_desc->vint_id; | 204 | if (of_device_is_compatible(parent_node, "arm,gic-v3")) { |
| 205 | /* Parent is GIC */ | ||
| 206 | parent_fwspec.param_count = 3; | ||
| 207 | parent_fwspec.param[0] = 0; | ||
| 208 | parent_fwspec.param[1] = p_hwirq - 32; | ||
| 209 | parent_fwspec.param[2] = IRQ_TYPE_LEVEL_HIGH; | ||
| 210 | } else { | ||
| 211 | /* Parent is Interrupt Router */ | ||
| 212 | parent_fwspec.param_count = 1; | ||
| 213 | parent_fwspec.param[0] = p_hwirq; | ||
| 214 | } | ||
| 161 | 215 | ||
| 162 | parent_virq = irq_create_fwspec_mapping(&parent_fwspec); | 216 | parent_virq = irq_create_fwspec_mapping(&parent_fwspec); |
| 163 | if (parent_virq == 0) { | 217 | if (parent_virq == 0) { |
| 164 | kfree(vint_desc); | 218 | dev_err(&inta->pdev->dev, "Parent IRQ allocation failed\n"); |
| 165 | return ERR_PTR(-EINVAL); | 219 | ret = -EINVAL; |
| 220 | goto free_vint_desc; | ||
| 221 | |||
| 166 | } | 222 | } |
| 167 | vint_desc->parent_virq = parent_virq; | 223 | vint_desc->parent_virq = parent_virq; |
| 168 | 224 | ||
| @@ -171,6 +227,11 @@ static struct ti_sci_inta_vint_desc *ti_sci_inta_alloc_parent_irq(struct irq_dom · 2 unmodified lines | |||
| 171 | ti_sci_inta_irq_handler, vint_desc); | 227 | ti_sci_inta_irq_handler, vint_desc); |
| 172 | 228 | ||
| 173 | return vint_desc; | 229 | return vint_desc; |
| 230 | free_vint_desc: | ||
| 231 | kfree(vint_desc); | ||
| 232 | free_vint: | ||
| 233 | ti_sci_release_resource(inta->vint, vint_id); | ||
| 234 | return ERR_PTR(ret); | ||
| 174 | } | 235 | } |
| 175 | 236 | ||
| 176 | /** | 237 | /** |
| @@ -202,7 +263,7 @@ static struct ti_sci_inta_event_desc *ti_sci_inta_alloc_event(struct ti_sci_inta · 25 unmodified lines | |||
| 202 | 263 | ||
| 203 | err = inta->sci->ops.rm_irq_ops.set_event_map(inta->sci, | 264 | err = inta->sci->ops.rm_irq_ops.set_event_map(inta->sci, |
| 204 | dev_id, dev_index, | 265 | dev_id, dev_index, |
| 205 | inta->pdev->id, | 266 | inta->ti_sci_id, |
| 206 | vint_desc->vint_id, | 267 | vint_desc->vint_id, |
| 207 | event_desc->global_event, | 268 | event_desc->global_event, |
| 208 | free_bit); | 269 | free_bit); |
| @@ -299,7 +360,7 @@ static void ti_sci_inta_free_irq(struct ti_sci_inta_event_desc *event_desc, · 90 unmodified lines | |||
| 299 | inta->sci->ops.rm_irq_ops.free_event_map(inta->sci, | 360 | inta->sci->ops.rm_irq_ops.free_event_map(inta->sci, |
| 300 | HWIRQ_TO_DEVID(hwirq), | 361 | HWIRQ_TO_DEVID(hwirq), |
| 301 | HWIRQ_TO_IRQID(hwirq), | 362 | HWIRQ_TO_IRQID(hwirq), |
| 302 | inta->pdev->id, | 363 | inta->ti_sci_id, |
| 303 | vint_desc->vint_id, | 364 | vint_desc->vint_id, |
| 304 | event_desc->global_event, | 365 | event_desc->global_event, |
| 305 | event_desc->vint_bit); | 366 | event_desc->vint_bit); |
| @@ -547,21 +608,21 @@ static int ti_sci_inta_irq_domain_probe(struct platform_device *pdev) · 241 unmodified lines | |||
| 547 | return ret; | 608 | return ret; |
| 548 | } | 609 | } |
| 549 | 610 | ||
| 550 | ret = of_property_read_u32(dev->of_node, "ti,sci-dev-id", &pdev->id); | 611 | ret = of_property_read_u32(dev->of_node, "ti,sci-dev-id", &inta->ti_sci_id); |
| 551 | if (ret) { | 612 | if (ret) { |
| 552 | dev_err(dev, "missing 'ti,sci-dev-id' property\n"); | 613 | dev_err(dev, "missing 'ti,sci-dev-id' property\n"); |
| 553 | return -EINVAL; | 614 | return -EINVAL; |
| 554 | } | 615 | } |
| 555 | 616 | ||
| 556 | inta->vint = devm_ti_sci_get_of_resource(inta->sci, dev, pdev->id, | 617 | inta->vint = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id, |
| 557 | "ti,sci-rm-range-vint"); | 618 | TI_SCI_RESASG_SUBTYPE_IA_VINT); |
| 558 | if (IS_ERR(inta->vint)) { | 619 | if (IS_ERR(inta->vint)) { |
| 559 | dev_err(dev, "VINT resource allocation failed\n"); | 620 | dev_err(dev, "VINT resource allocation failed\n"); |
| 560 | return PTR_ERR(inta->vint); | 621 | return PTR_ERR(inta->vint); |
| 561 | } | 622 | } |
| 562 | 623 | ||
| 563 | inta->global_event = devm_ti_sci_get_of_resource(inta->sci, dev, pdev->id, | 624 | inta->global_event = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id, |
| 564 | "ti,sci-rm-range-global-event"); | 625 | TI_SCI_RESASG_SUBTYPE_GLOBAL_EVENT_SEVT); |
| 565 | if (IS_ERR(inta->global_event)) { | 626 | if (IS_ERR(inta->global_event)) { |
| 566 | dev_err(dev, "Global event resource allocation failed\n"); | 627 | dev_err(dev, "Global event resource allocation failed\n"); |
| 567 | return PTR_ERR(inta->global_event); | 628 | return PTR_ERR(inta->global_event); |
| @@ -592,6 +653,8 @@ static int ti_sci_inta_irq_domain_probe(struct platform_device *pdev) · 24 unmodified lines | |||
| 592 | INIT_LIST_HEAD(&inta->vint_list); | 653 | INIT_LIST_HEAD(&inta->vint_list); |
| 593 | mutex_init(&inta->vint_mutex); | 654 | mutex_init(&inta->vint_mutex); |
| 594 | 655 | ||
| 656 | dev_info(dev, "Interrupt Aggregator domain %d created\n", pdev->id); | ||
| 657 | |||
| 595 | return 0; | 658 | return 0; |
| 596 | } | 659 | } |
| 597 | 660 | ||
| @@ -17,29 +17,20 @@ · 16 unmodified lines | |||
| 17 | #include <linux/of_irq.h> | 17 | #include <linux/of_irq.h> |
| 18 | #include <linux/soc/ti/ti_sci_protocol.h> | 18 | #include <linux/soc/ti/ti_sci_protocol.h> |
| 19 | 19 | ||
| 20 | #define TI_SCI_DEV_ID_MASK 0xffff | ||
| 21 | #define TI_SCI_DEV_ID_SHIFT 16 | ||
| 22 | #define TI_SCI_IRQ_ID_MASK 0xffff | ||
| 23 | #define TI_SCI_IRQ_ID_SHIFT 0 | ||
| 24 | #define HWIRQ_TO_DEVID(hwirq) (((hwirq) >> (TI_SCI_DEV_ID_SHIFT)) & \ | ||
| 25 | (TI_SCI_DEV_ID_MASK)) | ||
| 26 | #define HWIRQ_TO_IRQID(hwirq) ((hwirq) & (TI_SCI_IRQ_ID_MASK)) | ||
| 27 | #define TO_HWIRQ(dev, index) ((((dev) & TI_SCI_DEV_ID_MASK) << \ | ||
| 28 | TI_SCI_DEV_ID_SHIFT) | \ | ||
| 29 | ((index) & TI_SCI_IRQ_ID_MASK)) | ||
| 30 | |||
| 31 | /** | 20 | /** |
| 32 | * struct ti_sci_intr_irq_domain - Structure representing a TISCI based | 21 | * struct ti_sci_intr_irq_domain - Structure representing a TISCI based |
| 33 | * Interrupt Router IRQ domain. | 22 | * Interrupt Router IRQ domain. |
| 34 | * @sci: Pointer to TISCI handle | 23 | * @sci: Pointer to TISCI handle |
| 35 | * @dst_irq: TISCI resource pointer representing GIC irq controller. | 24 | * @out_irqs: TISCI resource pointer representing INTR irqs. |
| 36 | * @dst_id: TISCI device ID of the GIC irq controller. | 25 | * @dev: Struct device pointer. |
| 26 | * @ti_sci_id: TI-SCI device identifier | ||
| 37 | * @type: Specifies the trigger type supported by this Interrupt Router | 27 | * @type: Specifies the trigger type supported by this Interrupt Router |
| 38 | */ | 28 | */ |
| 39 | struct ti_sci_intr_irq_domain { | 29 | struct ti_sci_intr_irq_domain { |
| 40 | const struct ti_sci_handle *sci; | 30 | const struct ti_sci_handle *sci; |
| 41 | struct ti_sci_resource *dst_irq; | 31 | struct ti_sci_resource *out_irqs; |
| 42 | u32 dst_id; | 32 | struct device *dev; |
| 33 | u32 ti_sci_id; | ||
| 43 | u32 type; | 34 | u32 type; |
| 44 | }; | 35 | }; |
| 45 | 36 | ||
| @@ -70,15 +61,44 @@ static int ti_sci_intr_irq_domain_translate(struct irq_domain *domain, · 24 unmodified lines | |||
| 70 | { | 61 | { |
| 71 | struct ti_sci_intr_irq_domain *intr = domain->host_data; | 62 | struct ti_sci_intr_irq_domain *intr = domain->host_data; |
| 72 | 63 | ||
| 73 | if (fwspec->param_count != 2) | 64 | if (fwspec->param_count != 1) |
| 74 | return -EINVAL; | 65 | return -EINVAL; |
| 75 | 66 | ||
| 76 | *hwirq = TO_HWIRQ(fwspec->param[0], fwspec->param[1]); | 67 | *hwirq = fwspec->param[0]; |
| 77 | *type = intr->type; | 68 | *type = intr->type; |
| 78 | 69 | ||
| 79 | return 0; | 70 | return 0; |
| 80 | } | 71 | } |
| 81 | 72 | ||
| 73 | /** | ||
| 74 | * ti_sci_intr_xlate_irq() - Translate hwirq to parent's hwirq. | ||
| 75 | * @intr: IRQ domain corresponding to Interrupt Router | ||
| 76 | * @irq: Hardware irq corresponding to the above irq domain | ||
| 77 | * | ||
| 78 | * Return parent irq number if translation is available else -ENOENT. | ||
| 79 | */ | ||
| 80 | static int ti_sci_intr_xlate_irq(struct ti_sci_intr_irq_domain *intr, u32 irq) | ||
| 81 | { | ||
| 82 | struct device_node *np = dev_of_node(intr->dev); | ||
| 83 | u32 base, pbase, size, len; | ||
| 84 | const __be32 *range; | ||
| 85 | |||
| 86 | range = of_get_property(np, "ti,interrupt-ranges", &len); | ||
| 87 | if (!range) | ||
| 88 | return irq; | ||
| 89 | |||
| 90 | for (len /= sizeof(*range); len >= 3; len -= 3) { | ||
| 91 | base = be32_to_cpu(*range++); | ||
| 92 | pbase = be32_to_cpu(*range++); | ||
| 93 | size = be32_to_cpu(*range++); | ||
| 94 | |||
| 95 | if (base <= irq && irq < base + size) | ||
| 96 | return irq - base + pbase; | ||
| 97 | } | ||
| 98 | |||
| 99 | return -ENOENT; | ||
| 100 | } | ||
| 101 | |||
| 82 | /** | 102 | /** |
| 83 | * ti_sci_intr_irq_domain_free() - Free the specified IRQs from the domain. | 103 | * ti_sci_intr_irq_domain_free() - Free the specified IRQs from the domain. |
| 84 | * @domain: Domain to which the irqs belong | 104 | * @domain: Domain to which the irqs belong |
| @@ -89,66 +109,76 @@ static void ti_sci_intr_irq_domain_free(struct irq_domain *domain, · 4 unmodified lines | |||
| 89 | unsigned int virq, unsigned int nr_irqs) | 109 | unsigned int virq, unsigned int nr_irqs) |
| 90 | { | 110 | { |
| 91 | struct ti_sci_intr_irq_domain *intr = domain->host_data; | 111 | struct ti_sci_intr_irq_domain *intr = domain->host_data; |
| 92 | struct irq_data *data, *parent_data; | 112 | struct irq_data *data; |
| 93 | u16 dev_id, irq_index; | 113 | int out_irq; |
| 94 | 114 | ||
| 95 | parent_data = irq_domain_get_irq_data(domain->parent, virq); | ||
| 96 | data = irq_domain_get_irq_data(domain, virq); | 115 | data = irq_domain_get_irq_data(domain, virq); |
| 97 | irq_index = HWIRQ_TO_IRQID(data->hwirq); | 116 | out_irq = (uintptr_t)data->chip_data; |
| 98 | dev_id = HWIRQ_TO_DEVID(data->hwirq); | ||
| 99 | 117 | ||
| 100 | intr->sci->ops.rm_irq_ops.free_irq(intr->sci, dev_id, irq_index, | 118 | intr->sci->ops.rm_irq_ops.free_irq(intr->sci, |
| 101 | intr->dst_id, parent_data->hwirq); | 119 | intr->ti_sci_id, data->hwirq, |
| 102 | ti_sci_release_resource(intr->dst_irq, parent_data->hwirq); | 120 | intr->ti_sci_id, out_irq); |
| 121 | ti_sci_release_resource(intr->out_irqs, out_irq); | ||
| 103 | irq_domain_free_irqs_parent(domain, virq, 1); | 122 | irq_domain_free_irqs_parent(domain, virq, 1); |
| 104 | irq_domain_reset_irq_data(data); | 123 | irq_domain_reset_irq_data(data); |
| 105 | } | 124 | } |
| 106 | 125 | ||
| 107 | /** | 126 | /** |
| 108 | * ti_sci_intr_alloc_gic_irq() - Allocate GIC specific IRQ | 127 | * ti_sci_intr_alloc_parent_irq() - Allocate parent IRQ |
| 109 | * @domain: Pointer to the interrupt router IRQ domain | 128 | * @domain: Pointer to the interrupt router IRQ domain |
| 110 | * @virq: Corresponding Linux virtual IRQ number | 129 | * @virq: Corresponding Linux virtual IRQ number |
| 111 | * @hwirq: Corresponding hwirq for the IRQ within this IRQ domain | 130 | * @hwirq: Corresponding hwirq for the IRQ within this IRQ domain |
| 112 | * | 131 | * |
| 113 | * Returns 0 if all went well else appropriate error pointer. | 132 | * Returns parent irq if all went well else appropriate error pointer. |
| 114 | */ | 133 | */ |
| 115 | static int ti_sci_intr_alloc_gic_irq(struct irq_domain *domain, | 134 | static int ti_sci_intr_alloc_parent_irq(struct irq_domain *domain, |
| 116 | unsigned int virq, u32 hwirq) | 135 | unsigned int virq, u32 hwirq) |
| 117 | { | 136 | { |
| 118 | struct ti_sci_intr_irq_domain *intr = domain->host_data; | 137 | struct ti_sci_intr_irq_domain *intr = domain->host_data; |
| 138 | struct device_node *parent_node; | ||
| 119 | struct irq_fwspec fwspec; | 139 | struct irq_fwspec fwspec; |
| 120 | u16 dev_id, irq_index; | 140 | u16 out_irq, p_hwirq; |
| 121 | u16 dst_irq; | 141 | int err = 0; |
| 122 | int err; | ||
| 123 | |||
| 124 | dev_id = HWIRQ_TO_DEVID(hwirq); | ||
| 125 | irq_index = HWIRQ_TO_IRQID(hwirq); | ||
| 126 | 142 | ||
| 127 | dst_irq = ti_sci_get_free_resource(intr->dst_irq); | 143 | out_irq = ti_sci_get_free_resource(intr->out_irqs); |
| 128 | if (dst_irq == TI_SCI_RESOURCE_NULL) | 144 | if (out_irq == TI_SCI_RESOURCE_NULL) |
| 129 | return -EINVAL; | 145 | return -EINVAL; |
| 130 | 146 | ||
| 131 | fwspec.fwnode = domain->parent->fwnode; | 147 | p_hwirq = ti_sci_intr_xlate_irq(intr, out_irq); |
| 132 | fwspec.param_count = 3; | 148 | if (p_hwirq < 0) |
| 133 | fwspec.param[0] = 0; /* SPI */ | 149 | goto err_irqs; |
| 134 | fwspec.param[1] = dst_irq - 32; /* SPI offset */ | 150 | |
| 135 | fwspec.param[2] = intr->type; | 151 | parent_node = of_irq_find_parent(dev_of_node(intr->dev)); |
| 152 | fwspec.fwnode = of_node_to_fwnode(parent_node); | ||
| 153 | |||
| 154 | if (of_device_is_compatible(parent_node, "arm,gic-v3")) { | ||
| 155 | /* Parent is GIC */ | ||
| 156 | fwspec.param_count = 3; | ||
| 157 | fwspec.param[0] = 0; /* SPI */ | ||
| 158 | fwspec.param[1] = p_hwirq - 32; /* SPI offset */ | ||
| 159 | fwspec.param[2] = intr->type; | ||
| 160 | } else { | ||
| 161 | /* Parent is Interrupt Router */ | ||
| 162 | fwspec.param_count = 1; | ||
| 163 | fwspec.param[0] = p_hwirq; | ||
| 164 | } | ||
| 136 | 165 | ||
| 137 | err = irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec); | 166 | err = irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec); |
| 138 | if (err) | 167 | if (err) |
| 139 | goto err_irqs; | 168 | goto err_irqs; |
| 140 | 169 | ||
| 141 | err = intr->sci->ops.rm_irq_ops.set_irq(intr->sci, dev_id, irq_index, | 170 | err = intr->sci->ops.rm_irq_ops.set_irq(intr->sci, |
| 142 | intr->dst_id, dst_irq); | 171 | intr->ti_sci_id, hwirq, |
| 172 | intr->ti_sci_id, out_irq); | ||
| 143 | if (err) | 173 | if (err) |
| 144 | goto err_msg; | 174 | goto err_msg; |
| 145 | 175 | ||
| 146 | return 0; | 176 | return p_hwirq; |
| 147 | 177 | ||
| 148 | err_msg: | 178 | err_msg: |
| 149 | irq_domain_free_irqs_parent(domain, virq, 1); | 179 | irq_domain_free_irqs_parent(domain, virq, 1); |
| 150 | err_irqs: | 180 | err_irqs: |
| 151 | ti_sci_release_resource(intr->dst_irq, dst_irq); | 181 | ti_sci_release_resource(intr->out_irqs, out_irq); |
| 152 | return err; | 182 | return err; |
| 153 | } | 183 | } |
| 154 | 184 | ||
| @@ -168,18 +198,19 @@ static int ti_sci_intr_irq_domain_alloc(struct irq_domain *domain, · 13 unmodified lines | |||
| 168 | struct irq_fwspec *fwspec = data; | 198 | struct irq_fwspec *fwspec = data; |
| 169 | unsigned long hwirq; | 199 | unsigned long hwirq; |
| 170 | unsigned int flags; | 200 | unsigned int flags; |
| 171 | int err; | 201 | int err, p_hwirq; |
| 172 | 202 | ||
| 173 | err = ti_sci_intr_irq_domain_translate(domain, fwspec, &hwirq, &flags); | 203 | err = ti_sci_intr_irq_domain_translate(domain, fwspec, &hwirq, &flags); |
| 174 | if (err) | 204 | if (err) |
| 175 | return err; | 205 | return err; |
| 176 | 206 | ||
| 177 | err = ti_sci_intr_alloc_gic_irq(domain, virq, hwirq); | 207 | p_hwirq = ti_sci_intr_alloc_parent_irq(domain, virq, hwirq); |
| 178 | if (err) | 208 | if (p_hwirq < 0) |
| 179 | return err; | 209 | return p_hwirq; |
| 180 | 210 | ||
| 181 | irq_domain_set_hwirq_and_chip(domain, virq, hwirq, | 211 | irq_domain_set_hwirq_and_chip(domain, virq, hwirq, |
| 182 | &ti_sci_intr_irq_chip, NULL); | 212 | &ti_sci_intr_irq_chip, |
| 213 | (void *)(uintptr_t)p_hwirq); | ||
| 183 | 214 | ||
| 184 | return 0; | 215 | return 0; |
| 185 | } | 216 | } |
| @@ -214,6 +245,7 @@ static int ti_sci_intr_irq_domain_probe(struct platform_device *pdev) · 28 unmodified lines | |||
| 214 | if (!intr) | 245 | if (!intr) |
| 215 | return -ENOMEM; | 246 | return -ENOMEM; |
| 216 | 247 | ||
| 248 | intr->dev = dev; | ||
| 217 | ret = of_property_read_u32(dev_of_node(dev), "ti,intr-trigger-type", | 249 | ret = of_property_read_u32(dev_of_node(dev), "ti,intr-trigger-type", |
| 218 | &intr->type); | 250 | &intr->type); |
| 219 | if (ret) { | 251 | if (ret) { |
| @@ -230,19 +262,19 @@ static int ti_sci_intr_irq_domain_probe(struct platform_device *pdev) · 10 unmodified lines | |||
| 230 | return ret; | 262 | return ret; |
| 231 | } | 263 | } |
| 232 | 264 | ||
| 233 | ret = of_property_read_u32(dev_of_node(dev), "ti,sci-dst-id", | 265 | ret = of_property_read_u32(dev_of_node(dev), "ti,sci-dev-id", |
| 234 | &intr->dst_id); | 266 | &intr->ti_sci_id); |
| 235 | if (ret) { | 267 | if (ret) { |
| 236 | dev_err(dev, "missing 'ti,sci-dst-id' property\n"); | 268 | dev_err(dev, "missing 'ti,sci-dev-id' property\n"); |
| 237 | return -EINVAL; | 269 | return -EINVAL; |
| 238 | } | 270 | } |
| 239 | 271 | ||
| 240 | intr->dst_irq = devm_ti_sci_get_of_resource(intr->sci, dev, | 272 | intr->out_irqs = devm_ti_sci_get_resource(intr->sci, dev, |
| 241 | intr->dst_id, | 273 | intr->ti_sci_id, |
| 242 | "ti,sci-rm-range-girq"); | 274 | TI_SCI_RESASG_SUBTYPE_IR_OUTPUT); |
| 243 | if (IS_ERR(intr->dst_irq)) { | 275 | if (IS_ERR(intr->out_irqs)) { |
| 244 | dev_err(dev, "Destination irq resource allocation failed\n"); | 276 | dev_err(dev, "Destination irq resource allocation failed\n"); |
| 245 | return PTR_ERR(intr->dst_irq); | 277 | return PTR_ERR(intr->out_irqs); |
| 246 | } | 278 | } |
| 247 | 279 | ||
| 248 | domain = irq_domain_add_hierarchy(parent_domain, 0, 0, dev_of_node(dev), | 280 | domain = irq_domain_add_hierarchy(parent_domain, 0, 0, dev_of_node(dev), |
| @@ -252,6 +284,8 @@ static int ti_sci_intr_irq_domain_probe(struct platform_device *pdev) · 3 unmodified lines | |||
| 252 | return -ENOMEM; | 284 | return -ENOMEM; |
| 253 | } | 285 | } |
| 254 | 286 | ||
| 287 | dev_info(dev, "Interrupt Router %d domain created\n", intr->ti_sci_id); | ||
| 288 | |||
| 255 | return 0; | 289 | return 0; |
| 256 | } | 290 | } |
| 257 | 291 | ||
| @@ -455,7 +455,7 @@ static void __init __vic_init(void __iomem *base, int parent_irq, int irq_start, · 454 unmodified lines | |||
| 455 | return; | 455 | return; |
| 456 | default: | 456 | default: |
| 457 | printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n"); | 457 | printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n"); |
| 458 | /* fall through */ | 458 | fallthrough; |
| 459 | case AMBA_VENDOR_ARM: | 459 | case AMBA_VENDOR_ARM: |
| 460 | break; | 460 | break; |
| 461 | } | 461 | } |
| @@ -52,7 +52,7 @@ int platform_irqchip_probe(struct platform_device *pdev) · 51 unmodified lines | |||
| 52 | * interrupt controller. The actual initialization callback of this | 52 | * interrupt controller. The actual initialization callback of this |
| 53 | * interrupt controller can check for specific domains as necessary. | 53 | * interrupt controller can check for specific domains as necessary. |
| 54 | */ | 54 | */ |
| 55 | if (par_np && !irq_find_matching_host(np, DOMAIN_BUS_ANY)) | 55 | if (par_np && !irq_find_matching_host(par_np, DOMAIN_BUS_ANY)) |
| 56 | return -EPROBE_DEFER; | 56 | return -EPROBE_DEFER; |
| 57 | 57 | ||
| 58 | return irq_init_cb(np, par_np); | 58 | return irq_init_cb(np, par_np); |
| @@ -11,11 +11,9 @@ · 10 unmodified lines | |||
| 11 | #include <linux/irqdomain.h> | 11 | #include <linux/irqdomain.h> |
| 12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
| 13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
| 14 | #include <linux/module.h> | ||
| 15 | #include <linux/of.h> | 14 | #include <linux/of.h> |
| 16 | #include <linux/of_address.h> | 15 | #include <linux/of_address.h> |
| 17 | #include <linux/of_device.h> | 16 | #include <linux/of_device.h> |
| 18 | #include <linux/of_irq.h> | ||
| 19 | #include <linux/soc/qcom/irq.h> | 17 | #include <linux/soc/qcom/irq.h> |
| 20 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
| 21 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
| @@ -432,8 +430,4 @@ fail: · 410 unmodified lines | |||
| 432 | return ret; | 430 | return ret; |
| 433 | } | 431 | } |
| 434 | 432 | ||
| 435 | IRQCHIP_PLATFORM_DRIVER_BEGIN(qcom_pdc) | 433 | IRQCHIP_DECLARE(qcom_pdc, "qcom,pdc", qcom_pdc_init); |
| 436 | IRQCHIP_MATCH("qcom,pdc", qcom_pdc_init) | ||
| 437 | IRQCHIP_PLATFORM_DRIVER_END(qcom_pdc) | ||
| 438 | MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Power Domain Controller"); | ||
| 439 | MODULE_LICENSE("GPL v2"); | ||
| @@ -348,7 +348,7 @@ modehdlc(struct bchannel *bch, int protocol) · 347 unmodified lines | |||
| 348 | switch (protocol) { | 348 | switch (protocol) { |
| 349 | case -1: /* used for init */ | 349 | case -1: /* used for init */ |
| 350 | bch->state = -1; | 350 | bch->state = -1; |
| 351 | /* fall through */ | 351 | fallthrough; |
| 352 | case ISDN_P_NONE: | 352 | case ISDN_P_NONE: |
| 353 | if (bch->state == ISDN_P_NONE) | 353 | if (bch->state == ISDN_P_NONE) |
| 354 | break; | 354 | break; |
| @@ -121,7 +121,6 @@ setup_embedded(struct hfc_multi *hc, struct hm_map *m) · 120 unmodified lines | |||
| 121 | case HFC_IO_MODE_EMBSD: | 121 | case HFC_IO_MODE_EMBSD: |
| 122 | test_and_set_bit(HFC_CHIP_EMBSD, &hc->chip); | 122 | test_and_set_bit(HFC_CHIP_EMBSD, &hc->chip); |
| 123 | hc->slots = 128; /* required */ | 123 | hc->slots = 128; /* required */ |
| 124 | /* fall through */ | ||
| 125 | hc->HFC_outb = HFC_outb_embsd; | 124 | hc->HFC_outb = HFC_outb_embsd; |
| 126 | hc->HFC_inb = HFC_inb_embsd; | 125 | hc->HFC_inb = HFC_inb_embsd; |
| 127 | hc->HFC_inw = HFC_inw_embsd; | 126 | hc->HFC_inw = HFC_inw_embsd; |
| @@ -1280,7 +1280,7 @@ mode_hfcpci(struct bchannel *bch, int bc, int protocol) · 1279 unmodified lines | |||
| 1280 | case (-1): /* used for init */ | 1280 | case (-1): /* used for init */ |
| 1281 | bch->state = -1; | 1281 | bch->state = -1; |
| 1282 | bch->nr = bc; | 1282 | bch->nr = bc; |
| 1283 | /* fall through */ | 1283 | fallthrough; |
| 1284 | case (ISDN_P_NONE): | 1284 | case (ISDN_P_NONE): |
| 1285 | if (bch->state == ISDN_P_NONE) | 1285 | if (bch->state == ISDN_P_NONE) |
| 1286 | return 0; | 1286 | return 0; |
| @@ -695,7 +695,7 @@ hfcsusb_setup_bch(struct bchannel *bch, int protocol) · 694 unmodified lines | |||
| 695 | switch (protocol) { | 695 | switch (protocol) { |
| 696 | case (-1): /* used for init */ | 696 | case (-1): /* used for init */ |
| 697 | bch->state = -1; | 697 | bch->state = -1; |
| 698 | /* fall through */ | 698 | fallthrough; |
| 699 | case (ISDN_P_NONE): | 699 | case (ISDN_P_NONE): |
| 700 | if (bch->state == ISDN_P_NONE) | 700 | if (bch->state == ISDN_P_NONE) |
| 701 | return 0; /* already in idle state */ | 701 | return 0; /* already in idle state */ |
| @@ -397,7 +397,7 @@ int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const u8 *src, u16 slen, · 396 unmodified lines | |||
| 397 | dsize--; | 397 | dsize--; |
| 398 | break; | 398 | break; |
| 399 | } | 399 | } |
| 400 | /* fall through */ | 400 | fallthrough; |
| 401 | case HDLC_SENDFLAG_ONE: | 401 | case HDLC_SENDFLAG_ONE: |
| 402 | if (hdlc->bit_shift == 8) { | 402 | if (hdlc->bit_shift == 8) { |
| 403 | hdlc->cbin = hdlc->ffvalue >> | 403 | hdlc->cbin = hdlc->ffvalue >> |
| @@ -875,7 +875,7 @@ release_card(struct inf_hw *card) { · 874 unmodified lines | |||
| 875 | release_card(card->sc[i]); | 875 | release_card(card->sc[i]); |
| 876 | card->sc[i] = NULL; | 876 | card->sc[i] = NULL; |
| 877 | } | 877 | } |
| 878 | /* fall through */ | 878 | fallthrough; |
| 879 | default: | 879 | default: |
| 880 | pci_disable_device(card->pdev); | 880 | pci_disable_device(card->pdev); |
| 881 | pci_set_drvdata(card->pdev, NULL); | 881 | pci_set_drvdata(card->pdev, NULL); |
| @@ -957,7 +957,7 @@ isar_pump_statev_fax(struct isar_ch *ch, u8 devt) { · 956 unmodified lines | |||
| 957 | break; | 957 | break; |
| 958 | case PCTRL_CMD_FTM: | 958 | case PCTRL_CMD_FTM: |
| 959 | p1 = 2; | 959 | p1 = 2; |
| 960 | /* fall through */ | 960 | fallthrough; |
| 961 | case PCTRL_CMD_FTH: | 961 | case PCTRL_CMD_FTH: |
| 962 | send_mbox(ch->is, dps | ISAR_HIS_PUMPCTRL, | 962 | send_mbox(ch->is, dps | ISAR_HIS_PUMPCTRL, |
| 963 | PCTRL_CMD_SILON, 1, &p1); | 963 | PCTRL_CMD_SILON, 1, &p1); |
| @@ -1163,7 +1163,7 @@ setup_pump(struct isar_ch *ch) { · 199 unmodified lines | |||
| 1163 | send_mbox(ch->is, dps | ISAR_HIS_PUMPCFG, | 1163 | send_mbox(ch->is, dps | ISAR_HIS_PUMPCFG, |
| 1164 | PMOD_DTMF, 1, param); | 1164 | PMOD_DTMF, 1, param); |
| 1165 | } | 1165 | } |
| 1166 | /* fall through */ | 1166 | fallthrough; |
| 1167 | case ISDN_P_B_MODEM_ASYNC: | 1167 | case ISDN_P_B_MODEM_ASYNC: |
| 1168 | ctrl = PMOD_DATAMODEM; | 1168 | ctrl = PMOD_DATAMODEM; |
| 1169 | if (test_bit(FLG_ORIGIN, &ch->bch.Flags)) { | 1169 | if (test_bit(FLG_ORIGIN, &ch->bch.Flags)) { |
| @@ -1255,7 +1255,7 @@ setup_iom2(struct isar_ch *ch) { · 85 unmodified lines | |||
| 1255 | case ISDN_P_B_MODEM_ASYNC: | 1255 | case ISDN_P_B_MODEM_ASYNC: |
| 1256 | case ISDN_P_B_T30_FAX: | 1256 | case ISDN_P_B_T30_FAX: |
| 1257 | cmsb |= IOM_CTRL_RCV; | 1257 | cmsb |= IOM_CTRL_RCV; |
| 1258 | /* fall through */ | 1258 | fallthrough; |
| 1259 | case ISDN_P_B_L2DTMF: | 1259 | case ISDN_P_B_L2DTMF: |
| 1260 | if (test_bit(FLG_DTMFSEND, &ch->bch.Flags)) | 1260 | if (test_bit(FLG_DTMFSEND, &ch->bch.Flags)) |
| 1261 | cmsb |= IOM_CTRL_RCV; | 1261 | cmsb |= IOM_CTRL_RCV; |
| @@ -1548,7 +1548,7 @@ isar_l2l1(struct mISDNchannel *ch, struct sk_buff *skb) · 286 unmodified lines | |||
| 1548 | ich->is->name, hh->id); | 1548 | ich->is->name, hh->id); |
| 1549 | ret = -EINVAL; | 1549 | ret = -EINVAL; |
| 1550 | } | 1550 | } |
| 1551 | /* fall through */ | 1551 | fallthrough; |
| 1552 | default: | 1552 | default: |
| 1553 | pr_info("%s: %s unknown prim(%x,%x)\n", | 1553 | pr_info("%s: %s unknown prim(%x,%x)\n", |
| 1554 | ich->is->name, __func__, hh->prim, hh->id); | 1554 | ich->is->name, __func__, hh->prim, hh->id); |
| @@ -528,7 +528,7 @@ create_l2entity(struct mISDNdevice *dev, struct mISDNchannel *ch, · 527 unmodified lines | |||
| 528 | rq.protocol = ISDN_P_NT_S0; | 528 | rq.protocol = ISDN_P_NT_S0; |
| 529 | if (dev->Dprotocols & (1 << ISDN_P_NT_E1)) | 529 | if (dev->Dprotocols & (1 << ISDN_P_NT_E1)) |
| 530 | rq.protocol = ISDN_P_NT_E1; | 530 | rq.protocol = ISDN_P_NT_E1; |
| 531 | /* fall through */ | 531 | fallthrough; |
| 532 | case ISDN_P_LAPD_TE: | 532 | case ISDN_P_LAPD_TE: |
| 533 | ch->recv = mISDN_queue_message; | 533 | ch->recv = mISDN_queue_message; |
| 534 | ch->peer = &dev->D.st->own; | 534 | ch->peer = &dev->D.st->own; |
| @@ -301,7 +301,7 @@ void pblk_free_rqd(struct pblk *pblk, struct nvm_rq *rqd, int type) · 300 unmodified lines | |||
| 301 | switch (type) { | 301 | switch (type) { |
| 302 | case PBLK_WRITE: | 302 | case PBLK_WRITE: |
| 303 | kfree(((struct pblk_c_ctx *)nvm_rq_to_pdu(rqd))->lun_bitmap); | 303 | kfree(((struct pblk_c_ctx *)nvm_rq_to_pdu(rqd))->lun_bitmap); |
| 304 | /* fall through */ | 304 | fallthrough; |
| 305 | case PBLK_WRITE_INT: | 305 | case PBLK_WRITE_INT: |
| 306 | pool = &pblk->w_rq_pool; | 306 | pool = &pblk->w_rq_pool; |
| 307 | break; | 307 | break; |
| @@ -881,7 +881,7 @@ adbhid_input_register(int id, int default_id, int original_handler_id, · 880 unmodified lines | |||
| 881 | } | 881 | } |
| 882 | if (hid->name[0]) | 882 | if (hid->name[0]) |
| 883 | break; | 883 | break; |
| 884 | /* else fall through */ | 884 | fallthrough; |
| 885 | 885 | ||
| 886 | default: | 886 | default: |
| 887 | pr_info("Trying to register unknown ADB device to input layer.\n"); | 887 | pr_info("Trying to register unknown ADB device to input layer.\n"); |
| @@ -852,7 +852,7 @@ int smu_queue_i2c(struct smu_i2c_cmd *cmd) · 851 unmodified lines | |||
| 852 | break; | 852 | break; |
| 853 | case SMU_I2C_TRANSFER_COMBINED: | 853 | case SMU_I2C_TRANSFER_COMBINED: |
| 854 | cmd->info.devaddr &= 0xfe; | 854 | cmd->info.devaddr &= 0xfe; |
| 855 | /* fall through */ | 855 | fallthrough; |
| 856 | case SMU_I2C_TRANSFER_STDSUB: | 856 | case SMU_I2C_TRANSFER_STDSUB: |
| 857 | if (cmd->info.sublen > 3) | 857 | if (cmd->info.sublen > 3) |
| 858 | return -EINVAL; | 858 | return -EINVAL; |
| @@ -608,7 +608,7 @@ static void do_journal_discard(struct cache *ca) · 607 unmodified lines | |||
| 608 | ca->sb.njournal_buckets; | 608 | ca->sb.njournal_buckets; |
| 609 | 609 | ||
| 610 | atomic_set(&ja->discard_in_flight, DISCARD_READY); | 610 | atomic_set(&ja->discard_in_flight, DISCARD_READY); |
| 611 | /* fallthrough */ | 611 | fallthrough; |
| 612 | 612 | ||
| 613 | case DISCARD_READY: | 613 | case DISCARD_READY: |
| 614 | if (ja->discard_idx == ja->last_idx) | 614 | if (ja->discard_idx == ja->last_idx) |
| @@ -33,27 +33,27 @@ int bch_ ## name ## _h(const char *cp, type *res) \ · 32 unmodified lines | |||
| 33 | case 'y': \ | 33 | case 'y': \ |
| 34 | case 'z': \ | 34 | case 'z': \ |
| 35 | u++; \ | 35 | u++; \ |
| 36 | /* fall through */ \ | 36 | fallthrough; \ |
| 37 | case 'e': \ | 37 | case 'e': \ |
| 38 | u++; \ | 38 | u++; \ |
| 39 | /* fall through */ \ | 39 | fallthrough; \ |
| 40 | case 'p': \ | 40 | case 'p': \ |
| 41 | u++; \ | 41 | u++; \ |
| 42 | /* fall through */ \ | 42 | fallthrough; \ |
| 43 | case 't': \ | 43 | case 't': \ |
| 44 | u++; \ | 44 | u++; \ |
| 45 | /* fall through */ \ | 45 | fallthrough; \ |
| 46 | case 'g': \ | 46 | case 'g': \ |
| 47 | u++; \ | 47 | u++; \ |
| 48 | /* fall through */ \ | 48 | fallthrough; \ |
| 49 | case 'm': \ | 49 | case 'm': \ |
| 50 | u++; \ | 50 | u++; \ |
| 51 | /* fall through */ \ | 51 | fallthrough; \ |
| 52 | case 'k': \ | 52 | case 'k': \ |
| 53 | u++; \ | 53 | u++; \ |
| 54 | if (e++ == cp) \ | 54 | if (e++ == cp) \ |
| 55 | return -EINVAL; \ | 55 | return -EINVAL; \ |
| 56 | /* fall through */ \ | 56 | fallthrough; \ |
| 57 | case '\n': \ | 57 | case '\n': \ |
| 58 | case '\0': \ | 58 | case '\0': \ |
| 59 | if (*e == '\n') \ | 59 | if (*e == '\n') \ |
| @@ -1552,7 +1552,7 @@ static blk_status_t crypt_convert(struct crypt_config *cc, · 1551 unmodified lines | |||
| 1552 | case -EBUSY: | 1552 | case -EBUSY: |
| 1553 | wait_for_completion(&ctx->restart); | 1553 | wait_for_completion(&ctx->restart); |
| 1554 | reinit_completion(&ctx->restart); | 1554 | reinit_completion(&ctx->restart); |
| 1555 | /* fall through */ | 1555 | fallthrough; |
| 1556 | /* | 1556 | /* |
| 1557 | * The request is queued and processed asynchronously, | 1557 | * The request is queued and processed asynchronously, |
| 1558 | * completion function kcryptd_async_done() will be called. | 1558 | * completion function kcryptd_async_done() will be called. |
| @@ -1554,7 +1554,7 @@ static void pg_init_done(void *data, int errors) · 1553 unmodified lines | |||
| 1554 | case SCSI_DH_RETRY: | 1554 | case SCSI_DH_RETRY: |
| 1555 | /* Wait before retrying. */ | 1555 | /* Wait before retrying. */ |
| 1556 | delay_retry = true; | 1556 | delay_retry = true; |
| 1557 | /* fall through */ | 1557 | fallthrough; |
| 1558 | case SCSI_DH_IMM_RETRY: | 1558 | case SCSI_DH_IMM_RETRY: |
| 1559 | case SCSI_DH_RES_TEMP_UNAVAIL: | 1559 | case SCSI_DH_RES_TEMP_UNAVAIL: |
| 1560 | if (pg_init_limit_reached(m, pgpath)) | 1560 | if (pg_init_limit_reached(m, pgpath)) |
| @@ -1021,7 +1021,7 @@ static void clone_endio(struct bio *bio) · 1020 unmodified lines | |||
| 1021 | switch (r) { | 1021 | switch (r) { |
| 1022 | case DM_ENDIO_REQUEUE: | 1022 | case DM_ENDIO_REQUEUE: |
| 1023 | error = BLK_STS_DM_REQUEUE; | 1023 | error = BLK_STS_DM_REQUEUE; |
| 1024 | /*FALLTHRU*/ | 1024 | fallthrough; |
| 1025 | case DM_ENDIO_DONE: | 1025 | case DM_ENDIO_DONE: |
| 1026 | break; | 1026 | break; |
| 1027 | case DM_ENDIO_INCOMPLETE: | 1027 | case DM_ENDIO_INCOMPLETE: |
| @@ -102,10 +102,10 @@ static int __init md_setup(char *str) · 101 unmodified lines | |||
| 102 | pername = "raid0"; | 102 | pername = "raid0"; |
| 103 | break; | 103 | break; |
| 104 | } | 104 | } |
| 105 | /* FALL THROUGH */ | 105 | fallthrough; |
| 106 | case 1: /* the first device is numeric */ | 106 | case 1: /* the first device is numeric */ |
| 107 | str = str1; | 107 | str = str1; |
| 108 | /* FALL THROUGH */ | 108 | fallthrough; |
| 109 | case 0: | 109 | case 0: |
| 110 | md_setup_args[ent].level = LEVEL_NONE; | 110 | md_setup_args[ent].level = LEVEL_NONE; |
| 111 | pername="super-block"; | 111 | pername="super-block"; |
| @@ -1433,7 +1433,7 @@ int md_bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long s · 1432 unmodified lines | |||
| 1433 | case 0: | 1433 | case 0: |
| 1434 | md_bitmap_file_set_bit(bitmap, offset); | 1434 | md_bitmap_file_set_bit(bitmap, offset); |
| 1435 | md_bitmap_count_page(&bitmap->counts, offset, 1); | 1435 | md_bitmap_count_page(&bitmap->counts, offset, 1); |
| 1436 | /* fall through */ | 1436 | fallthrough; |
| 1437 | case 1: | 1437 | case 1: |
| 1438 | *bmc = 2; | 1438 | *bmc = 2; |
| 1439 | } | 1439 | } |
| @@ -4083,7 +4083,7 @@ static void handle_parity_checks5(struct r5conf *conf, struct stripe_head *sh, · 4082 unmodified lines | |||
| 4083 | break; | 4083 | break; |
| 4084 | } | 4084 | } |
| 4085 | dev = &sh->dev[s->failed_num[0]]; | 4085 | dev = &sh->dev[s->failed_num[0]]; |
| 4086 | /* fall through */ | 4086 | fallthrough; |
| 4087 | case check_state_compute_result: | 4087 | case check_state_compute_result: |
| 4088 | sh->check_state = check_state_idle; | 4088 | sh->check_state = check_state_idle; |
| 4089 | if (!dev) | 4089 | if (!dev) |
| @@ -4214,7 +4214,7 @@ static void handle_parity_checks6(struct r5conf *conf, struct stripe_head *sh, · 124 unmodified lines | |||
| 4214 | 4214 | ||
| 4215 | /* we have 2-disk failure */ | 4215 | /* we have 2-disk failure */ |
| 4216 | BUG_ON(s->failed != 2); | 4216 | BUG_ON(s->failed != 2); |
| 4217 | /* fall through */ | 4217 | fallthrough; |
| 4218 | case check_state_compute_result: | 4218 | case check_state_compute_result: |
| 4219 | sh->check_state = check_state_idle; | 4219 | sh->check_state = check_state_idle; |
| 4220 | 4220 | ||
| @@ -6514,9 +6514,12 @@ raid5_store_stripe_size(struct mddev *mddev, const char *page, size_t len) · 2293 unmodified lines | |||
| 6514 | 6514 | ||
| 6515 | /* | 6515 | /* |
| 6516 | * The value should not be bigger than PAGE_SIZE. It requires to | 6516 | * The value should not be bigger than PAGE_SIZE. It requires to |
| 6517 | * be multiple of DEFAULT_STRIPE_SIZE. | 6517 | * be multiple of DEFAULT_STRIPE_SIZE and the value should be power |
| 6518 | * of two. | ||
| 6518 | */ | 6519 | */ |
| 6519 | if (new % DEFAULT_STRIPE_SIZE != 0 || new > PAGE_SIZE || new == 0) | 6520 | if (new % DEFAULT_STRIPE_SIZE != 0 || |
| 6521 | new > PAGE_SIZE || new == 0 || | ||
| 6522 | new != roundup_pow_of_two(new)) | ||
| 6520 | return -EINVAL; | 6523 | return -EINVAL; |
| 6521 | 6524 | ||
| 6522 | err = mddev_lock(mddev); | 6525 | err = mddev_lock(mddev); |
| @@ -210,7 +210,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) · 209 unmodified lines | |||
| 210 | tpg->vdownsampling[1] = 1; | 210 | tpg->vdownsampling[1] = 1; |
| 211 | tpg->hdownsampling[1] = 1; | 211 | tpg->hdownsampling[1] = 1; |
| 212 | tpg->planes = 2; | 212 | tpg->planes = 2; |
| 213 | /* fall through */ | 213 | fallthrough; |
| 214 | case V4L2_PIX_FMT_RGB332: | 214 | case V4L2_PIX_FMT_RGB332: |
| 215 | case V4L2_PIX_FMT_RGB565: | 215 | case V4L2_PIX_FMT_RGB565: |
| 216 | case V4L2_PIX_FMT_RGB565X: | 216 | case V4L2_PIX_FMT_RGB565X: |
| @@ -271,7 +271,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) · 54 unmodified lines | |||
| 271 | case V4L2_PIX_FMT_YUV420M: | 271 | case V4L2_PIX_FMT_YUV420M: |
| 272 | case V4L2_PIX_FMT_YVU420M: | 272 | case V4L2_PIX_FMT_YVU420M: |
| 273 | tpg->buffers = 3; | 273 | tpg->buffers = 3; |
| 274 | /* fall through */ | 274 | fallthrough; |
| 275 | case V4L2_PIX_FMT_YUV420: | 275 | case V4L2_PIX_FMT_YUV420: |
| 276 | case V4L2_PIX_FMT_YVU420: | 276 | case V4L2_PIX_FMT_YVU420: |
| 277 | tpg->vdownsampling[1] = 2; | 277 | tpg->vdownsampling[1] = 2; |
| @@ -284,7 +284,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) · 6 unmodified lines | |||
| 284 | case V4L2_PIX_FMT_YUV422M: | 284 | case V4L2_PIX_FMT_YUV422M: |
| 285 | case V4L2_PIX_FMT_YVU422M: | 285 | case V4L2_PIX_FMT_YVU422M: |
| 286 | tpg->buffers = 3; | 286 | tpg->buffers = 3; |
| 287 | /* fall through */ | 287 | fallthrough; |
| 288 | case V4L2_PIX_FMT_YUV422P: | 288 | case V4L2_PIX_FMT_YUV422P: |
| 289 | tpg->vdownsampling[1] = 1; | 289 | tpg->vdownsampling[1] = 1; |
| 290 | tpg->vdownsampling[2] = 1; | 290 | tpg->vdownsampling[2] = 1; |
| @@ -296,7 +296,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) · 5 unmodified lines | |||
| 296 | case V4L2_PIX_FMT_NV16M: | 296 | case V4L2_PIX_FMT_NV16M: |
| 297 | case V4L2_PIX_FMT_NV61M: | 297 | case V4L2_PIX_FMT_NV61M: |
| 298 | tpg->buffers = 2; | 298 | tpg->buffers = 2; |
| 299 | /* fall through */ | 299 | fallthrough; |
| 300 | case V4L2_PIX_FMT_NV16: | 300 | case V4L2_PIX_FMT_NV16: |
| 301 | case V4L2_PIX_FMT_NV61: | 301 | case V4L2_PIX_FMT_NV61: |
| 302 | tpg->vdownsampling[1] = 1; | 302 | tpg->vdownsampling[1] = 1; |
| @@ -308,7 +308,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc) · 5 unmodified lines | |||
| 308 | case V4L2_PIX_FMT_NV12M: | 308 | case V4L2_PIX_FMT_NV12M: |
| 309 | case V4L2_PIX_FMT_NV21M: | 309 | case V4L2_PIX_FMT_NV21M: |
| 310 | tpg->buffers = 2; | 310 | tpg->buffers = 2; |
| 311 | /* fall through */ | 311 | fallthrough; |
| 312 | case V4L2_PIX_FMT_NV12: | 312 | case V4L2_PIX_FMT_NV12: |
| 313 | case V4L2_PIX_FMT_NV21: | 313 | case V4L2_PIX_FMT_NV21: |
| 314 | tpg->vdownsampling[1] = 2; | 314 | tpg->vdownsampling[1] = 2; |
| @@ -1275,7 +1275,7 @@ static void gen_twopix(struct tpg_data *tpg, · 960 unmodified lines | |||
| 1275 | case V4L2_PIX_FMT_RGB444: | 1275 | case V4L2_PIX_FMT_RGB444: |
| 1276 | case V4L2_PIX_FMT_XRGB444: | 1276 | case V4L2_PIX_FMT_XRGB444: |
| 1277 | alpha = 0; | 1277 | alpha = 0; |
| 1278 | /* fall through */ | 1278 | fallthrough; |
| 1279 | case V4L2_PIX_FMT_YUV444: | 1279 | case V4L2_PIX_FMT_YUV444: |
| 1280 | case V4L2_PIX_FMT_ARGB444: | 1280 | case V4L2_PIX_FMT_ARGB444: |
| 1281 | buf[0][offset] = (g_u_s << 4) | b_v; | 1281 | buf[0][offset] = (g_u_s << 4) | b_v; |
| @@ -1283,21 +1283,21 @@ static void gen_twopix(struct tpg_data *tpg, · 1 unmodified line | |||
| 1283 | break; | 1283 | break; |
| 1284 | case V4L2_PIX_FMT_RGBX444: | 1284 | case V4L2_PIX_FMT_RGBX444: |
| 1285 | alpha = 0; | 1285 | alpha = 0; |
| 1286 | /* fall through */ | 1286 | fallthrough; |
| 1287 | case V4L2_PIX_FMT_RGBA444: | 1287 | case V4L2_PIX_FMT_RGBA444: |
| 1288 | buf[0][offset] = (b_v << 4) | (alpha >> 4); | 1288 | buf[0][offset] = (b_v << 4) | (alpha >> 4); |
| 1289 | buf[0][offset + 1] = (r_y_h << 4) | g_u_s; | 1289 | buf[0][offset + 1] = (r_y_h << 4) | g_u_s; |
| 1290 | break; | 1290 | break; |
| 1291 | case V4L2_PIX_FMT_XBGR444: | 1291 | case V4L2_PIX_FMT_XBGR444: |
| 1292 | alpha = 0; | 1292 | alpha = 0; |
| 1293 | /* fall through */ | 1293 | fallthrough; |
| 1294 | case V4L2_PIX_FMT_ABGR444: | 1294 | case V4L2_PIX_FMT_ABGR444: |
| 1295 | buf[0][offset] = (g_u_s << 4) | r_y_h; | 1295 | buf[0][offset] = (g_u_s << 4) | r_y_h; |
| 1296 | buf[0][offset + 1] = (alpha & 0xf0) | b_v; | 1296 | buf[0][offset + 1] = (alpha & 0xf0) | b_v; |
| 1297 | break; | 1297 | break; |
| 1298 | case V4L2_PIX_FMT_BGRX444: | 1298 | case V4L2_PIX_FMT_BGRX444: |
| 1299 | alpha = 0; | 1299 | alpha = 0; |
| 1300 | /* fall through */ | 1300 | fallthrough; |
| 1301 | case V4L2_PIX_FMT_BGRA444: | 1301 | case V4L2_PIX_FMT_BGRA444: |
| 1302 | buf[0][offset] = (r_y_h << 4) | (alpha >> 4); | 1302 | buf[0][offset] = (r_y_h << 4) | (alpha >> 4); |
| 1303 | buf[0][offset + 1] = (b_v << 4) | g_u_s; | 1303 | buf[0][offset + 1] = (b_v << 4) | g_u_s; |
| @@ -1305,7 +1305,7 @@ static void gen_twopix(struct tpg_data *tpg, · 1 unmodified line | |||
| 1305 | case V4L2_PIX_FMT_RGB555: | 1305 | case V4L2_PIX_FMT_RGB555: |
| 1306 | case V4L2_PIX_FMT_XRGB555: | 1306 | case V4L2_PIX_FMT_XRGB555: |
| 1307 | alpha = 0; | 1307 | alpha = 0; |
| 1308 | /* fall through */ | 1308 | fallthrough; |
| 1309 | case V4L2_PIX_FMT_YUV555: | 1309 | case V4L2_PIX_FMT_YUV555: |
| 1310 | case V4L2_PIX_FMT_ARGB555: | 1310 | case V4L2_PIX_FMT_ARGB555: |
| 1311 | buf[0][offset] = (g_u_s << 5) | b_v; | 1311 | buf[0][offset] = (g_u_s << 5) | b_v; |
| @@ -1314,7 +1314,7 @@ static void gen_twopix(struct tpg_data *tpg, · 2 unmodified lines | |||
| 1314 | break; | 1314 | break; |
| 1315 | case V4L2_PIX_FMT_RGBX555: | 1315 | case V4L2_PIX_FMT_RGBX555: |
| 1316 | alpha = 0; | 1316 | alpha = 0; |
| 1317 | /* fall through */ | 1317 | fallthrough; |
| 1318 | case V4L2_PIX_FMT_RGBA555: | 1318 | case V4L2_PIX_FMT_RGBA555: |
| 1319 | buf[0][offset] = (g_u_s << 6) | (b_v << 1) | | 1319 | buf[0][offset] = (g_u_s << 6) | (b_v << 1) | |
| 1320 | ((alpha & 0x80) >> 7); | 1320 | ((alpha & 0x80) >> 7); |
| @@ -1322,7 +1322,7 @@ static void gen_twopix(struct tpg_data *tpg, · 1 unmodified line | |||
| 1322 | break; | 1322 | break; |
| 1323 | case V4L2_PIX_FMT_XBGR555: | 1323 | case V4L2_PIX_FMT_XBGR555: |
| 1324 | alpha = 0; | 1324 | alpha = 0; |
| 1325 | /* fall through */ | 1325 | fallthrough; |
| 1326 | case V4L2_PIX_FMT_ABGR555: | 1326 | case V4L2_PIX_FMT_ABGR555: |
| 1327 | buf[0][offset] = (g_u_s << 5) | r_y_h; | 1327 | buf[0][offset] = (g_u_s << 5) | r_y_h; |
| 1328 | buf[0][offset + 1] = (alpha & 0x80) | (b_v << 2) | 1328 | buf[0][offset + 1] = (alpha & 0x80) | (b_v << 2) |
| @@ -1330,7 +1330,7 @@ static void gen_twopix(struct tpg_data *tpg, · 1 unmodified line | |||
| 1330 | break; | 1330 | break; |
| 1331 | case V4L2_PIX_FMT_BGRX555: | 1331 | case V4L2_PIX_FMT_BGRX555: |
| 1332 | alpha = 0; | 1332 | alpha = 0; |
| 1333 | /* fall through */ | 1333 | fallthrough; |
| 1334 | case V4L2_PIX_FMT_BGRA555: | 1334 | case V4L2_PIX_FMT_BGRA555: |
| 1335 | buf[0][offset] = (g_u_s << 6) | (r_y_h << 1) | | 1335 | buf[0][offset] = (g_u_s << 6) | (r_y_h << 1) | |
| 1336 | ((alpha & 0x80) >> 7); | 1336 | ((alpha & 0x80) >> 7); |
| @@ -1339,7 +1339,7 @@ static void gen_twopix(struct tpg_data *tpg, · 2 unmodified lines | |||
| 1339 | case V4L2_PIX_FMT_RGB555X: | 1339 | case V4L2_PIX_FMT_RGB555X: |
| 1340 | case V4L2_PIX_FMT_XRGB555X: | 1340 | case V4L2_PIX_FMT_XRGB555X: |
| 1341 | alpha = 0; | 1341 | alpha = 0; |
| 1342 | /* fall through */ | 1342 | fallthrough; |
| 1343 | case V4L2_PIX_FMT_ARGB555X: | 1343 | case V4L2_PIX_FMT_ARGB555X: |
| 1344 | buf[0][offset] = (alpha & 0x80) | (r_y_h << 2) | (g_u_s >> 3); | 1344 | buf[0][offset] = (alpha & 0x80) | (r_y_h << 2) | (g_u_s >> 3); |
| 1345 | buf[0][offset + 1] = (g_u_s << 5) | b_v; | 1345 | buf[0][offset + 1] = (g_u_s << 5) | b_v; |
| @@ -1366,7 +1366,7 @@ static void gen_twopix(struct tpg_data *tpg, · 20 unmodified lines | |||
| 1366 | case V4L2_PIX_FMT_HSV32: | 1366 | case V4L2_PIX_FMT_HSV32: |
| 1367 | case V4L2_PIX_FMT_XYUV32: | 1367 | case V4L2_PIX_FMT_XYUV32: |
| 1368 | alpha = 0; | 1368 | alpha = 0; |
| 1369 | /* fall through */ | 1369 | fallthrough; |
| 1370 | case V4L2_PIX_FMT_YUV32: | 1370 | case V4L2_PIX_FMT_YUV32: |
| 1371 | case V4L2_PIX_FMT_ARGB32: | 1371 | case V4L2_PIX_FMT_ARGB32: |
| 1372 | case V4L2_PIX_FMT_AYUV32: | 1372 | case V4L2_PIX_FMT_AYUV32: |
| @@ -1377,7 +1377,7 @@ static void gen_twopix(struct tpg_data *tpg, · 4 unmodified lines | |||
| 1377 | break; | 1377 | break; |
| 1378 | case V4L2_PIX_FMT_RGBX32: | 1378 | case V4L2_PIX_FMT_RGBX32: |
| 1379 | alpha = 0; | 1379 | alpha = 0; |
| 1380 | /* fall through */ | 1380 | fallthrough; |
| 1381 | case V4L2_PIX_FMT_RGBA32: | 1381 | case V4L2_PIX_FMT_RGBA32: |
| 1382 | buf[0][offset] = r_y_h; | 1382 | buf[0][offset] = r_y_h; |
| 1383 | buf[0][offset + 1] = g_u_s; | 1383 | buf[0][offset + 1] = g_u_s; |
| @@ -1388,7 +1388,7 @@ static void gen_twopix(struct tpg_data *tpg, · 4 unmodified lines | |||
| 1388 | case V4L2_PIX_FMT_XBGR32: | 1388 | case V4L2_PIX_FMT_XBGR32: |
| 1389 | case V4L2_PIX_FMT_VUYX32: | 1389 | case V4L2_PIX_FMT_VUYX32: |
| 1390 | alpha = 0; | 1390 | alpha = 0; |
| 1391 | /* fall through */ | 1391 | fallthrough; |
| 1392 | case V4L2_PIX_FMT_ABGR32: | 1392 | case V4L2_PIX_FMT_ABGR32: |
| 1393 | case V4L2_PIX_FMT_VUYA32: | 1393 | case V4L2_PIX_FMT_VUYA32: |
| 1394 | buf[0][offset] = b_v; | 1394 | buf[0][offset] = b_v; |
| @@ -1398,7 +1398,7 @@ static void gen_twopix(struct tpg_data *tpg, · 3 unmodified lines | |||
| 1398 | break; | 1398 | break; |
| 1399 | case V4L2_PIX_FMT_BGRX32: | 1399 | case V4L2_PIX_FMT_BGRX32: |
| 1400 | alpha = 0; | 1400 | alpha = 0; |
| 1401 | /* fall through */ | 1401 | fallthrough; |
| 1402 | case V4L2_PIX_FMT_BGRA32: | 1402 | case V4L2_PIX_FMT_BGRA32: |
| 1403 | buf[0][offset] = alpha; | 1403 | buf[0][offset] = alpha; |
| 1404 | buf[0][offset + 1] = b_v; | 1404 | buf[0][offset + 1] = b_v; |
| @@ -546,7 +546,7 @@ static int dvb_net_ule_new_payload(struct dvb_net_ule_handle *h) · 545 unmodified lines | |||
| 546 | h->priv->ule_sndu_type_1 = 1; | 546 | h->priv->ule_sndu_type_1 = 1; |
| 547 | h->ts_remain -= 1; | 547 | h->ts_remain -= 1; |
| 548 | h->from_where += 1; | 548 | h->from_where += 1; |
| 549 | /* fallthrough */ | 549 | fallthrough; |
| 550 | case 0: | 550 | case 0: |
| 551 | h->new_ts = 1; | 551 | h->new_ts = 1; |
| 552 | h->ts += TS_SZ; | 552 | h->ts += TS_SZ; |
| @@ -773,7 +773,7 @@ static int bcm3510_init(struct dvb_frontend* fe) · 772 unmodified lines | |||
| 773 | deb_info("attempting to download firmware\n"); | 773 | deb_info("attempting to download firmware\n"); |
| 774 | if ((ret = bcm3510_init_cold(st)) < 0) | 774 | if ((ret = bcm3510_init_cold(st)) < 0) |
| 775 | return ret; | 775 | return ret; |
| 776 | /* fall-through */ | 776 | fallthrough; |
| 777 | case JDEC_EEPROM_LOAD_WAIT: | 777 | case JDEC_EEPROM_LOAD_WAIT: |
| 778 | deb_info("firmware is loaded\n"); | 778 | deb_info("firmware is loaded\n"); |
| 779 | bcm3510_check_firmware_version(st); | 779 | bcm3510_check_firmware_version(st); |
| @@ -1693,7 +1693,7 @@ static int dib0090_dc_offset_calibration(struct dib0090_state *state, enum front · 1692 unmodified lines | |||
| 1693 | if (state->identity.p1g) | 1693 | if (state->identity.p1g) |
| 1694 | state->dc = dc_p1g_table; | 1694 | state->dc = dc_p1g_table; |
| 1695 | 1695 | ||
| 1696 | /* fall through */ | 1696 | fallthrough; |
| 1697 | case CT_TUNER_STEP_0: | 1697 | case CT_TUNER_STEP_0: |
| 1698 | dprintk("Start/continue DC calibration for %s path\n", | 1698 | dprintk("Start/continue DC calibration for %s path\n", |
| 1699 | (state->dc->i == 1) ? "I" : "Q"); | 1699 | (state->dc->i == 1) ? "I" : "Q"); |
| @@ -224,7 +224,7 @@ static int dib3000mb_set_frontend(struct dvb_frontend *fe, int tuner) · 223 unmodified lines | |||
| 224 | switch (c->hierarchy) { | 224 | switch (c->hierarchy) { |
| 225 | case HIERARCHY_NONE: | 225 | case HIERARCHY_NONE: |
| 226 | deb_setf("hierarchy: none\n"); | 226 | deb_setf("hierarchy: none\n"); |
| 227 | /* fall through */ | 227 | fallthrough; |
| 228 | case HIERARCHY_1: | 228 | case HIERARCHY_1: |
| 229 | deb_setf("hierarchy: alpha=1\n"); | 229 | deb_setf("hierarchy: alpha=1\n"); |
| 230 | wr(DIB3000MB_REG_VIT_ALPHA, DIB3000_ALPHA_1); | 230 | wr(DIB3000MB_REG_VIT_ALPHA, DIB3000_ALPHA_1); |
| @@ -276,7 +276,7 @@ static int dib7000p_set_power_mode(struct dib7000p_state *state, enum dib7000p_p · 275 unmodified lines | |||
| 276 | if (state->version != SOC7090) | 276 | if (state->version != SOC7090) |
| 277 | reg_1280 &= ~((1 << 11)); | 277 | reg_1280 &= ~((1 << 11)); |
| 278 | reg_1280 &= ~(1 << 6); | 278 | reg_1280 &= ~(1 << 6); |
| 279 | /* fall-through */ | 279 | fallthrough; |
| 280 | case DIB7000P_POWER_INTERFACE_ONLY: | 280 | case DIB7000P_POWER_INTERFACE_ONLY: |
| 281 | /* just leave power on the control-interfaces: GPIO and (I2C or SDIO) */ | 281 | /* just leave power on the control-interfaces: GPIO and (I2C or SDIO) */ |
| 282 | /* TODO power up either SDIO or I2C */ | 282 | /* TODO power up either SDIO or I2C */ |
| @@ -2306,7 +2306,7 @@ hi_command(struct i2c_device_addr *dev_addr, const struct drxj_hi_cmd *cmd, u16 · 2305 unmodified lines | |||
| 2306 | pr_err("error %d\n", rc); | 2306 | pr_err("error %d\n", rc); |
| 2307 | goto rw_error; | 2307 | goto rw_error; |
| 2308 | } | 2308 | } |
| 2309 | /* fallthrough */ | 2309 | fallthrough; |
| 2310 | case SIO_HI_RA_RAM_CMD_BRDCTRL: | 2310 | case SIO_HI_RA_RAM_CMD_BRDCTRL: |
| 2311 | rc = drxj_dap_write_reg16(dev_addr, SIO_HI_RA_RAM_PAR_2__A, cmd->param2, 0); | 2311 | rc = drxj_dap_write_reg16(dev_addr, SIO_HI_RA_RAM_PAR_2__A, cmd->param2, 0); |
| 2312 | if (rc != 0) { | 2312 | if (rc != 0) { |
| @@ -2318,7 +2318,7 @@ hi_command(struct i2c_device_addr *dev_addr, const struct drxj_hi_cmd *cmd, u16 · 5 unmodified lines | |||
| 2318 | pr_err("error %d\n", rc); | 2318 | pr_err("error %d\n", rc); |
| 2319 | goto rw_error; | 2319 | goto rw_error; |
| 2320 | } | 2320 | } |
| 2321 | /* fallthrough */ | 2321 | fallthrough; |
| 2322 | case SIO_HI_RA_RAM_CMD_NULL: | 2322 | case SIO_HI_RA_RAM_CMD_NULL: |
| 2323 | /* No parameters */ | 2323 | /* No parameters */ |
| 2324 | break; | 2324 | break; |
| @@ -2841,7 +2841,7 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o · 516 unmodified lines | |||
| 2841 | /* coef = 188/204 */ | 2841 | /* coef = 188/204 */ |
| 2842 | max_bit_rate = | 2842 | max_bit_rate = |
| 2843 | (ext_attr->curr_symbol_rate / 8) * nr_bits * 188; | 2843 | (ext_attr->curr_symbol_rate / 8) * nr_bits * 188; |
| 2844 | /* fall-through - as b/c Annex A/C need following settings */ | 2844 | fallthrough; /* as b/c Annex A/C need following settings */ |
| 2845 | case DRX_STANDARD_ITU_B: | 2845 | case DRX_STANDARD_ITU_B: |
| 2846 | rc = drxj_dap_write_reg16(dev_addr, FEC_OC_FCT_USAGE__A, FEC_OC_FCT_USAGE__PRE, 0); | 2846 | rc = drxj_dap_write_reg16(dev_addr, FEC_OC_FCT_USAGE__A, FEC_OC_FCT_USAGE__PRE, 0); |
| 2847 | if (rc != 0) { | 2847 | if (rc != 0) { |
| @@ -3555,8 +3555,8 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg · 707 unmodified lines | |||
| 3555 | if (!ext_attr->has_smatx) | 3555 | if (!ext_attr->has_smatx) |
| 3556 | return -EIO; | 3556 | return -EIO; |
| 3557 | switch (uio_cfg->mode) { | 3557 | switch (uio_cfg->mode) { |
| 3558 | case DRX_UIO_MODE_FIRMWARE_SMA: /* fall through */ | 3558 | case DRX_UIO_MODE_FIRMWARE_SMA: |
| 3559 | case DRX_UIO_MODE_FIRMWARE_SAW: /* fall through */ | 3559 | case DRX_UIO_MODE_FIRMWARE_SAW: |
| 3560 | case DRX_UIO_MODE_READWRITE: | 3560 | case DRX_UIO_MODE_READWRITE: |
| 3561 | ext_attr->uio_sma_tx_mode = uio_cfg->mode; | 3561 | ext_attr->uio_sma_tx_mode = uio_cfg->mode; |
| 3562 | break; | 3562 | break; |
| @@ -3579,7 +3579,7 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg · 16 unmodified lines | |||
| 3579 | if (!ext_attr->has_smarx) | 3579 | if (!ext_attr->has_smarx) |
| 3580 | return -EIO; | 3580 | return -EIO; |
| 3581 | switch (uio_cfg->mode) { | 3581 | switch (uio_cfg->mode) { |
| 3582 | case DRX_UIO_MODE_FIRMWARE0: /* fall through */ | 3582 | case DRX_UIO_MODE_FIRMWARE0: |
| 3583 | case DRX_UIO_MODE_READWRITE: | 3583 | case DRX_UIO_MODE_READWRITE: |
| 3584 | ext_attr->uio_sma_rx_mode = uio_cfg->mode; | 3584 | ext_attr->uio_sma_rx_mode = uio_cfg->mode; |
| 3585 | break; | 3585 | break; |
| @@ -3603,7 +3603,7 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg · 17 unmodified lines | |||
| 3603 | if (!ext_attr->has_gpio) | 3603 | if (!ext_attr->has_gpio) |
| 3604 | return -EIO; | 3604 | return -EIO; |
| 3605 | switch (uio_cfg->mode) { | 3605 | switch (uio_cfg->mode) { |
| 3606 | case DRX_UIO_MODE_FIRMWARE0: /* fall through */ | 3606 | case DRX_UIO_MODE_FIRMWARE0: |
| 3607 | case DRX_UIO_MODE_READWRITE: | 3607 | case DRX_UIO_MODE_READWRITE: |
| 3608 | ext_attr->uio_gpio_mode = uio_cfg->mode; | 3608 | ext_attr->uio_gpio_mode = uio_cfg->mode; |
| 3609 | break; | 3609 | break; |
| @@ -3639,7 +3639,7 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg · 29 unmodified lines | |||
| 3639 | } | 3639 | } |
| 3640 | ext_attr->uio_irqn_mode = uio_cfg->mode; | 3640 | ext_attr->uio_irqn_mode = uio_cfg->mode; |
| 3641 | break; | 3641 | break; |
| 3642 | case DRX_UIO_MODE_FIRMWARE0: /* fall through */ | 3642 | case DRX_UIO_MODE_FIRMWARE0: |
| 3643 | default: | 3643 | default: |
| 3644 | return -EINVAL; | 3644 | return -EINVAL; |
| 3645 | break; | 3645 | break; |
| @@ -4004,31 +4004,36 @@ static int scu_command(struct i2c_device_addr *dev_addr, struct drxjscu_cmd *cmd · 358 unmodified lines | |||
| 4004 | if (rc != 0) { | 4004 | if (rc != 0) { |
| 4005 | pr_err("error %d\n", rc); | 4005 | pr_err("error %d\n", rc); |
| 4006 | goto rw_error; | 4006 | goto rw_error; |
| 4007 | } /* fallthrough */ | 4007 | } |
| 4008 | fallthrough; | ||
| 4008 | case 4: | 4009 | case 4: |
| 4009 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_3__A, *(cmd->parameter + 3), 0); | 4010 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_3__A, *(cmd->parameter + 3), 0); |
| 4010 | if (rc != 0) { | 4011 | if (rc != 0) { |
| 4011 | pr_err("error %d\n", rc); | 4012 | pr_err("error %d\n", rc); |
| 4012 | goto rw_error; | 4013 | goto rw_error; |
| 4013 | } /* fallthrough */ | 4014 | } |
| 4015 | fallthrough; | ||
| 4014 | case 3: | 4016 | case 3: |
| 4015 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_2__A, *(cmd->parameter + 2), 0); | 4017 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_2__A, *(cmd->parameter + 2), 0); |
| 4016 | if (rc != 0) { | 4018 | if (rc != 0) { |
| 4017 | pr_err("error %d\n", rc); | 4019 | pr_err("error %d\n", rc); |
| 4018 | goto rw_error; | 4020 | goto rw_error; |
| 4019 | } /* fallthrough */ | 4021 | } |
| 4022 | fallthrough; | ||
| 4020 | case 2: | 4023 | case 2: |
| 4021 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_1__A, *(cmd->parameter + 1), 0); | 4024 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_1__A, *(cmd->parameter + 1), 0); |
| 4022 | if (rc != 0) { | 4025 | if (rc != 0) { |
| 4023 | pr_err("error %d\n", rc); | 4026 | pr_err("error %d\n", rc); |
| 4024 | goto rw_error; | 4027 | goto rw_error; |
| 4025 | } /* fallthrough */ | 4028 | } |
| 4029 | fallthrough; | ||
| 4026 | case 1: | 4030 | case 1: |
| 4027 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_0__A, *(cmd->parameter + 0), 0); | 4031 | rc = drxj_dap_write_reg16(dev_addr, SCU_RAM_PARAM_0__A, *(cmd->parameter + 0), 0); |
| 4028 | if (rc != 0) { | 4032 | if (rc != 0) { |
| 4029 | pr_err("error %d\n", rc); | 4033 | pr_err("error %d\n", rc); |
| 4030 | goto rw_error; | 4034 | goto rw_error; |
| 4031 | } /* fallthrough */ | 4035 | } |
| 4036 | fallthrough; | ||
| 4032 | case 0: | 4037 | case 0: |
| 4033 | /* do nothing */ | 4038 | /* do nothing */ |
| 4034 | break; | 4039 | break; |
| @@ -4068,25 +4073,29 @@ static int scu_command(struct i2c_device_addr *dev_addr, struct drxjscu_cmd *cmd · 33 unmodified lines | |||
| 4068 | if (rc != 0) { | 4073 | if (rc != 0) { |
| 4069 | pr_err("error %d\n", rc); | 4074 | pr_err("error %d\n", rc); |
| 4070 | goto rw_error; | 4075 | goto rw_error; |
| 4071 | } /* fallthrough */ | 4076 | } |
| 4077 | fallthrough; | ||
| 4072 | case 3: | 4078 | case 3: |
| 4073 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_2__A, cmd->result + 2, 0); | 4079 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_2__A, cmd->result + 2, 0); |
| 4074 | if (rc != 0) { | 4080 | if (rc != 0) { |
| 4075 | pr_err("error %d\n", rc); | 4081 | pr_err("error %d\n", rc); |
| 4076 | goto rw_error; | 4082 | goto rw_error; |
| 4077 | } /* fallthrough */ | 4083 | } |
| 4084 | fallthrough; | ||
| 4078 | case 2: | 4085 | case 2: |
| 4079 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_1__A, cmd->result + 1, 0); | 4086 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_1__A, cmd->result + 1, 0); |
| 4080 | if (rc != 0) { | 4087 | if (rc != 0) { |
| 4081 | pr_err("error %d\n", rc); | 4088 | pr_err("error %d\n", rc); |
| 4082 | goto rw_error; | 4089 | goto rw_error; |
| 4083 | } /* fallthrough */ | 4090 | } |
| 4091 | fallthrough; | ||
| 4084 | case 1: | 4092 | case 1: |
| 4085 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_0__A, cmd->result + 0, 0); | 4093 | rc = drxj_dap_read_reg16(dev_addr, SCU_RAM_PARAM_0__A, cmd->result + 0, 0); |
| 4086 | if (rc != 0) { | 4094 | if (rc != 0) { |
| 4087 | pr_err("error %d\n", rc); | 4095 | pr_err("error %d\n", rc); |
| 4088 | goto rw_error; | 4096 | goto rw_error; |
| 4089 | } /* fallthrough */ | 4097 | } |
| 4098 | fallthrough; | ||
| 4090 | case 0: | 4099 | case 0: |
| 4091 | /* do nothing */ | 4100 | /* do nothing */ |
| 4092 | break; | 4101 | break; |
| @@ -4791,7 +4800,7 @@ set_frequency(struct drx_demod_instance *demod, · 698 unmodified lines | |||
| 4791 | Sound carrier is already 3Mhz above centre frequency due | 4800 | Sound carrier is already 3Mhz above centre frequency due |
| 4792 | to tuner setting so now add an extra shift of 1MHz... */ | 4801 | to tuner setting so now add an extra shift of 1MHz... */ |
| 4793 | fm_frequency_shift = 1000; | 4802 | fm_frequency_shift = 1000; |
| 4794 | /*fall through */ | 4803 | fallthrough; |
| 4795 | case DRX_STANDARD_ITU_B: | 4804 | case DRX_STANDARD_ITU_B: |
| 4796 | case DRX_STANDARD_NTSC: | 4805 | case DRX_STANDARD_NTSC: |
| 4797 | case DRX_STANDARD_PAL_SECAM_BG: | 4806 | case DRX_STANDARD_PAL_SECAM_BG: |
| @@ -10475,11 +10484,11 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) · 5677 unmodified lines | |||
| 10475 | (standard == DRX_STANDARD_NTSC)) { | 10484 | (standard == DRX_STANDARD_NTSC)) { |
| 10476 | switch (channel->bandwidth) { | 10485 | switch (channel->bandwidth) { |
| 10477 | case DRX_BANDWIDTH_6MHZ: | 10486 | case DRX_BANDWIDTH_6MHZ: |
| 10478 | case DRX_BANDWIDTH_UNKNOWN: /* fall through */ | 10487 | case DRX_BANDWIDTH_UNKNOWN: |
| 10479 | channel->bandwidth = DRX_BANDWIDTH_6MHZ; | 10488 | channel->bandwidth = DRX_BANDWIDTH_6MHZ; |
| 10480 | break; | 10489 | break; |
| 10481 | case DRX_BANDWIDTH_8MHZ: /* fall through */ | 10490 | case DRX_BANDWIDTH_8MHZ: |
| 10482 | case DRX_BANDWIDTH_7MHZ: /* fall through */ | 10491 | case DRX_BANDWIDTH_7MHZ: |
| 10483 | default: | 10492 | default: |
| 10484 | return -EINVAL; | 10493 | return -EINVAL; |
| 10485 | } | 10494 | } |
| @@ -10511,10 +10520,10 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) · 25 unmodified lines | |||
| 10511 | } | 10520 | } |
| 10512 | 10521 | ||
| 10513 | switch (channel->constellation) { | 10522 | switch (channel->constellation) { |
| 10514 | case DRX_CONSTELLATION_QAM16: /* fall through */ | 10523 | case DRX_CONSTELLATION_QAM16: |
| 10515 | case DRX_CONSTELLATION_QAM32: /* fall through */ | 10524 | case DRX_CONSTELLATION_QAM32: |
| 10516 | case DRX_CONSTELLATION_QAM64: /* fall through */ | 10525 | case DRX_CONSTELLATION_QAM64: |
| 10517 | case DRX_CONSTELLATION_QAM128: /* fall through */ | 10526 | case DRX_CONSTELLATION_QAM128: |
| 10518 | case DRX_CONSTELLATION_QAM256: | 10527 | case DRX_CONSTELLATION_QAM256: |
| 10519 | bandwidth_temp = channel->symbolrate * bw_rolloff_factor; | 10528 | bandwidth_temp = channel->symbolrate * bw_rolloff_factor; |
| 10520 | bandwidth = bandwidth_temp / 100; | 10529 | bandwidth = bandwidth_temp / 100; |
| @@ -10628,8 +10637,8 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) · 107 unmodified lines | |||
| 10628 | } | 10637 | } |
| 10629 | break; | 10638 | break; |
| 10630 | #ifndef DRXJ_VSB_ONLY | 10639 | #ifndef DRXJ_VSB_ONLY |
| 10631 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 10640 | case DRX_STANDARD_ITU_A: |
| 10632 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 10641 | case DRX_STANDARD_ITU_B: |
| 10633 | case DRX_STANDARD_ITU_C: | 10642 | case DRX_STANDARD_ITU_C: |
| 10634 | rc = set_qam_channel(demod, channel, tuner_freq_offset); | 10643 | rc = set_qam_channel(demod, channel, tuner_freq_offset); |
| 10635 | if (rc != 0) { | 10644 | if (rc != 0) { |
| @@ -10820,7 +10829,7 @@ ctrl_lock_status(struct drx_demod_instance *demod, enum drx_lock_status *lock_st · 184 unmodified lines | |||
| 10820 | SCU_RAM_COMMAND_CMD_DEMOD_GET_LOCK; | 10829 | SCU_RAM_COMMAND_CMD_DEMOD_GET_LOCK; |
| 10821 | break; | 10830 | break; |
| 10822 | #endif | 10831 | #endif |
| 10823 | case DRX_STANDARD_UNKNOWN: /* fallthrough */ | 10832 | case DRX_STANDARD_UNKNOWN: |
| 10824 | default: | 10833 | default: |
| 10825 | return -EIO; | 10834 | return -EIO; |
| 10826 | } | 10835 | } |
| @@ -10888,8 +10897,8 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) · 61 unmodified lines | |||
| 10888 | */ | 10897 | */ |
| 10889 | switch (prev_standard) { | 10898 | switch (prev_standard) { |
| 10890 | #ifndef DRXJ_VSB_ONLY | 10899 | #ifndef DRXJ_VSB_ONLY |
| 10891 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 10900 | case DRX_STANDARD_ITU_A: |
| 10892 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 10901 | case DRX_STANDARD_ITU_B: |
| 10893 | case DRX_STANDARD_ITU_C: | 10902 | case DRX_STANDARD_ITU_C: |
| 10894 | rc = power_down_qam(demod, false); | 10903 | rc = power_down_qam(demod, false); |
| 10895 | if (rc != 0) { | 10904 | if (rc != 0) { |
| @@ -10908,7 +10917,7 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) · 12 unmodified lines | |||
| 10908 | case DRX_STANDARD_UNKNOWN: | 10917 | case DRX_STANDARD_UNKNOWN: |
| 10909 | /* Do nothing */ | 10918 | /* Do nothing */ |
| 10910 | break; | 10919 | break; |
| 10911 | case DRX_STANDARD_AUTO: /* fallthrough */ | 10920 | case DRX_STANDARD_AUTO: |
| 10912 | default: | 10921 | default: |
| 10913 | return -EINVAL; | 10922 | return -EINVAL; |
| 10914 | } | 10923 | } |
| @@ -10921,8 +10930,8 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) · 6 unmodified lines | |||
| 10921 | 10930 | ||
| 10922 | switch (*standard) { | 10931 | switch (*standard) { |
| 10923 | #ifndef DRXJ_VSB_ONLY | 10932 | #ifndef DRXJ_VSB_ONLY |
| 10924 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 10933 | case DRX_STANDARD_ITU_A: |
| 10925 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 10934 | case DRX_STANDARD_ITU_B: |
| 10926 | case DRX_STANDARD_ITU_C: | 10935 | case DRX_STANDARD_ITU_C: |
| 10927 | do { | 10936 | do { |
| 10928 | u16 dummy; | 10937 | u16 dummy; |
| @@ -11111,12 +11120,12 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) · 182 unmodified lines | |||
| 11111 | goto rw_error; | 11120 | goto rw_error; |
| 11112 | } | 11121 | } |
| 11113 | break; | 11122 | break; |
| 11114 | case DRX_STANDARD_PAL_SECAM_BG: /* fallthrough */ | 11123 | case DRX_STANDARD_PAL_SECAM_BG: |
| 11115 | case DRX_STANDARD_PAL_SECAM_DK: /* fallthrough */ | 11124 | case DRX_STANDARD_PAL_SECAM_DK: |
| 11116 | case DRX_STANDARD_PAL_SECAM_I: /* fallthrough */ | 11125 | case DRX_STANDARD_PAL_SECAM_I: |
| 11117 | case DRX_STANDARD_PAL_SECAM_L: /* fallthrough */ | 11126 | case DRX_STANDARD_PAL_SECAM_L: |
| 11118 | case DRX_STANDARD_PAL_SECAM_LP: /* fallthrough */ | 11127 | case DRX_STANDARD_PAL_SECAM_LP: |
| 11119 | case DRX_STANDARD_NTSC: /* fallthrough */ | 11128 | case DRX_STANDARD_NTSC: |
| 11120 | case DRX_STANDARD_FM: | 11129 | case DRX_STANDARD_FM: |
| 11121 | rc = power_down_atv(demod, ext_attr->standard, true); | 11130 | rc = power_down_atv(demod, ext_attr->standard, true); |
| 11122 | if (rc != 0) { | 11131 | if (rc != 0) { |
| @@ -11127,7 +11136,7 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) · 4 unmodified lines | |||
| 11127 | case DRX_STANDARD_UNKNOWN: | 11136 | case DRX_STANDARD_UNKNOWN: |
| 11128 | /* Do nothing */ | 11137 | /* Do nothing */ |
| 11129 | break; | 11138 | break; |
| 11130 | case DRX_STANDARD_AUTO: /* fallthrough */ | 11139 | case DRX_STANDARD_AUTO: |
| 11131 | default: | 11140 | default: |
| 11132 | return -EIO; | 11141 | return -EIO; |
| 11133 | } | 11142 | } |
| @@ -11220,8 +11229,8 @@ ctrl_set_cfg_pre_saw(struct drx_demod_instance *demod, struct drxj_cfg_pre_saw * · 86 unmodified lines | |||
| 11220 | ext_attr->vsb_pre_saw_cfg = *pre_saw; | 11229 | ext_attr->vsb_pre_saw_cfg = *pre_saw; |
| 11221 | break; | 11230 | break; |
| 11222 | #ifndef DRXJ_VSB_ONLY | 11231 | #ifndef DRXJ_VSB_ONLY |
| 11223 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 11232 | case DRX_STANDARD_ITU_A: |
| 11224 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 11233 | case DRX_STANDARD_ITU_B: |
| 11225 | case DRX_STANDARD_ITU_C: | 11234 | case DRX_STANDARD_ITU_C: |
| 11226 | ext_attr->qam_pre_saw_cfg = *pre_saw; | 11235 | ext_attr->qam_pre_saw_cfg = *pre_saw; |
| 11227 | break; | 11236 | break; |
| @@ -11264,10 +11273,10 @@ ctrl_set_cfg_afe_gain(struct drx_demod_instance *demod, struct drxj_cfg_afe_gain · 36 unmodified lines | |||
| 11264 | ext_attr = (struct drxj_data *) demod->my_ext_attr; | 11273 | ext_attr = (struct drxj_data *) demod->my_ext_attr; |
| 11265 | 11274 | ||
| 11266 | switch (afe_gain->standard) { | 11275 | switch (afe_gain->standard) { |
| 11267 | case DRX_STANDARD_8VSB: /* fallthrough */ | 11276 | case DRX_STANDARD_8VSB: fallthrough; |
| 11268 | #ifndef DRXJ_VSB_ONLY | 11277 | #ifndef DRXJ_VSB_ONLY |
| 11269 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 11278 | case DRX_STANDARD_ITU_A: |
| 11270 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 11279 | case DRX_STANDARD_ITU_B: |
| 11271 | case DRX_STANDARD_ITU_C: | 11280 | case DRX_STANDARD_ITU_C: |
| 11272 | #endif | 11281 | #endif |
| 11273 | /* Do nothing */ | 11282 | /* Do nothing */ |
| @@ -11301,8 +11310,8 @@ ctrl_set_cfg_afe_gain(struct drx_demod_instance *demod, struct drxj_cfg_afe_gain · 27 unmodified lines | |||
| 11301 | ext_attr->vsb_pga_cfg = gain * 13 + 140; | 11310 | ext_attr->vsb_pga_cfg = gain * 13 + 140; |
| 11302 | break; | 11311 | break; |
| 11303 | #ifndef DRXJ_VSB_ONLY | 11312 | #ifndef DRXJ_VSB_ONLY |
| 11304 | case DRX_STANDARD_ITU_A: /* fallthrough */ | 11313 | case DRX_STANDARD_ITU_A: |
| 11305 | case DRX_STANDARD_ITU_B: /* fallthrough */ | 11314 | case DRX_STANDARD_ITU_B: |
| 11306 | case DRX_STANDARD_ITU_C: | 11315 | case DRX_STANDARD_ITU_C: |
| 11307 | ext_attr->qam_pga_cfg = gain * 13 + 140; | 11316 | ext_attr->qam_pga_cfg = gain * 13 + 140; |
| 11308 | break; | 11317 | break; |
| @@ -1512,14 +1512,14 @@ static int SetDeviceTypeId(struct drxd_state *state) · 1511 unmodified lines | |||
| 1512 | switch (deviceId) { | 1512 | switch (deviceId) { |
| 1513 | case 4: | 1513 | case 4: |
| 1514 | state->diversity = 1; | 1514 | state->diversity = 1; |
| 1515 | /* fall through */ | 1515 | fallthrough; |
| 1516 | case 3: | 1516 | case 3: |
| 1517 | case 7: | 1517 | case 7: |
| 1518 | state->PGA = 1; | 1518 | state->PGA = 1; |
| 1519 | break; | 1519 | break; |
| 1520 | case 6: | 1520 | case 6: |
| 1521 | state->diversity = 1; | 1521 | state->diversity = 1; |
| 1522 | /* fall through */ | 1522 | fallthrough; |
| 1523 | case 5: | 1523 | case 5: |
| 1524 | case 8: | 1524 | case 8: |
| 1525 | break; | 1525 | break; |
| @@ -1966,7 +1966,7 @@ static int DRX_Start(struct drxd_state *state, s32 off) · 440 unmodified lines | |||
| 1966 | switch (p->transmission_mode) { | 1966 | switch (p->transmission_mode) { |
| 1967 | default: /* Not set, detect it automatically */ | 1967 | default: /* Not set, detect it automatically */ |
| 1968 | operationMode |= SC_RA_RAM_OP_AUTO_MODE__M; | 1968 | operationMode |= SC_RA_RAM_OP_AUTO_MODE__M; |
| 1969 | /* fall through - try first guess DRX_FFTMODE_8K */ | 1969 | fallthrough; /* try first guess DRX_FFTMODE_8K */ |
| 1970 | case TRANSMISSION_MODE_8K: | 1970 | case TRANSMISSION_MODE_8K: |
| 1971 | transmissionParams |= SC_RA_RAM_OP_PARAM_MODE_8K; | 1971 | transmissionParams |= SC_RA_RAM_OP_PARAM_MODE_8K; |
| 1972 | if (state->type_A) { | 1972 | if (state->type_A) { |
| @@ -2139,7 +2139,7 @@ static int DRX_Start(struct drxd_state *state, s32 off) · 166 unmodified lines | |||
| 2139 | switch (p->modulation) { | 2139 | switch (p->modulation) { |
| 2140 | default: | 2140 | default: |
| 2141 | operationMode |= SC_RA_RAM_OP_AUTO_CONST__M; | 2141 | operationMode |= SC_RA_RAM_OP_AUTO_CONST__M; |
| 2142 | /* fall through - try first guess DRX_CONSTELLATION_QAM64 */ | 2142 | fallthrough; /* try first guess DRX_CONSTELLATION_QAM64 */ |
| 2143 | case QAM_64: | 2143 | case QAM_64: |
| 2144 | transmissionParams |= SC_RA_RAM_OP_PARAM_CONST_QAM64; | 2144 | transmissionParams |= SC_RA_RAM_OP_PARAM_CONST_QAM64; |
| 2145 | if (state->type_A) { | 2145 | if (state->type_A) { |
| @@ -2266,7 +2266,7 @@ static int DRX_Start(struct drxd_state *state, s32 off) · 120 unmodified lines | |||
| 2266 | break; | 2266 | break; |
| 2267 | default: | 2267 | default: |
| 2268 | operationMode |= SC_RA_RAM_OP_AUTO_RATE__M; | 2268 | operationMode |= SC_RA_RAM_OP_AUTO_RATE__M; |
| 2269 | /* fall through */ | 2269 | fallthrough; |
| 2270 | case FEC_2_3: | 2270 | case FEC_2_3: |
| 2271 | transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_2_3; | 2271 | transmissionParams |= SC_RA_RAM_OP_PARAM_RATE_2_3; |
| 2272 | if (state->type_A) | 2272 | if (state->type_A) |
| @@ -2301,7 +2301,7 @@ static int DRX_Start(struct drxd_state *state, s32 off) · 28 unmodified lines | |||
| 2301 | switch (p->bandwidth_hz) { | 2301 | switch (p->bandwidth_hz) { |
| 2302 | case 0: | 2302 | case 0: |
| 2303 | p->bandwidth_hz = 8000000; | 2303 | p->bandwidth_hz = 8000000; |
| 2304 | /* fall through */ | 2304 | fallthrough; |
| 2305 | case 8000000: | 2305 | case 8000000: |
| 2306 | /* (64/7)*(8/8)*1000000 */ | 2306 | /* (64/7)*(8/8)*1000000 */ |
| 2307 | bandwidth = DRXD_BANDWIDTH_8MHZ_IN_HZ; | 2307 | bandwidth = DRXD_BANDWIDTH_8MHZ_IN_HZ; |
| @@ -1756,7 +1756,7 @@ static int setoperation_mode(struct drxk_state *state, · 1755 unmodified lines | |||
| 1756 | goto error; | 1756 | goto error; |
| 1757 | state->m_operation_mode = OM_NONE; | 1757 | state->m_operation_mode = OM_NONE; |
| 1758 | break; | 1758 | break; |
| 1759 | case OM_QAM_ITU_A: /* fallthrough */ | 1759 | case OM_QAM_ITU_A: |
| 1760 | case OM_QAM_ITU_C: | 1760 | case OM_QAM_ITU_C: |
| 1761 | status = mpegts_stop(state); | 1761 | status = mpegts_stop(state); |
| 1762 | if (status < 0) | 1762 | if (status < 0) |
| @@ -1783,7 +1783,7 @@ static int setoperation_mode(struct drxk_state *state, · 20 unmodified lines | |||
| 1783 | if (status < 0) | 1783 | if (status < 0) |
| 1784 | goto error; | 1784 | goto error; |
| 1785 | break; | 1785 | break; |
| 1786 | case OM_QAM_ITU_A: /* fallthrough */ | 1786 | case OM_QAM_ITU_A: |
| 1787 | case OM_QAM_ITU_C: | 1787 | case OM_QAM_ITU_C: |
| 1788 | dprintk(1, ": DVB-C Annex %c\n", | 1788 | dprintk(1, ": DVB-C Annex %c\n", |
| 1789 | (state->m_operation_mode == OM_QAM_ITU_A) ? 'A' : 'C'); | 1789 | (state->m_operation_mode == OM_QAM_ITU_A) ? 'A' : 'C'); |
| @@ -2012,7 +2012,7 @@ static int mpegts_dto_setup(struct drxk_state *state, · 222 unmodified lines | |||
| 2012 | fec_oc_rcn_ctl_rate = 0xC00000; | 2012 | fec_oc_rcn_ctl_rate = 0xC00000; |
| 2013 | static_clk = state->m_dvbt_static_clk; | 2013 | static_clk = state->m_dvbt_static_clk; |
| 2014 | break; | 2014 | break; |
| 2015 | case OM_QAM_ITU_A: /* fallthrough */ | 2015 | case OM_QAM_ITU_A: |
| 2016 | case OM_QAM_ITU_C: | 2016 | case OM_QAM_ITU_C: |
| 2017 | fec_oc_tmd_mode = 0x0004; | 2017 | fec_oc_tmd_mode = 0x0004; |
| 2018 | fec_oc_rcn_ctl_rate = 0xD2B4EE; /* good for >63 Mb/s */ | 2018 | fec_oc_rcn_ctl_rate = 0xD2B4EE; /* good for >63 Mb/s */ |
| @@ -3249,11 +3249,11 @@ static int dvbt_sc_command(struct drxk_state *state, · 1230 unmodified lines | |||
| 3249 | case OFDM_SC_RA_RAM_CMD_SET_PREF_PARAM: | 3249 | case OFDM_SC_RA_RAM_CMD_SET_PREF_PARAM: |
| 3250 | case OFDM_SC_RA_RAM_CMD_PROGRAM_PARAM: | 3250 | case OFDM_SC_RA_RAM_CMD_PROGRAM_PARAM: |
| 3251 | status |= write16(state, OFDM_SC_RA_RAM_PARAM1__A, param1); | 3251 | status |= write16(state, OFDM_SC_RA_RAM_PARAM1__A, param1); |
| 3252 | /* fall through - All commands using 1 parameters */ | 3252 | fallthrough; /* All commands using 1 parameters */ |
| 3253 | case OFDM_SC_RA_RAM_CMD_SET_ECHO_TIMING: | 3253 | case OFDM_SC_RA_RAM_CMD_SET_ECHO_TIMING: |
| 3254 | case OFDM_SC_RA_RAM_CMD_USER_IO: | 3254 | case OFDM_SC_RA_RAM_CMD_USER_IO: |
| 3255 | status |= write16(state, OFDM_SC_RA_RAM_PARAM0__A, param0); | 3255 | status |= write16(state, OFDM_SC_RA_RAM_PARAM0__A, param0); |
| 3256 | /* fall through - All commands using 0 parameters */ | 3256 | fallthrough; /* All commands using 0 parameters */ |
| 3257 | case OFDM_SC_RA_RAM_CMD_GET_OP_PARAM: | 3257 | case OFDM_SC_RA_RAM_CMD_GET_OP_PARAM: |
| 3258 | case OFDM_SC_RA_RAM_CMD_NULL: | 3258 | case OFDM_SC_RA_RAM_CMD_NULL: |
| 3259 | /* Write command */ | 3259 | /* Write command */ |
| @@ -3761,7 +3761,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 501 unmodified lines | |||
| 3761 | case TRANSMISSION_MODE_AUTO: | 3761 | case TRANSMISSION_MODE_AUTO: |
| 3762 | default: | 3762 | default: |
| 3763 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_MODE__M; | 3763 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_MODE__M; |
| 3764 | /* fall through - try first guess DRX_FFTMODE_8K */ | 3764 | fallthrough; /* try first guess DRX_FFTMODE_8K */ |
| 3765 | case TRANSMISSION_MODE_8K: | 3765 | case TRANSMISSION_MODE_8K: |
| 3766 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_MODE_8K; | 3766 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_MODE_8K; |
| 3767 | break; | 3767 | break; |
| @@ -3775,7 +3775,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 7 unmodified lines | |||
| 3775 | default: | 3775 | default: |
| 3776 | case GUARD_INTERVAL_AUTO: | 3776 | case GUARD_INTERVAL_AUTO: |
| 3777 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_GUARD__M; | 3777 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_GUARD__M; |
| 3778 | /* fall through - try first guess DRX_GUARD_1DIV4 */ | 3778 | fallthrough; /* try first guess DRX_GUARD_1DIV4 */ |
| 3779 | case GUARD_INTERVAL_1_4: | 3779 | case GUARD_INTERVAL_1_4: |
| 3780 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_GUARD_4; | 3780 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_GUARD_4; |
| 3781 | break; | 3781 | break; |
| @@ -3798,7 +3798,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 16 unmodified lines | |||
| 3798 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_HIER__M; | 3798 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_HIER__M; |
| 3799 | /* try first guess SC_RA_RAM_OP_PARAM_HIER_NO */ | 3799 | /* try first guess SC_RA_RAM_OP_PARAM_HIER_NO */ |
| 3800 | /* transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_HIER_NO; */ | 3800 | /* transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_HIER_NO; */ |
| 3801 | /* fall through */ | 3801 | fallthrough; |
| 3802 | case HIERARCHY_1: | 3802 | case HIERARCHY_1: |
| 3803 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_HIER_A1; | 3803 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_HIER_A1; |
| 3804 | break; | 3804 | break; |
| @@ -3816,7 +3816,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 11 unmodified lines | |||
| 3816 | case QAM_AUTO: | 3816 | case QAM_AUTO: |
| 3817 | default: | 3817 | default: |
| 3818 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_CONST__M; | 3818 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_CONST__M; |
| 3819 | /* fall through - try first guess DRX_CONSTELLATION_QAM64 */ | 3819 | fallthrough; /* try first guess DRX_CONSTELLATION_QAM64 */ |
| 3820 | case QAM_64: | 3820 | case QAM_64: |
| 3821 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_CONST_QAM64; | 3821 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_CONST_QAM64; |
| 3822 | break; | 3822 | break; |
| @@ -3841,7 +3841,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 18 unmodified lines | |||
| 3841 | WR16(dev_addr, OFDM_EC_SB_PRIOR__A, | 3841 | WR16(dev_addr, OFDM_EC_SB_PRIOR__A, |
| 3842 | OFDM_EC_SB_PRIOR_HI)); | 3842 | OFDM_EC_SB_PRIOR_HI)); |
| 3843 | break; | 3843 | break; |
| 3844 | case DRX_PRIORITY_UNKNOWN: /* fall through */ | 3844 | case DRX_PRIORITY_UNKNOWN: |
| 3845 | default: | 3845 | default: |
| 3846 | status = -EINVAL; | 3846 | status = -EINVAL; |
| 3847 | goto error; | 3847 | goto error; |
| @@ -3859,7 +3859,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 11 unmodified lines | |||
| 3859 | case FEC_AUTO: | 3859 | case FEC_AUTO: |
| 3860 | default: | 3860 | default: |
| 3861 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_RATE__M; | 3861 | operation_mode |= OFDM_SC_RA_RAM_OP_AUTO_RATE__M; |
| 3862 | /* fall through - try first guess DRX_CODERATE_2DIV3 */ | 3862 | fallthrough; /* try first guess DRX_CODERATE_2DIV3 */ |
| 3863 | case FEC_2_3: | 3863 | case FEC_2_3: |
| 3864 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_RATE_2_3; | 3864 | transmission_params |= OFDM_SC_RA_RAM_OP_PARAM_RATE_2_3; |
| 3865 | break; | 3865 | break; |
| @@ -3893,7 +3893,7 @@ static int set_dvbt(struct drxk_state *state, u16 intermediate_freqk_hz, · 27 unmodified lines | |||
| 3893 | switch (state->props.bandwidth_hz) { | 3893 | switch (state->props.bandwidth_hz) { |
| 3894 | case 0: | 3894 | case 0: |
| 3895 | state->props.bandwidth_hz = 8000000; | 3895 | state->props.bandwidth_hz = 8000000; |
| 3896 | /* fall through */ | 3896 | fallthrough; |
| 3897 | case 8000000: | 3897 | case 8000000: |
| 3898 | bandwidth = DRXK_BANDWIDTH_8MHZ_IN_HZ; | 3898 | bandwidth = DRXK_BANDWIDTH_8MHZ_IN_HZ; |
| 3899 | status = write16(state, OFDM_SC_RA_RAM_SRMM_FIX_FACT_8K__A, | 3899 | status = write16(state, OFDM_SC_RA_RAM_SRMM_FIX_FACT_8K__A, |
| @@ -768,7 +768,7 @@ static int lgdt3306a_set_if(struct lgdt3306a_state *state, · 767 unmodified lines | |||
| 768 | default: | 768 | default: |
| 769 | pr_warn("IF=%d KHz is not supported, 3250 assumed\n", | 769 | pr_warn("IF=%d KHz is not supported, 3250 assumed\n", |
| 770 | if_freq_khz); | 770 | if_freq_khz); |
| 771 | /* fallthrough */ | 771 | fallthrough; |
| 772 | case 3250: /* 3.25Mhz */ | 772 | case 3250: /* 3.25Mhz */ |
| 773 | nco1 = 0x34; | 773 | nco1 = 0x34; |
| 774 | nco2 = 0x00; | 774 | nco2 = 0x00; |
| @@ -201,7 +201,7 @@ static int mt352_set_parameters(struct dvb_frontend *fe) · 200 unmodified lines | |||
| 201 | if (op->hierarchy == HIERARCHY_AUTO || | 201 | if (op->hierarchy == HIERARCHY_AUTO || |
| 202 | op->hierarchy == HIERARCHY_NONE) | 202 | op->hierarchy == HIERARCHY_NONE) |
| 203 | break; | 203 | break; |
| 204 | /* fall through */ | 204 | fallthrough; |
| 205 | default: | 205 | default: |
| 206 | return -EINVAL; | 206 | return -EINVAL; |
| 207 | } | 207 | } |
| @@ -739,7 +739,7 @@ static int get_frontend(struct dvb_frontend *fe, · 738 unmodified lines | |||
| 739 | default: | 739 | default: |
| 740 | break; | 740 | break; |
| 741 | } | 741 | } |
| 742 | /* Fall through */ | 742 | fallthrough; |
| 743 | case SYS_DVBS: | 743 | case SYS_DVBS: |
| 744 | switch ((enum MXL_HYDRA_MODULATION_E) | 744 | switch ((enum MXL_HYDRA_MODULATION_E) |
| 745 | reg_data[DMD_MODULATION_SCHEME_ADDR]) { | 745 | reg_data[DMD_MODULATION_SCHEME_ADDR]) { |
| @@ -482,7 +482,7 @@ start: · 481 unmodified lines | |||
| 482 | switch (reg&0xff) { | 482 | switch (reg&0xff) { |
| 483 | case 0x06: | 483 | case 0x06: |
| 484 | if (reg & 0x1000) usK = 3 << 24; | 484 | if (reg & 0x1000) usK = 3 << 24; |
| 485 | /* fall through */ | 485 | fallthrough; |
| 486 | case 0x43: /* QAM64 */ | 486 | case 0x43: /* QAM64 */ |
| 487 | c = 150204167; | 487 | c = 150204167; |
| 488 | break; | 488 | break; |
| @@ -398,7 +398,7 @@ static int s5h1411_set_if_freq(struct dvb_frontend *fe, int KHz) · 397 unmodified lines | |||
| 398 | default: | 398 | default: |
| 399 | dprintk("%s(%d KHz) Invalid, defaulting to 5380\n", | 399 | dprintk("%s(%d KHz) Invalid, defaulting to 5380\n", |
| 400 | __func__, KHz); | 400 | __func__, KHz); |
| 401 | /* fall through */ | 401 | fallthrough; |
| 402 | case 5380: | 402 | case 5380: |
| 403 | case 44000: | 403 | case 44000: |
| 404 | s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0x38, 0x1be4); | 404 | s5h1411_writereg(state, S5H1411_I2C_TOP_ADDR, 0x38, 0x1be4); |
| @@ -201,7 +201,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe) · 200 unmodified lines | |||
| 201 | break; | 201 | break; |
| 202 | default: | 202 | default: |
| 203 | c->bandwidth_hz = 8000000; | 203 | c->bandwidth_hz = 8000000; |
| 204 | /* fall through */ | 204 | fallthrough; |
| 205 | case 8000000: | 205 | case 8000000: |
| 206 | zl10353_single_write(fe, MCLK_RATIO, 0x75); | 206 | zl10353_single_write(fe, MCLK_RATIO, 0x75); |
| 207 | zl10353_single_write(fe, 0x64, 0x36); | 207 | zl10353_single_write(fe, 0x64, 0x36); |
| @@ -258,7 +258,7 @@ static int zl10353_set_parameters(struct dvb_frontend *fe) · 50 unmodified lines | |||
| 258 | if (c->hierarchy == HIERARCHY_AUTO || | 258 | if (c->hierarchy == HIERARCHY_AUTO || |
| 259 | c->hierarchy == HIERARCHY_NONE) | 259 | c->hierarchy == HIERARCHY_NONE) |
| 260 | break; | 260 | break; |
| 261 | /* fall through */ | 261 | fallthrough; |
| 262 | default: | 262 | default: |
| 263 | return -EINVAL; | 263 | return -EINVAL; |
| 264 | } | 264 | } |
| @@ -2209,7 +2209,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) · 2208 unmodified lines | |||
| 2209 | ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ | 2209 | ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ |
| 2210 | ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ | 2210 | ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
| 2211 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; | 2211 | ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; |
| 2212 | /* fall-through */ | 2212 | fallthrough; |
| 2213 | case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: | 2213 | case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP: |
| 2214 | ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ | 2214 | ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */ |
| 2215 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ | 2215 | ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ |
| @@ -2370,7 +2370,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) · 154 unmodified lines | |||
| 2370 | /* Currently only enabled for the integrated IR controller */ | 2370 | /* Currently only enabled for the integrated IR controller */ |
| 2371 | if (!enable_885_ir) | 2371 | if (!enable_885_ir) |
| 2372 | break; | 2372 | break; |
| 2373 | /* fall-through */ | 2373 | fallthrough; |
| 2374 | case CX23885_BOARD_HAUPPAUGE_HVR1250: | 2374 | case CX23885_BOARD_HAUPPAUGE_HVR1250: |
| 2375 | case CX23885_BOARD_HAUPPAUGE_HVR1800: | 2375 | case CX23885_BOARD_HAUPPAUGE_HVR1800: |
| 2376 | case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: | 2376 | case CX23885_BOARD_HAUPPAUGE_IMPACTVCBE: |
| @@ -1310,7 +1310,7 @@ static void dvb_input_detach(struct ddb_input *input) · 1309 unmodified lines | |||
| 1310 | dvb_unregister_frontend(dvb->fe2); | 1310 | dvb_unregister_frontend(dvb->fe2); |
| 1311 | if (dvb->fe) | 1311 | if (dvb->fe) |
| 1312 | dvb_unregister_frontend(dvb->fe); | 1312 | dvb_unregister_frontend(dvb->fe); |
| 1313 | /* fallthrough */ | 1313 | fallthrough; |
| 1314 | case 0x30: | 1314 | case 0x30: |
| 1315 | dvb_module_release(dvb->i2c_client[0]); | 1315 | dvb_module_release(dvb->i2c_client[0]); |
| 1316 | dvb->i2c_client[0] = NULL; | 1316 | dvb->i2c_client[0] = NULL; |
| @@ -1321,22 +1321,22 @@ static void dvb_input_detach(struct ddb_input *input) · 4 unmodified lines | |||
| 1321 | dvb_frontend_detach(dvb->fe); | 1321 | dvb_frontend_detach(dvb->fe); |
| 1322 | dvb->fe = NULL; | 1322 | dvb->fe = NULL; |
| 1323 | dvb->fe2 = NULL; | 1323 | dvb->fe2 = NULL; |
| 1324 | /* fallthrough */ | 1324 | fallthrough; |
| 1325 | case 0x20: | 1325 | case 0x20: |
| 1326 | dvb_net_release(&dvb->dvbnet); | 1326 | dvb_net_release(&dvb->dvbnet); |
| 1327 | /* fallthrough */ | 1327 | fallthrough; |
| 1328 | case 0x12: | 1328 | case 0x12: |
| 1329 | dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, | 1329 | dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, |
| 1330 | &dvb->hw_frontend); | 1330 | &dvb->hw_frontend); |
| 1331 | dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, | 1331 | dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, |
| 1332 | &dvb->mem_frontend); | 1332 | &dvb->mem_frontend); |
| 1333 | /* fallthrough */ | 1333 | fallthrough; |
| 1334 | case 0x11: | 1334 | case 0x11: |
| 1335 | dvb_dmxdev_release(&dvb->dmxdev); | 1335 | dvb_dmxdev_release(&dvb->dmxdev); |
| 1336 | /* fallthrough */ | 1336 | fallthrough; |
| 1337 | case 0x10: | 1337 | case 0x10: |
| 1338 | dvb_dmx_release(&dvb->demux); | 1338 | dvb_dmx_release(&dvb->demux); |
| 1339 | /* fallthrough */ | 1339 | fallthrough; |
| 1340 | case 0x01: | 1340 | case 0x01: |
| 1341 | break; | 1341 | break; |
| 1342 | } | 1342 | } |
| @@ -1559,7 +1559,7 @@ static int dvb_input_attach(struct ddb_input *input) · 216 unmodified lines | |||
| 1559 | osc24 = 0; | 1559 | osc24 = 0; |
| 1560 | else | 1560 | else |
| 1561 | osc24 = 1; | 1561 | osc24 = 1; |
| 1562 | /* fall-through */ | 1562 | fallthrough; |
| 1563 | case DDB_TUNER_DVBCT2_SONY_P: | 1563 | case DDB_TUNER_DVBCT2_SONY_P: |
| 1564 | case DDB_TUNER_DVBC2T2_SONY_P: | 1564 | case DDB_TUNER_DVBC2T2_SONY_P: |
| 1565 | case DDB_TUNER_ISDBT_SONY_P: | 1565 | case DDB_TUNER_ISDBT_SONY_P: |
| @@ -1575,7 +1575,7 @@ static int dvb_input_attach(struct ddb_input *input) · 9 unmodified lines | |||
| 1575 | break; | 1575 | break; |
| 1576 | case DDB_TUNER_DVBC2T2I_SONY: | 1576 | case DDB_TUNER_DVBC2T2I_SONY: |
| 1577 | osc24 = 1; | 1577 | osc24 = 1; |
| 1578 | /* fall-through */ | 1578 | fallthrough; |
| 1579 | case DDB_TUNER_DVBCT2_SONY: | 1579 | case DDB_TUNER_DVBCT2_SONY: |
| 1580 | case DDB_TUNER_DVBC2T2_SONY: | 1580 | case DDB_TUNER_DVBC2T2_SONY: |
| 1581 | case DDB_TUNER_ISDBT_SONY: | 1581 | case DDB_TUNER_ISDBT_SONY: |
| @@ -2036,7 +2036,7 @@ static int ddb_port_attach(struct ddb_port *port) · 454 unmodified lines | |||
| 2036 | ret = ddb_ci_attach(port, ci_bitrate); | 2036 | ret = ddb_ci_attach(port, ci_bitrate); |
| 2037 | if (ret < 0) | 2037 | if (ret < 0) |
| 2038 | break; | 2038 | break; |
| 2039 | /* fall-through */ | 2039 | fallthrough; |
| 2040 | case DDB_PORT_LOOP: | 2040 | case DDB_PORT_LOOP: |
| 2041 | ret = dvb_register_device(port->dvb[0].adap, | 2041 | ret = dvb_register_device(port->dvb[0].adap, |
| 2042 | &port->dvb[0].dev, | 2042 | &port->dvb[0].dev, |
| @@ -2432,7 +2432,8 @@ void ddb_ports_init(struct ddb *dev) · 389 unmodified lines | |||
| 2432 | ddb_input_init(port, 4 + i, 1, 4 + i); | 2432 | ddb_input_init(port, 4 + i, 1, 4 + i); |
| 2433 | ddb_output_init(port, i); | 2433 | ddb_output_init(port, i); |
| 2434 | break; | 2434 | break; |
| 2435 | } /* fallthrough */ | 2435 | } |
| 2436 | fallthrough; | ||
| 2436 | case DDB_OCTOPUS: | 2437 | case DDB_OCTOPUS: |
| 2437 | ddb_input_init(port, 2 * i, 0, 2 * i); | 2438 | ddb_input_init(port, 2 * i, 0, 2 * i); |
| 2438 | ddb_input_init(port, 2 * i + 1, 1, 2 * i + 1); | 2439 | ddb_input_init(port, 2 * i + 1, 1, 2 * i + 1); |
| @@ -3417,7 +3418,7 @@ int ddb_exit_ddbridge(int stage, int error) · 978 unmodified lines | |||
| 3417 | default: | 3418 | default: |
| 3418 | case 2: | 3419 | case 2: |
| 3419 | destroy_workqueue(ddb_wq); | 3420 | destroy_workqueue(ddb_wq); |
| 3420 | /* fall-through */ | 3421 | fallthrough; |
| 3421 | case 1: | 3422 | case 1: |
| 3422 | ddb_class_destroy(); | 3423 | ddb_class_destroy(); |
| 3423 | break; | 3424 | break; |
| @@ -952,7 +952,7 @@ static int meyeioc_sync(struct file *file, void *fh, int *i) · 951 unmodified lines | |||
| 952 | mutex_unlock(&meye.lock); | 952 | mutex_unlock(&meye.lock); |
| 953 | return -EINTR; | 953 | return -EINTR; |
| 954 | } | 954 | } |
| 955 | /* fall through */ | 955 | fallthrough; |
| 956 | case MEYE_BUF_DONE: | 956 | case MEYE_BUF_DONE: |
| 957 | meye.grab_buffer[*i].state = MEYE_BUF_UNUSED; | 957 | meye.grab_buffer[*i].state = MEYE_BUF_UNUSED; |
| 958 | if (kfifo_out_locked(&meye.doneq, (unsigned char *)&unused, | 958 | if (kfifo_out_locked(&meye.doneq, (unsigned char *)&unused, |
| @@ -637,7 +637,7 @@ static void gpioirq(unsigned long cookie) · 636 unmodified lines | |||
| 637 | iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); | 637 | iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); |
| 638 | break; | 638 | break; |
| 639 | } | 639 | } |
| 640 | /* fall through */ | 640 | fallthrough; |
| 641 | 641 | ||
| 642 | case DATA_TS_RECORD: | 642 | case DATA_TS_RECORD: |
| 643 | case DATA_PES_RECORD: | 643 | case DATA_PES_RECORD: |
| @@ -2176,7 +2176,7 @@ static int frontend_init(struct av7110 *av7110) · 1532 unmodified lines | |||
| 2176 | break; | 2176 | break; |
| 2177 | } | 2177 | } |
| 2178 | } | 2178 | } |
| 2179 | /* fall-thru */ | 2179 | fallthrough; |
| 2180 | 2180 | ||
| 2181 | case 0x0008: // Hauppauge/TT DVB-T | 2181 | case 0x0008: // Hauppauge/TT DVB-T |
| 2182 | // Grundig 29504-401 | 2182 | // Grundig 29504-401 |
| @@ -1107,7 +1107,7 @@ int av7110_osd_cmd(struct av7110 *av7110, osd_cmd_t *dc) · 1106 unmodified lines | |||
| 1107 | break; | 1107 | break; |
| 1108 | case OSD_SetRow: | 1108 | case OSD_SetRow: |
| 1109 | dc->y1 = dc->y0; | 1109 | dc->y1 = dc->y0; |
| 1110 | /* fall through */ | 1110 | fallthrough; |
| 1111 | case OSD_SetBlock: | 1111 | case OSD_SetBlock: |
| 1112 | ret = OSDSetBlock(av7110, dc->x0, dc->y0, dc->x1, dc->y1, dc->color, dc->data); | 1112 | ret = OSDSetBlock(av7110, dc->x0, dc->y0, dc->x1, dc->y1, dc->color, dc->data); |
| 1113 | break; | 1113 | break; |
| @@ -182,7 +182,7 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) · 181 unmodified lines | |||
| 182 | case DSM_CC_STREAM : | 182 | case DSM_CC_STREAM : |
| 183 | case ISO13522_STREAM: | 183 | case ISO13522_STREAM: |
| 184 | p->done = 1; | 184 | p->done = 1; |
| 185 | /* fall through */ | 185 | fallthrough; |
| 186 | case PRIVATE_STREAM1: | 186 | case PRIVATE_STREAM1: |
| 187 | case VIDEO_STREAM_S ... VIDEO_STREAM_E: | 187 | case VIDEO_STREAM_S ... VIDEO_STREAM_E: |
| 188 | case AUDIO_STREAM_S ... AUDIO_STREAM_E: | 188 | case AUDIO_STREAM_S ... AUDIO_STREAM_E: |
| @@ -1226,7 +1226,7 @@ static void frontend_init(struct budget_av *budget_av) · 1225 unmodified lines | |||
| 1226 | * but so far it has been only confirmed for this type | 1226 | * but so far it has been only confirmed for this type |
| 1227 | */ | 1227 | */ |
| 1228 | budget_av->reinitialise_demod = 1; | 1228 | budget_av->reinitialise_demod = 1; |
| 1229 | /* fall through */ | 1229 | fallthrough; |
| 1230 | case SUBID_DVBS_KNC1_PLUS: | 1230 | case SUBID_DVBS_KNC1_PLUS: |
| 1231 | case SUBID_DVBS_EASYWATCH_1: | 1231 | case SUBID_DVBS_EASYWATCH_1: |
| 1232 | if (saa->pci->subsystem_vendor == 0x1894) { | 1232 | if (saa->pci->subsystem_vendor == 0x1894) { |
| @@ -613,7 +613,7 @@ static void frontend_init(struct budget *budget) · 612 unmodified lines | |||
| 613 | break; | 613 | break; |
| 614 | } | 614 | } |
| 615 | } | 615 | } |
| 616 | /* fall through */ | 616 | fallthrough; |
| 617 | case 0x1018: // TT Budget-S-1401 (philips tda10086/philips tda8262) | 617 | case 0x1018: // TT Budget-S-1401 (philips tda10086/philips tda8262) |
| 618 | { | 618 | { |
| 619 | struct dvb_frontend *fe; | 619 | struct dvb_frontend *fe; |
| @@ -638,7 +638,7 @@ static void frontend_init(struct budget *budget) · 18 unmodified lines | |||
| 638 | break; | 638 | break; |
| 639 | } | 639 | } |
| 640 | } | 640 | } |
| 641 | /* fall through */ | 641 | fallthrough; |
| 642 | 642 | ||
| 643 | case 0x101c: { /* TT S2-1600 */ | 643 | case 0x101c: { /* TT S2-1600 */ |
| 644 | const struct stv6110x_devctl *ctl; | 644 | const struct stv6110x_devctl *ctl; |
| @@ -220,7 +220,7 @@ static void sh_vou_stream_config(struct sh_vou_device *vou_dev) · 219 unmodified lines | |||
| 220 | break; | 220 | break; |
| 221 | case V4L2_PIX_FMT_RGB565: | 221 | case V4L2_PIX_FMT_RGB565: |
| 222 | dataswap ^= 1; | 222 | dataswap ^= 1; |
| 223 | /* fall through */ | 223 | fallthrough; |
| 224 | case V4L2_PIX_FMT_RGB565X: | 224 | case V4L2_PIX_FMT_RGB565X: |
| 225 | row_coeff = 2; | 225 | row_coeff = 2; |
| 226 | break; | 226 | break; |
| @@ -802,7 +802,7 @@ static u32 sh_vou_ntsc_mode(enum sh_vou_bus_fmt bus_fmt) · 575 unmodified lines | |||
| 802 | default: | 802 | default: |
| 803 | pr_warn("%s(): Invalid bus-format code %d, using default 8-bit\n", | 803 | pr_warn("%s(): Invalid bus-format code %d, using default 8-bit\n", |
| 804 | __func__, bus_fmt); | 804 | __func__, bus_fmt); |
| 805 | /* fall through */ | 805 | fallthrough; |
| 806 | case SH_VOU_BUS_8BIT: | 806 | case SH_VOU_BUS_8BIT: |
| 807 | return 1; | 807 | return 1; |
| 808 | case SH_VOU_BUS_16BIT: | 808 | case SH_VOU_BUS_16BIT: |
| @@ -105,7 +105,8 @@ static inline enum phase_diversity_modes_idx · 104 unmodified lines | |||
| 105 | si476x_phase_diversity_mode_to_idx(enum si476x_phase_diversity_mode mode) | 105 | si476x_phase_diversity_mode_to_idx(enum si476x_phase_diversity_mode mode) |
| 106 | { | 106 | { |
| 107 | switch (mode) { | 107 | switch (mode) { |
| 108 | default: /* FALLTHROUGH */ | 108 | default: |
| 109 | fallthrough; | ||
| 109 | case SI476X_PHDIV_DISABLED: | 110 | case SI476X_PHDIV_DISABLED: |
| 110 | return SI476X_IDX_PHDIV_DISABLED; | 111 | return SI476X_IDX_PHDIV_DISABLED; |
| 111 | case SI476X_PHDIV_PRIMARY_COMBINING: | 112 | case SI476X_PHDIV_PRIMARY_COMBINING: |
| @@ -249,7 +249,7 @@ int snd_tea575x_enum_freq_bands(struct snd_tea575x *tea, · 248 unmodified lines | |||
| 249 | index = BAND_AM; | 249 | index = BAND_AM; |
| 250 | break; | 250 | break; |
| 251 | } | 251 | } |
| 252 | /* Fall through */ | 252 | fallthrough; |
| 253 | default: | 253 | default: |
| 254 | return -EINVAL; | 254 | return -EINVAL; |
| 255 | } | 255 | } |
| @@ -112,7 +112,7 @@ lirc_mode2_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) · 111 unmodified lines | |||
| 112 | case BPF_FUNC_trace_printk: | 112 | case BPF_FUNC_trace_printk: |
| 113 | if (perfmon_capable()) | 113 | if (perfmon_capable()) |
| 114 | return bpf_get_trace_printk_proto(); | 114 | return bpf_get_trace_printk_proto(); |
| 115 | /* fall through */ | 115 | fallthrough; |
| 116 | default: | 116 | default: |
| 117 | return NULL; | 117 | return NULL; |
| 118 | } | 118 | } |
| @@ -64,7 +64,7 @@ static enum rc6_mode rc6_mode(struct rc6_dec *data) · 63 unmodified lines | |||
| 64 | case 6: | 64 | case 6: |
| 65 | if (!data->toggle) | 65 | if (!data->toggle) |
| 66 | return RC6_MODE_6A; | 66 | return RC6_MODE_6A; |
| 67 | /* fall through */ | 67 | fallthrough; |
| 68 | default: | 68 | default: |
| 69 | return RC6_MODE_UNKNOWN; | 69 | return RC6_MODE_UNKNOWN; |
| 70 | } | 70 | } |
| @@ -102,7 +102,7 @@ static int ir_sony_decode(struct rc_dev *dev, struct ir_raw_event ev) · 101 unmodified lines | |||
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | data->state = STATE_FINISHED; | 104 | data->state = STATE_FINISHED; |
| 105 | /* Fall through */ | 105 | fallthrough; |
| 106 | 106 | ||
| 107 | case STATE_FINISHED: | 107 | case STATE_FINISHED: |
| 108 | if (ev.pulse) | 108 | if (ev.pulse) |
| @@ -756,7 +756,7 @@ static int xc5000_set_digital_params(struct dvb_frontend *fe) · 755 unmodified lines | |||
| 756 | if (!bw) | 756 | if (!bw) |
| 757 | bw = 6000000; | 757 | bw = 6000000; |
| 758 | /* fall to OFDM handling */ | 758 | /* fall to OFDM handling */ |
| 759 | /* fall through */ | 759 | fallthrough; |
| 760 | case SYS_DMBTH: | 760 | case SYS_DMBTH: |
| 761 | case SYS_DVBT: | 761 | case SYS_DVBT: |
| 762 | case SYS_DVBT2: | 762 | case SYS_DVBT2: |
| @@ -525,7 +525,7 @@ static int flexcop_usb_init(struct flexcop_usb *fc_usb) · 524 unmodified lines | |||
| 525 | case USB_SPEED_HIGH: | 525 | case USB_SPEED_HIGH: |
| 526 | info("running at HIGH speed."); | 526 | info("running at HIGH speed."); |
| 527 | break; | 527 | break; |
| 528 | case USB_SPEED_UNKNOWN: /* fall through */ | 528 | case USB_SPEED_UNKNOWN: |
| 529 | default: | 529 | default: |
| 530 | err("cannot handle USB speed because it is unknown."); | 530 | err("cannot handle USB speed because it is unknown."); |
| 531 | return -ENODEV; | 531 | return -ENODEV; |
| @@ -165,7 +165,7 @@ int cpia2_do_command(struct camera_data *cam, · 164 unmodified lines | |||
| 165 | break; | 165 | break; |
| 166 | case CPIA2_CMD_SET_VP_BRIGHTNESS: | 166 | case CPIA2_CMD_SET_VP_BRIGHTNESS: |
| 167 | cmd.buffer.block_data[0] = param; | 167 | cmd.buffer.block_data[0] = param; |
| 168 | /* fall through */ | 168 | fallthrough; |
| 169 | case CPIA2_CMD_GET_VP_BRIGHTNESS: | 169 | case CPIA2_CMD_GET_VP_BRIGHTNESS: |
| 170 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 170 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 171 | cmd.reg_count = 1; | 171 | cmd.reg_count = 1; |
| @@ -176,7 +176,7 @@ int cpia2_do_command(struct camera_data *cam, · 4 unmodified lines | |||
| 176 | break; | 176 | break; |
| 177 | case CPIA2_CMD_SET_CONTRAST: | 177 | case CPIA2_CMD_SET_CONTRAST: |
| 178 | cmd.buffer.block_data[0] = param; | 178 | cmd.buffer.block_data[0] = param; |
| 179 | /* fall through */ | 179 | fallthrough; |
| 180 | case CPIA2_CMD_GET_CONTRAST: | 180 | case CPIA2_CMD_GET_CONTRAST: |
| 181 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 181 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 182 | cmd.reg_count = 1; | 182 | cmd.reg_count = 1; |
| @@ -184,7 +184,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 184 | break; | 184 | break; |
| 185 | case CPIA2_CMD_SET_VP_SATURATION: | 185 | case CPIA2_CMD_SET_VP_SATURATION: |
| 186 | cmd.buffer.block_data[0] = param; | 186 | cmd.buffer.block_data[0] = param; |
| 187 | /* fall through */ | 187 | fallthrough; |
| 188 | case CPIA2_CMD_GET_VP_SATURATION: | 188 | case CPIA2_CMD_GET_VP_SATURATION: |
| 189 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 189 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 190 | cmd.reg_count = 1; | 190 | cmd.reg_count = 1; |
| @@ -195,7 +195,7 @@ int cpia2_do_command(struct camera_data *cam, · 4 unmodified lines | |||
| 195 | break; | 195 | break; |
| 196 | case CPIA2_CMD_SET_VP_GPIO_DATA: | 196 | case CPIA2_CMD_SET_VP_GPIO_DATA: |
| 197 | cmd.buffer.block_data[0] = param; | 197 | cmd.buffer.block_data[0] = param; |
| 198 | /* fall through */ | 198 | fallthrough; |
| 199 | case CPIA2_CMD_GET_VP_GPIO_DATA: | 199 | case CPIA2_CMD_GET_VP_GPIO_DATA: |
| 200 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 200 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 201 | cmd.reg_count = 1; | 201 | cmd.reg_count = 1; |
| @@ -203,7 +203,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 203 | break; | 203 | break; |
| 204 | case CPIA2_CMD_SET_VP_GPIO_DIRECTION: | 204 | case CPIA2_CMD_SET_VP_GPIO_DIRECTION: |
| 205 | cmd.buffer.block_data[0] = param; | 205 | cmd.buffer.block_data[0] = param; |
| 206 | /* fall through */ | 206 | fallthrough; |
| 207 | case CPIA2_CMD_GET_VP_GPIO_DIRECTION: | 207 | case CPIA2_CMD_GET_VP_GPIO_DIRECTION: |
| 208 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 208 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 209 | cmd.reg_count = 1; | 209 | cmd.reg_count = 1; |
| @@ -211,7 +211,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 211 | break; | 211 | break; |
| 212 | case CPIA2_CMD_SET_VC_MP_GPIO_DATA: | 212 | case CPIA2_CMD_SET_VC_MP_GPIO_DATA: |
| 213 | cmd.buffer.block_data[0] = param; | 213 | cmd.buffer.block_data[0] = param; |
| 214 | /* fall through */ | 214 | fallthrough; |
| 215 | case CPIA2_CMD_GET_VC_MP_GPIO_DATA: | 215 | case CPIA2_CMD_GET_VC_MP_GPIO_DATA: |
| 216 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; | 216 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; |
| 217 | cmd.reg_count = 1; | 217 | cmd.reg_count = 1; |
| @@ -219,7 +219,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 219 | break; | 219 | break; |
| 220 | case CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION: | 220 | case CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION: |
| 221 | cmd.buffer.block_data[0] = param; | 221 | cmd.buffer.block_data[0] = param; |
| 222 | /*fall through */ | 222 | fallthrough; |
| 223 | case CPIA2_CMD_GET_VC_MP_GPIO_DIRECTION: | 223 | case CPIA2_CMD_GET_VC_MP_GPIO_DIRECTION: |
| 224 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; | 224 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; |
| 225 | cmd.reg_count = 1; | 225 | cmd.reg_count = 1; |
| @@ -234,7 +234,7 @@ int cpia2_do_command(struct camera_data *cam, · 8 unmodified lines | |||
| 234 | break; | 234 | break; |
| 235 | case CPIA2_CMD_SET_FLICKER_MODES: | 235 | case CPIA2_CMD_SET_FLICKER_MODES: |
| 236 | cmd.buffer.block_data[0] = param; | 236 | cmd.buffer.block_data[0] = param; |
| 237 | /* fall through */ | 237 | fallthrough; |
| 238 | case CPIA2_CMD_GET_FLICKER_MODES: | 238 | case CPIA2_CMD_GET_FLICKER_MODES: |
| 239 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 239 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 240 | cmd.reg_count = 1; | 240 | cmd.reg_count = 1; |
| @@ -281,7 +281,7 @@ int cpia2_do_command(struct camera_data *cam, · 40 unmodified lines | |||
| 281 | break; | 281 | break; |
| 282 | case CPIA2_CMD_SET_USER_MODE: | 282 | case CPIA2_CMD_SET_USER_MODE: |
| 283 | cmd.buffer.block_data[0] = param; | 283 | cmd.buffer.block_data[0] = param; |
| 284 | /* fall through */ | 284 | fallthrough; |
| 285 | case CPIA2_CMD_GET_USER_MODE: | 285 | case CPIA2_CMD_GET_USER_MODE: |
| 286 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 286 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 287 | cmd.reg_count = 1; | 287 | cmd.reg_count = 1; |
| @@ -301,7 +301,7 @@ int cpia2_do_command(struct camera_data *cam, · 13 unmodified lines | |||
| 301 | break; | 301 | break; |
| 302 | case CPIA2_CMD_SET_WAKEUP: | 302 | case CPIA2_CMD_SET_WAKEUP: |
| 303 | cmd.buffer.block_data[0] = param; | 303 | cmd.buffer.block_data[0] = param; |
| 304 | /* fall through */ | 304 | fallthrough; |
| 305 | case CPIA2_CMD_GET_WAKEUP: | 305 | case CPIA2_CMD_GET_WAKEUP: |
| 306 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; | 306 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; |
| 307 | cmd.reg_count = 1; | 307 | cmd.reg_count = 1; |
| @@ -309,7 +309,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 309 | break; | 309 | break; |
| 310 | case CPIA2_CMD_SET_PW_CONTROL: | 310 | case CPIA2_CMD_SET_PW_CONTROL: |
| 311 | cmd.buffer.block_data[0] = param; | 311 | cmd.buffer.block_data[0] = param; |
| 312 | /* fall through */ | 312 | fallthrough; |
| 313 | case CPIA2_CMD_GET_PW_CONTROL: | 313 | case CPIA2_CMD_GET_PW_CONTROL: |
| 314 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; | 314 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; |
| 315 | cmd.reg_count = 1; | 315 | cmd.reg_count = 1; |
| @@ -322,7 +322,7 @@ int cpia2_do_command(struct camera_data *cam, · 6 unmodified lines | |||
| 322 | break; | 322 | break; |
| 323 | case CPIA2_CMD_SET_SYSTEM_CTRL: | 323 | case CPIA2_CMD_SET_SYSTEM_CTRL: |
| 324 | cmd.buffer.block_data[0] = param; | 324 | cmd.buffer.block_data[0] = param; |
| 325 | /* fall through */ | 325 | fallthrough; |
| 326 | case CPIA2_CMD_GET_SYSTEM_CTRL: | 326 | case CPIA2_CMD_GET_SYSTEM_CTRL: |
| 327 | cmd.req_mode = | 327 | cmd.req_mode = |
| 328 | CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_SYSTEM; | 328 | CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_SYSTEM; |
| @@ -331,7 +331,7 @@ int cpia2_do_command(struct camera_data *cam, · 2 unmodified lines | |||
| 331 | break; | 331 | break; |
| 332 | case CPIA2_CMD_SET_VP_SYSTEM_CTRL: | 332 | case CPIA2_CMD_SET_VP_SYSTEM_CTRL: |
| 333 | cmd.buffer.block_data[0] = param; | 333 | cmd.buffer.block_data[0] = param; |
| 334 | /* fall through */ | 334 | fallthrough; |
| 335 | case CPIA2_CMD_GET_VP_SYSTEM_CTRL: | 335 | case CPIA2_CMD_GET_VP_SYSTEM_CTRL: |
| 336 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 336 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 337 | cmd.reg_count = 1; | 337 | cmd.reg_count = 1; |
| @@ -339,7 +339,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 339 | break; | 339 | break; |
| 340 | case CPIA2_CMD_SET_VP_EXP_MODES: | 340 | case CPIA2_CMD_SET_VP_EXP_MODES: |
| 341 | cmd.buffer.block_data[0] = param; | 341 | cmd.buffer.block_data[0] = param; |
| 342 | /* fall through */ | 342 | fallthrough; |
| 343 | case CPIA2_CMD_GET_VP_EXP_MODES: | 343 | case CPIA2_CMD_GET_VP_EXP_MODES: |
| 344 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 344 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 345 | cmd.reg_count = 1; | 345 | cmd.reg_count = 1; |
| @@ -347,7 +347,7 @@ int cpia2_do_command(struct camera_data *cam, · 1 unmodified line | |||
| 347 | break; | 347 | break; |
| 348 | case CPIA2_CMD_SET_DEVICE_CONFIG: | 348 | case CPIA2_CMD_SET_DEVICE_CONFIG: |
| 349 | cmd.buffer.block_data[0] = param; | 349 | cmd.buffer.block_data[0] = param; |
| 350 | /* fall through */ | 350 | fallthrough; |
| 351 | case CPIA2_CMD_GET_DEVICE_CONFIG: | 351 | case CPIA2_CMD_GET_DEVICE_CONFIG: |
| 352 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 352 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 353 | cmd.reg_count = 1; | 353 | cmd.reg_count = 1; |
| @@ -368,7 +368,7 @@ int cpia2_do_command(struct camera_data *cam, · 14 unmodified lines | |||
| 368 | break; | 368 | break; |
| 369 | case CPIA2_CMD_SET_VC_CONTROL: | 369 | case CPIA2_CMD_SET_VC_CONTROL: |
| 370 | cmd.buffer.block_data[0] = param; | 370 | cmd.buffer.block_data[0] = param; |
| 371 | /* fall through */ | 371 | fallthrough; |
| 372 | case CPIA2_CMD_GET_VC_CONTROL: | 372 | case CPIA2_CMD_GET_VC_CONTROL: |
| 373 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; | 373 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC; |
| 374 | cmd.reg_count = 1; | 374 | cmd.reg_count = 1; |
| @@ -403,7 +403,7 @@ int cpia2_do_command(struct camera_data *cam, · 28 unmodified lines | |||
| 403 | this register can also affect | 403 | this register can also affect |
| 404 | flicker modes */ | 404 | flicker modes */ |
| 405 | cmd.buffer.block_data[0] = param; | 405 | cmd.buffer.block_data[0] = param; |
| 406 | /* fall through */ | 406 | fallthrough; |
| 407 | case CPIA2_CMD_GET_USER_EFFECTS: | 407 | case CPIA2_CMD_GET_USER_EFFECTS: |
| 408 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; | 408 | cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP; |
| 409 | cmd.reg_count = 1; | 409 | cmd.reg_count = 1; |
| @@ -1751,7 +1751,7 @@ int cpia2_set_fps(struct camera_data *cam, int framerate) · 1341 unmodified lines | |||
| 1751 | CPIA2_VP_SENSOR_FLAGS_500) { | 1751 | CPIA2_VP_SENSOR_FLAGS_500) { |
| 1752 | return -EINVAL; | 1752 | return -EINVAL; |
| 1753 | } | 1753 | } |
| 1754 | /* Fall through */ | 1754 | fallthrough; |
| 1755 | case CPIA2_VP_FRAMERATE_15: | 1755 | case CPIA2_VP_FRAMERATE_15: |
| 1756 | case CPIA2_VP_FRAMERATE_12_5: | 1756 | case CPIA2_VP_FRAMERATE_12_5: |
| 1757 | case CPIA2_VP_FRAMERATE_7_5: | 1757 | case CPIA2_VP_FRAMERATE_7_5: |
| @@ -996,7 +996,7 @@ void cx231xx_v4l2_create_entities(struct cx231xx *dev) · 995 unmodified lines | |||
| 996 | /* The DVB core will handle it */ | 996 | /* The DVB core will handle it */ |
| 997 | if (dev->tuner_type == TUNER_ABSENT) | 997 | if (dev->tuner_type == TUNER_ABSENT) |
| 998 | continue; | 998 | continue; |
| 999 | /* fall through */ | 999 | fallthrough; |
| 1000 | default: /* just to shut up a gcc warning */ | 1000 | default: /* just to shut up a gcc warning */ |
| 1001 | ent->function = MEDIA_ENT_F_CONN_RF; | 1001 | ent->function = MEDIA_ENT_F_CONN_RF; |
| 1002 | break; | 1002 | break; |
| @@ -1659,14 +1659,14 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) · 1658 unmodified lines | |||
| 1659 | 1659 | ||
| 1660 | switch (band) { | 1660 | switch (band) { |
| 1661 | default: | 1661 | default: |
| 1662 | deb_info("Warning : Rf frequency (%iHz) is not in the supported range, using VHF switch ", fe->dtv_property_cache.frequency); | 1662 | deb_info("Warning : Rf frequency (%iHz) is not in the supported range, using VHF switch ", fe->dtv_property_cache.frequency); |
| 1663 | /* fall through */ | 1663 | fallthrough; |
| 1664 | case BAND_VHF: | 1664 | case BAND_VHF: |
| 1665 | state->dib8000_ops.set_gpio(fe, 3, 0, 1); | 1665 | state->dib8000_ops.set_gpio(fe, 3, 0, 1); |
| 1666 | break; | 1666 | break; |
| 1667 | case BAND_UHF: | 1667 | case BAND_UHF: |
| 1668 | state->dib8000_ops.set_gpio(fe, 3, 0, 0); | 1668 | state->dib8000_ops.set_gpio(fe, 3, 0, 0); |
| 1669 | break; | 1669 | break; |
| 1670 | } | 1670 | } |
| 1671 | 1671 | ||
| 1672 | ret = state->set_param_save(fe); | 1672 | ret = state->set_param_save(fe); |
| @@ -1886,12 +1886,12 @@ static int dw2102_load_firmware(struct usb_device *dev, · 1885 unmodified lines | |||
| 1886 | switch (le16_to_cpu(dev->descriptor.idProduct)) { | 1886 | switch (le16_to_cpu(dev->descriptor.idProduct)) { |
| 1887 | case USB_PID_TEVII_S650: | 1887 | case USB_PID_TEVII_S650: |
| 1888 | dw2104_properties.rc.core.rc_codes = RC_MAP_TEVII_NEC; | 1888 | dw2104_properties.rc.core.rc_codes = RC_MAP_TEVII_NEC; |
| 1889 | /* fall through */ | 1889 | fallthrough; |
| 1890 | case USB_PID_DW2104: | 1890 | case USB_PID_DW2104: |
| 1891 | reset = 1; | 1891 | reset = 1; |
| 1892 | dw210x_op_rw(dev, 0xc4, 0x0000, 0, &reset, 1, | 1892 | dw210x_op_rw(dev, 0xc4, 0x0000, 0, &reset, 1, |
| 1893 | DW210X_WRITE_MSG); | 1893 | DW210X_WRITE_MSG); |
| 1894 | /* fall through */ | 1894 | fallthrough; |
| 1895 | case USB_PID_DW3101: | 1895 | case USB_PID_DW3101: |
| 1896 | reset = 0; | 1896 | reset = 0; |
| 1897 | dw210x_op_rw(dev, 0xbf, 0x0040, 0, &reset, 0, | 1897 | dw210x_op_rw(dev, 0xbf, 0x0040, 0, &reset, 0, |
| @@ -1924,7 +1924,7 @@ static int dw2102_load_firmware(struct usb_device *dev, · 26 unmodified lines | |||
| 1924 | break; | 1924 | break; |
| 1925 | } | 1925 | } |
| 1926 | } | 1926 | } |
| 1927 | /* fall through */ | 1927 | fallthrough; |
| 1928 | case 0x2101: | 1928 | case 0x2101: |
| 1929 | dw210x_op_rw(dev, 0xbc, 0x0030, 0, &reset16[0], 2, | 1929 | dw210x_op_rw(dev, 0xbc, 0x0030, 0, &reset16[0], 2, |
| 1930 | DW210X_READ_MSG); | 1930 | DW210X_READ_MSG); |
| @@ -2200,7 +2200,7 @@ static int check_range(enum v4l2_ctrl_type type, · 2199 unmodified lines | |||
| 2200 | case V4L2_CTRL_TYPE_BOOLEAN: | 2200 | case V4L2_CTRL_TYPE_BOOLEAN: |
| 2201 | if (step != 1 || max > 1 || min < 0) | 2201 | if (step != 1 || max > 1 || min < 0) |
| 2202 | return -ERANGE; | 2202 | return -ERANGE; |
| 2203 | /* fall through */ | 2203 | fallthrough; |
| 2204 | case V4L2_CTRL_TYPE_U8: | 2204 | case V4L2_CTRL_TYPE_U8: |
| 2205 | case V4L2_CTRL_TYPE_U16: | 2205 | case V4L2_CTRL_TYPE_U16: |
| 2206 | case V4L2_CTRL_TYPE_U32: | 2206 | case V4L2_CTRL_TYPE_U32: |
| @@ -782,7 +782,6 @@ static void v4l_print_frmsizeenum(const void *arg, bool write_only) · 781 unmodified lines | |||
| 782 | p->stepwise.step_height); | 782 | p->stepwise.step_height); |
| 783 | break; | 783 | break; |
| 784 | case V4L2_FRMSIZE_TYPE_CONTINUOUS: | 784 | case V4L2_FRMSIZE_TYPE_CONTINUOUS: |
| 785 | /* fall through */ | ||
| 786 | default: | 785 | default: |
| 787 | pr_cont("\n"); | 786 | pr_cont("\n"); |
| 788 | break; | 787 | break; |
| @@ -816,7 +815,6 @@ static void v4l_print_frmivalenum(const void *arg, bool write_only) · 27 unmodified lines | |||
| 816 | p->stepwise.step.denominator); | 815 | p->stepwise.step.denominator); |
| 817 | break; | 816 | break; |
| 818 | case V4L2_FRMIVAL_TYPE_CONTINUOUS: | 817 | case V4L2_FRMIVAL_TYPE_CONTINUOUS: |
| 819 | /* fall through */ | ||
| 820 | default: | 818 | default: |
| 821 | pr_cont("\n"); | 819 | pr_cont("\n"); |
| 822 | break; | 820 | break; |
| @@ -354,7 +354,7 @@ static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b, · 353 unmodified lines | |||
| 354 | break; | 354 | break; |
| 355 | case VIDEOBUF_ERROR: | 355 | case VIDEOBUF_ERROR: |
| 356 | b->flags |= V4L2_BUF_FLAG_ERROR; | 356 | b->flags |= V4L2_BUF_FLAG_ERROR; |
| 357 | /* fall through */ | 357 | fallthrough; |
| 358 | case VIDEOBUF_DONE: | 358 | case VIDEOBUF_DONE: |
| 359 | b->flags |= V4L2_BUF_FLAG_DONE; | 359 | b->flags |= V4L2_BUF_FLAG_DONE; |
| 360 | break; | 360 | break; |
| @@ -313,7 +313,6 @@ static unsigned long gpmc_get_clk_period(int cs, enum gpmc_clk_domain cd) · 312 unmodified lines | |||
| 313 | tick_ps *= div; | 313 | tick_ps *= div; |
| 314 | break; | 314 | break; |
| 315 | case GPMC_CD_FCLK: | 315 | case GPMC_CD_FCLK: |
| 316 | /* FALL-THROUGH */ | ||
| 317 | default: | 316 | default: |
| 318 | break; | 317 | break; |
| 319 | } | 318 | } |
| @@ -371,7 +371,7 @@ again: · 370 unmodified lines | |||
| 371 | serial mode), then just fall through */ | 371 | serial mode), then just fall through */ |
| 372 | if (msb_read_int_reg(msb, -1)) | 372 | if (msb_read_int_reg(msb, -1)) |
| 373 | return 0; | 373 | return 0; |
| 374 | /* fallthrough */ | 374 | fallthrough; |
| 375 | 375 | ||
| 376 | case MSB_RP_RECEIVE_INT_REQ_RESULT: | 376 | case MSB_RP_RECEIVE_INT_REQ_RESULT: |
| 377 | intreg = mrq->data[0]; | 377 | intreg = mrq->data[0]; |
| @@ -403,7 +403,7 @@ again: · 25 unmodified lines | |||
| 403 | case MSB_RP_RECEIVE_STATUS_REG: | 403 | case MSB_RP_RECEIVE_STATUS_REG: |
| 404 | msb->regs.status = *(struct ms_status_register *)mrq->data; | 404 | msb->regs.status = *(struct ms_status_register *)mrq->data; |
| 405 | msb->state = MSB_RP_SEND_OOB_READ; | 405 | msb->state = MSB_RP_SEND_OOB_READ; |
| 406 | /* fallthrough */ | 406 | fallthrough; |
| 407 | 407 | ||
| 408 | case MSB_RP_SEND_OOB_READ: | 408 | case MSB_RP_SEND_OOB_READ: |
| 409 | if (!msb_read_regs(msb, | 409 | if (!msb_read_regs(msb, |
| @@ -418,7 +418,7 @@ again: · 8 unmodified lines | |||
| 418 | msb->regs.extra_data = | 418 | msb->regs.extra_data = |
| 419 | *(struct ms_extra_data_register *) mrq->data; | 419 | *(struct ms_extra_data_register *) mrq->data; |
| 420 | msb->state = MSB_RP_SEND_READ_DATA; | 420 | msb->state = MSB_RP_SEND_READ_DATA; |
| 421 | /* fallthrough */ | 421 | fallthrough; |
| 422 | 422 | ||
| 423 | case MSB_RP_SEND_READ_DATA: | 423 | case MSB_RP_SEND_READ_DATA: |
| 424 | /* Skip that state if we only read the oob */ | 424 | /* Skip that state if we only read the oob */ |
| @@ -518,7 +518,7 @@ again: · 93 unmodified lines | |||
| 518 | msb->state = MSB_WB_RECEIVE_INT_REQ; | 518 | msb->state = MSB_WB_RECEIVE_INT_REQ; |
| 519 | if (msb_read_int_reg(msb, -1)) | 519 | if (msb_read_int_reg(msb, -1)) |
| 520 | return 0; | 520 | return 0; |
| 521 | /* fallthrough */ | 521 | fallthrough; |
| 522 | 522 | ||
| 523 | case MSB_WB_RECEIVE_INT_REQ: | 523 | case MSB_WB_RECEIVE_INT_REQ: |
| 524 | intreg = mrq->data[0]; | 524 | intreg = mrq->data[0]; |
| @@ -549,7 +549,7 @@ again: · 24 unmodified lines | |||
| 549 | 549 | ||
| 550 | msb->int_polling = false; | 550 | msb->int_polling = false; |
| 551 | msb->state = MSB_WB_SEND_WRITE_DATA; | 551 | msb->state = MSB_WB_SEND_WRITE_DATA; |
| 552 | /* fallthrough */ | 552 | fallthrough; |
| 553 | 553 | ||
| 554 | case MSB_WB_SEND_WRITE_DATA: | 554 | case MSB_WB_SEND_WRITE_DATA: |
| 555 | sg_init_table(sg, ARRAY_SIZE(sg)); | 555 | sg_init_table(sg, ARRAY_SIZE(sg)); |
| @@ -628,7 +628,7 @@ again: · 72 unmodified lines | |||
| 628 | msb->state = MSB_SC_RECEIVE_INT_REQ; | 628 | msb->state = MSB_SC_RECEIVE_INT_REQ; |
| 629 | if (msb_read_int_reg(msb, -1)) | 629 | if (msb_read_int_reg(msb, -1)) |
| 630 | return 0; | 630 | return 0; |
| 631 | /* fallthrough */ | 631 | fallthrough; |
| 632 | 632 | ||
| 633 | case MSB_SC_RECEIVE_INT_REQ: | 633 | case MSB_SC_RECEIVE_INT_REQ: |
| 634 | intreg = mrq->data[0]; | 634 | intreg = mrq->data[0]; |
| @@ -255,11 +255,11 @@ static unsigned int jmb38x_ms_write_data(struct jmb38x_ms_host *host, · 254 unmodified lines | |||
| 255 | case 3: | 255 | case 3: |
| 256 | host->io_word[0] |= buf[off + 2] << 16; | 256 | host->io_word[0] |= buf[off + 2] << 16; |
| 257 | host->io_pos++; | 257 | host->io_pos++; |
| 258 | /* fall through */ | 258 | fallthrough; |
| 259 | case 2: | 259 | case 2: |
| 260 | host->io_word[0] |= buf[off + 1] << 8; | 260 | host->io_word[0] |= buf[off + 1] << 8; |
| 261 | host->io_pos++; | 261 | host->io_pos++; |
| 262 | /* fall through */ | 262 | fallthrough; |
| 263 | case 1: | 263 | case 1: |
| 264 | host->io_word[0] |= buf[off]; | 264 | host->io_word[0] |= buf[off]; |
| 265 | host->io_pos++; | 265 | host->io_pos++; |
| @@ -162,11 +162,11 @@ static unsigned int tifm_ms_write_data(struct tifm_ms *host, · 161 unmodified lines | |||
| 162 | case 3: | 162 | case 3: |
| 163 | host->io_word |= buf[off + 2] << 16; | 163 | host->io_word |= buf[off + 2] << 16; |
| 164 | host->io_pos++; | 164 | host->io_pos++; |
| 165 | /* fall through */ | 165 | fallthrough; |
| 166 | case 2: | 166 | case 2: |
| 167 | host->io_word |= buf[off + 1] << 8; | 167 | host->io_word |= buf[off + 1] << 8; |
| 168 | host->io_pos++; | 168 | host->io_pos++; |
| 169 | /* fall through */ | 169 | fallthrough; |
| 170 | case 1: | 170 | case 1: |
| 171 | host->io_word |= buf[off]; | 171 | host->io_word |= buf[off]; |
| 172 | host->io_pos++; | 172 | host->io_pos++; |
| @@ -642,7 +642,7 @@ mptbase_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) · 641 unmodified lines | |||
| 642 | freereq = 0; | 642 | freereq = 0; |
| 643 | if (event != MPI_EVENT_EVENT_CHANGE) | 643 | if (event != MPI_EVENT_EVENT_CHANGE) |
| 644 | break; | 644 | break; |
| 645 | /* fall through */ | 645 | fallthrough; |
| 646 | case MPI_FUNCTION_CONFIG: | 646 | case MPI_FUNCTION_CONFIG: |
| 647 | case MPI_FUNCTION_SAS_IO_UNIT_CONTROL: | 647 | case MPI_FUNCTION_SAS_IO_UNIT_CONTROL: |
| 648 | ioc->mptbase_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; | 648 | ioc->mptbase_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; |
| @@ -1887,7 +1887,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) · 1238 unmodified lines | |||
| 1887 | case MPI_MANUFACTPAGE_DEVICEID_FC939X: | 1887 | case MPI_MANUFACTPAGE_DEVICEID_FC939X: |
| 1888 | case MPI_MANUFACTPAGE_DEVICEID_FC949X: | 1888 | case MPI_MANUFACTPAGE_DEVICEID_FC949X: |
| 1889 | ioc->errata_flag_1064 = 1; | 1889 | ioc->errata_flag_1064 = 1; |
| 1890 | /* fall through */ | 1890 | fallthrough; |
| 1891 | case MPI_MANUFACTPAGE_DEVICEID_FC909: | 1891 | case MPI_MANUFACTPAGE_DEVICEID_FC909: |
| 1892 | case MPI_MANUFACTPAGE_DEVICEID_FC929: | 1892 | case MPI_MANUFACTPAGE_DEVICEID_FC929: |
| 1893 | case MPI_MANUFACTPAGE_DEVICEID_FC919: | 1893 | case MPI_MANUFACTPAGE_DEVICEID_FC919: |
| @@ -1932,7 +1932,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id) · 38 unmodified lines | |||
| 1932 | pcixcmd &= 0x8F; | 1932 | pcixcmd &= 0x8F; |
| 1933 | pci_write_config_byte(pdev, 0x6a, pcixcmd); | 1933 | pci_write_config_byte(pdev, 0x6a, pcixcmd); |
| 1934 | } | 1934 | } |
| 1935 | /* fall through */ | 1935 | fallthrough; |
| 1936 | 1936 | ||
| 1937 | case MPI_MANUFACTPAGE_DEVID_1030_53C1035: | 1937 | case MPI_MANUFACTPAGE_DEVID_1030_53C1035: |
| 1938 | ioc->bus_type = SPI; | 1938 | ioc->bus_type = SPI; |
| @@ -4326,7 +4326,7 @@ mptsas_hotplug_work(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, · 4325 unmodified lines | |||
| 4326 | } | 4326 | } |
| 4327 | } | 4327 | } |
| 4328 | mpt_findImVolumes(ioc); | 4328 | mpt_findImVolumes(ioc); |
| 4329 | /* fall through */ | 4329 | fallthrough; |
| 4330 | 4330 | ||
| 4331 | case MPTSAS_ADD_DEVICE: | 4331 | case MPTSAS_ADD_DEVICE: |
| 4332 | memset(&sas_device, 0, sizeof(struct mptsas_devinfo)); | 4332 | memset(&sas_device, 0, sizeof(struct mptsas_devinfo)); |
| @@ -784,7 +784,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) · 783 unmodified lines | |||
| 784 | /* | 784 | /* |
| 785 | * Allow non-SAS & non-NEXUS_LOSS to drop into below code | 785 | * Allow non-SAS & non-NEXUS_LOSS to drop into below code |
| 786 | */ | 786 | */ |
| 787 | /* Fall through */ | 787 | fallthrough; |
| 788 | 788 | ||
| 789 | case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */ | 789 | case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */ |
| 790 | /* Linux handles an unsolicited DID_RESET better | 790 | /* Linux handles an unsolicited DID_RESET better |
| @@ -881,7 +881,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) · 90 unmodified lines | |||
| 881 | 881 | ||
| 882 | case MPI_IOCSTATUS_SCSI_DATA_OVERRUN: /* 0x0044 */ | 882 | case MPI_IOCSTATUS_SCSI_DATA_OVERRUN: /* 0x0044 */ |
| 883 | scsi_set_resid(sc, 0); | 883 | scsi_set_resid(sc, 0); |
| 884 | /* Fall through */ | 884 | fallthrough; |
| 885 | case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */ | 885 | case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */ |
| 886 | case MPI_IOCSTATUS_SUCCESS: /* 0x0000 */ | 886 | case MPI_IOCSTATUS_SUCCESS: /* 0x0000 */ |
| 887 | sc->result = (DID_OK << 16) | scsi_status; | 887 | sc->result = (DID_OK << 16) | scsi_status; |
| @@ -1515,10 +1515,10 @@ static unsigned long dsiclk_rate(u8 n) · 1514 unmodified lines | |||
| 1515 | switch (divsel) { | 1515 | switch (divsel) { |
| 1516 | case PRCM_DSI_PLLOUT_SEL_PHI_4: | 1516 | case PRCM_DSI_PLLOUT_SEL_PHI_4: |
| 1517 | div *= 2; | 1517 | div *= 2; |
| 1518 | /* Fall through */ | 1518 | fallthrough; |
| 1519 | case PRCM_DSI_PLLOUT_SEL_PHI_2: | 1519 | case PRCM_DSI_PLLOUT_SEL_PHI_2: |
| 1520 | div *= 2; | 1520 | div *= 2; |
| 1521 | /* Fall through */ | 1521 | fallthrough; |
| 1522 | case PRCM_DSI_PLLOUT_SEL_PHI: | 1522 | case PRCM_DSI_PLLOUT_SEL_PHI: |
| 1523 | return pll_rate(PRCM_PLLDSI_FREQ, clock_rate(PRCMU_HDMICLK), | 1523 | return pll_rate(PRCM_PLLDSI_FREQ, clock_rate(PRCMU_HDMICLK), |
| 1524 | PLL_RAW) / div; | 1524 | PLL_RAW) / div; |
| @@ -136,7 +136,7 @@ static int iqs62x_dev_init(struct iqs62x_core *iqs62x) · 135 unmodified lines | |||
| 136 | if (val & IQS620_PROX_SETTINGS_4_SAR_EN) | 136 | if (val & IQS620_PROX_SETTINGS_4_SAR_EN) |
| 137 | iqs62x->ui_sel = IQS62X_UI_SAR1; | 137 | iqs62x->ui_sel = IQS62X_UI_SAR1; |
| 138 | 138 | ||
| 139 | /* fall through */ | 139 | fallthrough; |
| 140 | 140 | ||
| 141 | case IQS621_PROD_NUM: | 141 | case IQS621_PROD_NUM: |
| 142 | ret = regmap_write(iqs62x->regmap, IQS620_GLBL_EVENT_MASK, | 142 | ret = regmap_write(iqs62x->regmap, IQS620_GLBL_EVENT_MASK, |
| @@ -470,7 +470,7 @@ static irqreturn_t iqs62x_irq(int irq, void *context) · 327 unmodified lines | |||
| 470 | case IQS62X_EVENT_UI_LO: | 470 | case IQS62X_EVENT_UI_LO: |
| 471 | event_data.ui_data = get_unaligned_le16(&event_map[i]); | 471 | event_data.ui_data = get_unaligned_le16(&event_map[i]); |
| 472 | 472 | ||
| 473 | /* fall through */ | 473 | fallthrough; |
| 474 | 474 | ||
| 475 | case IQS62X_EVENT_UI_HI: | 475 | case IQS62X_EVENT_UI_HI: |
| 476 | case IQS62X_EVENT_NONE: | 476 | case IQS62X_EVENT_NONE: |
| @@ -491,7 +491,7 @@ static irqreturn_t iqs62x_irq(int irq, void *context) · 14 unmodified lines | |||
| 491 | case IQS62X_EVENT_HYST: | 491 | case IQS62X_EVENT_HYST: |
| 492 | event_map[i] <<= iqs62x->dev_desc->hyst_shift; | 492 | event_map[i] <<= iqs62x->dev_desc->hyst_shift; |
| 493 | 493 | ||
| 494 | /* fall through */ | 494 | fallthrough; |
| 495 | 495 | ||
| 496 | case IQS62X_EVENT_WHEEL: | 496 | case IQS62X_EVENT_WHEEL: |
| 497 | case IQS62X_EVENT_HALL: | 497 | case IQS62X_EVENT_HALL: |
| @@ -126,10 +126,6 @@ static int mfd_match_of_node_to_dev(struct platform_device *pdev, · 125 unmodified lines | |||
| 126 | const __be32 *reg; | 126 | const __be32 *reg; |
| 127 | u64 of_node_addr; | 127 | u64 of_node_addr; |
| 128 | 128 | ||
| 129 | /* Skip devices 'disabled' by Device Tree */ | ||
| 130 | if (!of_device_is_available(np)) | ||
| 131 | return -ENODEV; | ||
| 132 | |||
| 133 | /* Skip if OF node has previously been allocated to a device */ | 129 | /* Skip if OF node has previously been allocated to a device */ |
| 134 | list_for_each_entry(of_entry, &mfd_of_node_list, list) | 130 | list_for_each_entry(of_entry, &mfd_of_node_list, list) |
| 135 | if (of_entry->np == np) | 131 | if (of_entry->np == np) |
| @@ -212,6 +208,12 @@ static int mfd_add_device(struct device *parent, int id, · 76 unmodified lines | |||
| 212 | if (IS_ENABLED(CONFIG_OF) && parent->of_node && cell->of_compatible) { | 208 | if (IS_ENABLED(CONFIG_OF) && parent->of_node && cell->of_compatible) { |
| 213 | for_each_child_of_node(parent->of_node, np) { | 209 | for_each_child_of_node(parent->of_node, np) { |
| 214 | if (of_device_is_compatible(np, cell->of_compatible)) { | 210 | if (of_device_is_compatible(np, cell->of_compatible)) { |
| 211 | /* Ignore 'disabled' devices error free */ | ||
| 212 | if (!of_device_is_available(np)) { | ||
| 213 | ret = 0; | ||
| 214 | goto fail_alias; | ||
| 215 | } | ||
| 216 | |||
| 215 | ret = mfd_match_of_node_to_dev(pdev, np, cell); | 217 | ret = mfd_match_of_node_to_dev(pdev, np, cell); |
| 216 | if (ret == -EAGAIN) | 218 | if (ret == -EAGAIN) |
| 217 | continue; | 219 | continue; |
| @@ -370,8 +372,6 @@ static int mfd_remove_devices_fn(struct device *dev, void *data) · 152 unmodified lines | |||
| 370 | regulator_bulk_unregister_supply_alias(dev, cell->parent_supplies, | 372 | regulator_bulk_unregister_supply_alias(dev, cell->parent_supplies, |
| 371 | cell->num_parent_supplies); | 373 | cell->num_parent_supplies); |
| 372 | 374 | ||
| 373 | kfree(cell); | ||
| 374 | |||
| 375 | platform_device_unregister(pdev); | 375 | platform_device_unregister(pdev); |
| 376 | return 0; | 376 | return 0; |
| 377 | } | 377 | } |
| @@ -172,7 +172,7 @@ static int mxs_lradc_probe(struct platform_device *pdev) · 171 unmodified lines | |||
| 172 | MXS_LRADC_TOUCHSCREEN_5WIRE; | 172 | MXS_LRADC_TOUCHSCREEN_5WIRE; |
| 173 | break; | 173 | break; |
| 174 | } | 174 | } |
| 175 | /* fall through - to an error message for i.MX23 */ | 175 | fallthrough; /* to an error message for i.MX23 */ |
| 176 | default: | 176 | default: |
| 177 | dev_err(&pdev->dev, | 177 | dev_err(&pdev->dev, |
| 178 | "Unsupported number of touchscreen wires (%d)\n" | 178 | "Unsupported number of touchscreen wires (%d)\n" |
| @@ -308,7 +308,7 @@ static int usbhs_runtime_resume(struct device *dev) · 307 unmodified lines | |||
| 308 | i, r); | 308 | i, r); |
| 309 | } | 309 | } |
| 310 | } | 310 | } |
| 311 | /* Fall through - as HSIC mode needs utmi_clk */ | 311 | fallthrough; /* as HSIC mode needs utmi_clk */ |
| 312 | 312 | ||
| 313 | case OMAP_EHCI_PORT_MODE_TLL: | 313 | case OMAP_EHCI_PORT_MODE_TLL: |
| 314 | if (!IS_ERR(omap->utmi_clk[i])) { | 314 | if (!IS_ERR(omap->utmi_clk[i])) { |
| @@ -344,7 +344,7 @@ static int usbhs_runtime_suspend(struct device *dev) · 29 unmodified lines | |||
| 344 | 344 | ||
| 345 | if (!IS_ERR(omap->hsic480m_clk[i])) | 345 | if (!IS_ERR(omap->hsic480m_clk[i])) |
| 346 | clk_disable_unprepare(omap->hsic480m_clk[i]); | 346 | clk_disable_unprepare(omap->hsic480m_clk[i]); |
| 347 | /* Fall through - as utmi_clks were used in HSIC mode */ | 347 | fallthrough; /* as utmi_clks were used in HSIC mode */ |
| 348 | 348 | ||
| 349 | case OMAP_EHCI_PORT_MODE_TLL: | 349 | case OMAP_EHCI_PORT_MODE_TLL: |
| 350 | if (!IS_ERR(omap->utmi_clk[i])) | 350 | if (!IS_ERR(omap->utmi_clk[i])) |
| @@ -270,7 +270,7 @@ static void *stuff(unsigned char *dest, const unsigned char *src, size_t n) · 269 unmodified lines | |||
| 270 | case RAVE_SP_ETX: | 270 | case RAVE_SP_ETX: |
| 271 | case RAVE_SP_DLE: | 271 | case RAVE_SP_DLE: |
| 272 | *dest++ = RAVE_SP_DLE; | 272 | *dest++ = RAVE_SP_DLE; |
| 273 | /* FALLTHROUGH */ | 273 | fallthrough; |
| 274 | default: | 274 | default: |
| 275 | *dest++ = byte; | 275 | *dest++ = byte; |
| 276 | } | 276 | } |
| @@ -541,7 +541,7 @@ static int rave_sp_receive_buf(struct serdev_device *serdev, · 264 unmodified lines | |||
| 541 | * deframer buffer | 541 | * deframer buffer |
| 542 | */ | 542 | */ |
| 543 | 543 | ||
| 544 | /* FALLTHROUGH */ | 544 | fallthrough; |
| 545 | 545 | ||
| 546 | case RAVE_SP_EXPECT_ESCAPED_DATA: | 546 | case RAVE_SP_EXPECT_ESCAPED_DATA: |
| 547 | if (deframer->length == sizeof(deframer->data)) { | 547 | if (deframer->length == sizeof(deframer->data)) { |
| @@ -95,7 +95,7 @@ static struct syscon *of_syscon_register(struct device_node *np, bool check_clk) · 94 unmodified lines | |||
| 95 | break; | 95 | break; |
| 96 | default: | 96 | default: |
| 97 | pr_err("Failed to retrieve valid hwlock: %d\n", ret); | 97 | pr_err("Failed to retrieve valid hwlock: %d\n", ret); |
| 98 | /* fall-through */ | 98 | fallthrough; |
| 99 | case -EPROBE_DEFER: | 99 | case -EPROBE_DEFER: |
| 100 | goto err_regmap; | 100 | goto err_regmap; |
| 101 | } | 101 | } |
| @@ -90,10 +90,10 @@ static int at25_ee_read(void *priv, unsigned int offset, · 89 unmodified lines | |||
| 90 | switch (at25->addrlen) { | 90 | switch (at25->addrlen) { |
| 91 | default: /* case 3 */ | 91 | default: /* case 3 */ |
| 92 | *cp++ = offset >> 16; | 92 | *cp++ = offset >> 16; |
| 93 | /* fall through */ | 93 | fallthrough; |
| 94 | case 2: | 94 | case 2: |
| 95 | *cp++ = offset >> 8; | 95 | *cp++ = offset >> 8; |
| 96 | /* fall through */ | 96 | fallthrough; |
| 97 | case 1: | 97 | case 1: |
| 98 | case 0: /* can't happen: for better codegen */ | 98 | case 0: /* can't happen: for better codegen */ |
| 99 | *cp++ = offset >> 0; | 99 | *cp++ = offset >> 0; |
| @@ -178,10 +178,10 @@ static int at25_ee_write(void *priv, unsigned int off, void *val, size_t count) · 78 unmodified lines | |||
| 178 | switch (at25->addrlen) { | 178 | switch (at25->addrlen) { |
| 179 | default: /* case 3 */ | 179 | default: /* case 3 */ |
| 180 | *cp++ = offset >> 16; | 180 | *cp++ = offset >> 16; |
| 181 | /* fall through */ | 181 | fallthrough; |
| 182 | case 2: | 182 | case 2: |
| 183 | *cp++ = offset >> 8; | 183 | *cp++ = offset >> 8; |
| 184 | /* fall through */ | 184 | fallthrough; |
| 185 | case 1: | 185 | case 1: |
| 186 | case 0: /* can't happen: for better codegen */ | 186 | case 0: /* can't happen: for better codegen */ |
| 187 | *cp++ = offset >> 0; | 187 | *cp++ = offset >> 0; |
| @@ -278,7 +278,7 @@ static int at25_fw_to_chip(struct device *dev, struct spi_eeprom *chip) · 90 unmodified lines | |||
| 278 | switch (val) { | 278 | switch (val) { |
| 279 | case 9: | 279 | case 9: |
| 280 | chip->flags |= EE_INSTR_BIT3_IS_ADDR; | 280 | chip->flags |= EE_INSTR_BIT3_IS_ADDR; |
| 281 | /* fall through */ | 281 | fallthrough; |
| 282 | case 8: | 282 | case 8: |
| 283 | chip->flags |= EE_ADDR1; | 283 | chip->flags |= EE_ADDR1; |
| 284 | break; | 284 | break; |
| @@ -10,6 +10,7 @@ · 9 unmodified lines | |||
| 10 | 10 | ||
| 11 | #include <linux/mm.h> | 11 | #include <linux/mm.h> |
| 12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
| 13 | #include <linux/uaccess.h> | ||
| 13 | #include <linux/genalloc.h> | 14 | #include <linux/genalloc.h> |
| 14 | 15 | ||
| 15 | static void cb_fini(struct hl_device *hdev, struct hl_cb *cb) | 16 | static void cb_fini(struct hl_device *hdev, struct hl_cb *cb) |
| @@ -300,7 +301,7 @@ int hl_cb_mmap(struct hl_fpriv *hpriv, struct vm_area_struct *vma) · 284 unmodified lines | |||
| 300 | struct hl_device *hdev = hpriv->hdev; | 301 | struct hl_device *hdev = hpriv->hdev; |
| 301 | struct hl_cb *cb; | 302 | struct hl_cb *cb; |
| 302 | phys_addr_t address; | 303 | phys_addr_t address; |
| 303 | u32 handle; | 304 | u32 handle, user_cb_size; |
| 304 | int rc; | 305 | int rc; |
| 305 | 306 | ||
| 306 | handle = vma->vm_pgoff; | 307 | handle = vma->vm_pgoff; |
| @@ -314,7 +315,8 @@ int hl_cb_mmap(struct hl_fpriv *hpriv, struct vm_area_struct *vma) · 7 unmodified lines | |||
| 314 | } | 315 | } |
| 315 | 316 | ||
| 316 | /* Validation check */ | 317 | /* Validation check */ |
| 317 | if ((vma->vm_end - vma->vm_start) != ALIGN(cb->size, PAGE_SIZE)) { | 318 | user_cb_size = vma->vm_end - vma->vm_start; |
| 319 | if (user_cb_size != ALIGN(cb->size, PAGE_SIZE)) { | ||
| 318 | dev_err(hdev->dev, | 320 | dev_err(hdev->dev, |
| 319 | "CB mmap failed, mmap size 0x%lx != 0x%x cb size\n", | 321 | "CB mmap failed, mmap size 0x%lx != 0x%x cb size\n", |
| 320 | vma->vm_end - vma->vm_start, cb->size); | 322 | vma->vm_end - vma->vm_start, cb->size); |
| @@ -322,6 +324,16 @@ int hl_cb_mmap(struct hl_fpriv *hpriv, struct vm_area_struct *vma) · 1 unmodified line | |||
| 322 | goto put_cb; | 324 | goto put_cb; |
| 323 | } | 325 | } |
| 324 | 326 | ||
| 327 | if (!access_ok((void __user *) (uintptr_t) vma->vm_start, | ||
| 328 | user_cb_size)) { | ||
| 329 | dev_err(hdev->dev, | ||
| 330 | "user pointer is invalid - 0x%lx\n", | ||
| 331 | vma->vm_start); | ||
| 332 | |||
| 333 | rc = -EINVAL; | ||
| 334 | goto put_cb; | ||
| 335 | } | ||
| 336 | |||
| 325 | spin_lock(&cb->lock); | 337 | spin_lock(&cb->lock); |
| 326 | 338 | ||
| 327 | if (cb->mmap) { | 339 | if (cb->mmap) { |
| @@ -808,6 +808,14 @@ static int cs_ioctl_signal_wait(struct hl_fpriv *hpriv, enum hl_cs_type cs_type, · 807 unmodified lines | |||
| 808 | 808 | ||
| 809 | /* currently it is guaranteed to have only one chunk */ | 809 | /* currently it is guaranteed to have only one chunk */ |
| 810 | chunk = &cs_chunk_array[0]; | 810 | chunk = &cs_chunk_array[0]; |
| 811 | |||
| 812 | if (chunk->queue_index >= hdev->asic_prop.max_queues) { | ||
| 813 | dev_err(hdev->dev, "Queue index %d is invalid\n", | ||
| 814 | chunk->queue_index); | ||
| 815 | rc = -EINVAL; | ||
| 816 | goto free_cs_chunk_array; | ||
| 817 | } | ||
| 818 | |||
| 811 | q_idx = chunk->queue_index; | 819 | q_idx = chunk->queue_index; |
| 812 | hw_queue_prop = &hdev->asic_prop.hw_queues_props[q_idx]; | 820 | hw_queue_prop = &hdev->asic_prop.hw_queues_props[q_idx]; |
| 813 | q_type = hw_queue_prop->type; | 821 | q_type = hw_queue_prop->type; |
| @@ -19,7 +19,7 @@ · 18 unmodified lines | |||
| 19 | static struct dentry *hl_debug_root; | 19 | static struct dentry *hl_debug_root; |
| 20 | 20 | ||
| 21 | static int hl_debugfs_i2c_read(struct hl_device *hdev, u8 i2c_bus, u8 i2c_addr, | 21 | static int hl_debugfs_i2c_read(struct hl_device *hdev, u8 i2c_bus, u8 i2c_addr, |
| 22 | u8 i2c_reg, u32 *val) | 22 | u8 i2c_reg, long *val) |
| 23 | { | 23 | { |
| 24 | struct armcp_packet pkt; | 24 | struct armcp_packet pkt; |
| 25 | int rc; | 25 | int rc; |
| @@ -36,7 +36,7 @@ static int hl_debugfs_i2c_read(struct hl_device *hdev, u8 i2c_bus, u8 i2c_addr, · 10 unmodified lines | |||
| 36 | pkt.i2c_reg = i2c_reg; | 36 | pkt.i2c_reg = i2c_reg; |
| 37 | 37 | ||
| 38 | rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt), | 38 | rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt), |
| 39 | 0, (long *) val); | 39 | 0, val); |
| 40 | 40 | ||
| 41 | if (rc) | 41 | if (rc) |
| 42 | dev_err(hdev->dev, "Failed to read from I2C, error %d\n", rc); | 42 | dev_err(hdev->dev, "Failed to read from I2C, error %d\n", rc); |
| @@ -827,7 +827,7 @@ static ssize_t hl_i2c_data_read(struct file *f, char __user *buf, · 784 unmodified lines | |||
| 827 | struct hl_dbg_device_entry *entry = file_inode(f)->i_private; | 827 | struct hl_dbg_device_entry *entry = file_inode(f)->i_private; |
| 828 | struct hl_device *hdev = entry->hdev; | 828 | struct hl_device *hdev = entry->hdev; |
| 829 | char tmp_buf[32]; | 829 | char tmp_buf[32]; |
| 830 | u32 val; | 830 | long val; |
| 831 | ssize_t rc; | 831 | ssize_t rc; |
| 832 | 832 | ||
| 833 | if (*ppos) | 833 | if (*ppos) |
| @@ -842,7 +842,7 @@ static ssize_t hl_i2c_data_read(struct file *f, char __user *buf, · 8 unmodified lines | |||
| 842 | return rc; | 842 | return rc; |
| 843 | } | 843 | } |
| 844 | 844 | ||
| 845 | sprintf(tmp_buf, "0x%02x\n", val); | 845 | sprintf(tmp_buf, "0x%02lx\n", val); |
| 846 | rc = simple_read_from_buffer(buf, count, ppos, tmp_buf, | 846 | rc = simple_read_from_buffer(buf, count, ppos, tmp_buf, |
| 847 | strlen(tmp_buf)); | 847 | strlen(tmp_buf)); |
| 848 | 848 | ||
| @@ -288,7 +288,7 @@ static int device_early_init(struct hl_device *hdev) · 287 unmodified lines | |||
| 288 | for (i = 0 ; i < hdev->asic_prop.completion_queues_count ; i++) { | 288 | for (i = 0 ; i < hdev->asic_prop.completion_queues_count ; i++) { |
| 289 | snprintf(workq_name, 32, "hl-free-jobs-%u", i); | 289 | snprintf(workq_name, 32, "hl-free-jobs-%u", i); |
| 290 | hdev->cq_wq[i] = create_singlethread_workqueue(workq_name); | 290 | hdev->cq_wq[i] = create_singlethread_workqueue(workq_name); |
| 291 | if (hdev->cq_wq == NULL) { | 291 | if (hdev->cq_wq[i] == NULL) { |
| 292 | dev_err(hdev->dev, "Failed to allocate CQ workqueue\n"); | 292 | dev_err(hdev->dev, "Failed to allocate CQ workqueue\n"); |
| 293 | rc = -ENOMEM; | 293 | rc = -ENOMEM; |
| 294 | goto free_cq_wq; | 294 | goto free_cq_wq; |
| @@ -1069,7 +1069,7 @@ again: · 774 unmodified lines | |||
| 1069 | goto out_err; | 1069 | goto out_err; |
| 1070 | } | 1070 | } |
| 1071 | 1071 | ||
| 1072 | hl_set_max_power(hdev, hdev->max_power); | 1072 | hl_set_max_power(hdev); |
| 1073 | } else { | 1073 | } else { |
| 1074 | rc = hdev->asic_funcs->soft_reset_late_init(hdev); | 1074 | rc = hdev->asic_funcs->soft_reset_late_init(hdev); |
| 1075 | if (rc) { | 1075 | if (rc) { |
| @@ -1318,6 +1318,11 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass) · 242 unmodified lines | |||
| 1318 | goto out_disabled; | 1318 | goto out_disabled; |
| 1319 | } | 1319 | } |
| 1320 | 1320 | ||
| 1321 | /* Need to call this again because the max power might change, | ||
| 1322 | * depending on card type for certain ASICs | ||
| 1323 | */ | ||
| 1324 | hl_set_max_power(hdev); | ||
| 1325 | |||
| 1321 | /* | 1326 | /* |
| 1322 | * hl_hwmon_init() must be called after device_late_init(), because only | 1327 | * hl_hwmon_init() must be called after device_late_init(), because only |
| 1323 | * there we get the information from the device about which | 1328 | * there we get the information from the device about which |
| @@ -13,6 +13,7 @@ · 12 unmodified lines | |||
| 13 | #include <linux/io-64-nonatomic-lo-hi.h> | 13 | #include <linux/io-64-nonatomic-lo-hi.h> |
| 14 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
| 15 | 15 | ||
| 16 | #define FW_FILE_MAX_SIZE 0x1400000 /* maximum size of 20MB */ | ||
| 16 | /** | 17 | /** |
| 17 | * hl_fw_load_fw_to_device() - Load F/W code to device's memory. | 18 | * hl_fw_load_fw_to_device() - Load F/W code to device's memory. |
| 18 | * | 19 | * |
| @@ -48,6 +49,14 @@ int hl_fw_load_fw_to_device(struct hl_device *hdev, const char *fw_name, · 29 unmodified lines | |||
| 48 | 49 | ||
| 49 | dev_dbg(hdev->dev, "%s firmware size == %zu\n", fw_name, fw_size); | 50 | dev_dbg(hdev->dev, "%s firmware size == %zu\n", fw_name, fw_size); |
| 50 | 51 | ||
| 52 | if (fw_size > FW_FILE_MAX_SIZE) { | ||
| 53 | dev_err(hdev->dev, | ||
| 54 | "FW file size %zu exceeds maximum of %u bytes\n", | ||
| 55 | fw_size, FW_FILE_MAX_SIZE); | ||
| 56 | rc = -EINVAL; | ||
| 57 | goto out; | ||
| 58 | } | ||
| 59 | |||
| 51 | fw_data = (const u64 *) fw->data; | 60 | fw_data = (const u64 *) fw->data; |
| 52 | 61 | ||
| 53 | memcpy_toio(dst, fw_data, fw_size); | 62 | memcpy_toio(dst, fw_data, fw_size); |
| @@ -1462,6 +1462,8 @@ struct hl_device_idle_busy_ts { · 1461 unmodified lines | |||
| 1462 | * details. | 1462 | * details. |
| 1463 | * @in_reset: is device in reset flow. | 1463 | * @in_reset: is device in reset flow. |
| 1464 | * @curr_pll_profile: current PLL profile. | 1464 | * @curr_pll_profile: current PLL profile. |
| 1465 | * @card_type: Various ASICs have several card types. This indicates the card | ||
| 1466 | * type of the current device. | ||
| 1465 | * @cs_active_cnt: number of active command submissions on this device (active | 1467 | * @cs_active_cnt: number of active command submissions on this device (active |
| 1466 | * means already in H/W queues) | 1468 | * means already in H/W queues) |
| 1467 | * @major: habanalabs kernel driver major. | 1469 | * @major: habanalabs kernel driver major. |
| @@ -1566,6 +1568,7 @@ struct hl_device { · 98 unmodified lines | |||
| 1566 | u64 clock_gating_mask; | 1568 | u64 clock_gating_mask; |
| 1567 | atomic_t in_reset; | 1569 | atomic_t in_reset; |
| 1568 | enum hl_pll_frequency curr_pll_profile; | 1570 | enum hl_pll_frequency curr_pll_profile; |
| 1571 | enum armcp_card_types card_type; | ||
| 1569 | int cs_active_cnt; | 1572 | int cs_active_cnt; |
| 1570 | u32 major; | 1573 | u32 major; |
| 1571 | u32 high_pll; | 1574 | u32 high_pll; |
| @@ -1651,7 +1654,7 @@ struct hl_ioctl_desc { · 79 unmodified lines | |||
| 1651 | * | 1654 | * |
| 1652 | * Return: true if the area is inside the valid range, false otherwise. | 1655 | * Return: true if the area is inside the valid range, false otherwise. |
| 1653 | */ | 1656 | */ |
| 1654 | static inline bool hl_mem_area_inside_range(u64 address, u32 size, | 1657 | static inline bool hl_mem_area_inside_range(u64 address, u64 size, |
| 1655 | u64 range_start_address, u64 range_end_address) | 1658 | u64 range_start_address, u64 range_end_address) |
| 1656 | { | 1659 | { |
| 1657 | u64 end_address = address + size; | 1660 | u64 end_address = address + size; |
| @@ -1858,7 +1861,7 @@ int hl_get_pwm_info(struct hl_device *hdev, · 200 unmodified lines | |||
| 1858 | void hl_set_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr, | 1861 | void hl_set_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr, |
| 1859 | long value); | 1862 | long value); |
| 1860 | u64 hl_get_max_power(struct hl_device *hdev); | 1863 | u64 hl_get_max_power(struct hl_device *hdev); |
| 1861 | void hl_set_max_power(struct hl_device *hdev, u64 value); | 1864 | void hl_set_max_power(struct hl_device *hdev); |
| 1862 | int hl_set_voltage(struct hl_device *hdev, | 1865 | int hl_set_voltage(struct hl_device *hdev, |
| 1863 | int sensor_index, u32 attr, long value); | 1866 | int sensor_index, u32 attr, long value); |
| 1864 | int hl_set_current(struct hl_device *hdev, | 1867 | int hl_set_current(struct hl_device *hdev, |
| @@ -66,6 +66,11 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args, · 65 unmodified lines | |||
| 66 | num_pgs = (args->alloc.mem_size + (page_size - 1)) >> page_shift; | 66 | num_pgs = (args->alloc.mem_size + (page_size - 1)) >> page_shift; |
| 67 | total_size = num_pgs << page_shift; | 67 | total_size = num_pgs << page_shift; |
| 68 | 68 | ||
| 69 | if (!total_size) { | ||
| 70 | dev_err(hdev->dev, "Cannot allocate 0 bytes\n"); | ||
| 71 | return -EINVAL; | ||
| 72 | } | ||
| 73 | |||
| 69 | contiguous = args->flags & HL_MEM_CONTIGUOUS; | 74 | contiguous = args->flags & HL_MEM_CONTIGUOUS; |
| 70 | 75 | ||
| 71 | if (contiguous) { | 76 | if (contiguous) { |
| @@ -93,7 +98,7 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args, · 21 unmodified lines | |||
| 93 | phys_pg_pack->contiguous = contiguous; | 98 | phys_pg_pack->contiguous = contiguous; |
| 94 | 99 | ||
| 95 | phys_pg_pack->pages = kvmalloc_array(num_pgs, sizeof(u64), GFP_KERNEL); | 100 | phys_pg_pack->pages = kvmalloc_array(num_pgs, sizeof(u64), GFP_KERNEL); |
| 96 | if (!phys_pg_pack->pages) { | 101 | if (ZERO_OR_NULL_PTR(phys_pg_pack->pages)) { |
| 97 | rc = -ENOMEM; | 102 | rc = -ENOMEM; |
| 98 | goto pages_arr_err; | 103 | goto pages_arr_err; |
| 99 | } | 104 | } |
| @@ -683,7 +688,7 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx, · 583 unmodified lines | |||
| 683 | 688 | ||
| 684 | phys_pg_pack->pages = kvmalloc_array(total_npages, sizeof(u64), | 689 | phys_pg_pack->pages = kvmalloc_array(total_npages, sizeof(u64), |
| 685 | GFP_KERNEL); | 690 | GFP_KERNEL); |
| 686 | if (!phys_pg_pack->pages) { | 691 | if (ZERO_OR_NULL_PTR(phys_pg_pack->pages)) { |
| 687 | rc = -ENOMEM; | 692 | rc = -ENOMEM; |
| 688 | goto page_pack_arr_mem_err; | 693 | goto page_pack_arr_mem_err; |
| 689 | } | 694 | } |
| @@ -450,7 +450,7 @@ int hl_mmu_init(struct hl_device *hdev) · 449 unmodified lines | |||
| 450 | hdev->mmu_shadow_hop0 = kvmalloc_array(prop->max_asid, | 450 | hdev->mmu_shadow_hop0 = kvmalloc_array(prop->max_asid, |
| 451 | prop->mmu_hop_table_size, | 451 | prop->mmu_hop_table_size, |
| 452 | GFP_KERNEL | __GFP_ZERO); | 452 | GFP_KERNEL | __GFP_ZERO); |
| 453 | if (!hdev->mmu_shadow_hop0) { | 453 | if (ZERO_OR_NULL_PTR(hdev->mmu_shadow_hop0)) { |
| 454 | rc = -ENOMEM; | 454 | rc = -ENOMEM; |
| 455 | goto err_pool_add; | 455 | goto err_pool_add; |
| 456 | } | 456 | } |
| @@ -227,7 +227,7 @@ int hl_pci_set_inbound_region(struct hl_device *hdev, u8 region, · 226 unmodified lines | |||
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | /* Point to the specified address */ | 229 | /* Point to the specified address */ |
| 230 | rc = hl_pci_iatu_write(hdev, offset + 0x14, | 230 | rc |= hl_pci_iatu_write(hdev, offset + 0x14, |
| 231 | lower_32_bits(pci_region->addr)); | 231 | lower_32_bits(pci_region->addr)); |
| 232 | rc |= hl_pci_iatu_write(hdev, offset + 0x18, | 232 | rc |= hl_pci_iatu_write(hdev, offset + 0x18, |
| 233 | upper_32_bits(pci_region->addr)); | 233 | upper_32_bits(pci_region->addr)); |
| @@ -369,15 +369,17 @@ int hl_pci_init(struct hl_device *hdev) · 135 unmodified lines | |||
| 369 | rc = hdev->asic_funcs->init_iatu(hdev); | 369 | rc = hdev->asic_funcs->init_iatu(hdev); |
| 370 | if (rc) { | 370 | if (rc) { |
| 371 | dev_err(hdev->dev, "Failed to initialize iATU\n"); | 371 | dev_err(hdev->dev, "Failed to initialize iATU\n"); |
| 372 | goto disable_device; | 372 | goto unmap_pci_bars; |
| 373 | } | 373 | } |
| 374 | 374 | ||
| 375 | rc = hl_pci_set_dma_mask(hdev); | 375 | rc = hl_pci_set_dma_mask(hdev); |
| 376 | if (rc) | 376 | if (rc) |
| 377 | goto disable_device; | 377 | goto unmap_pci_bars; |
| 378 | 378 | ||
| 379 | return 0; | 379 | return 0; |
| 380 | 380 | ||
| 381 | unmap_pci_bars: | ||
| 382 | hl_pci_bars_unmap(hdev); | ||
| 381 | disable_device: | 383 | disable_device: |
| 382 | pci_clear_master(pdev); | 384 | pci_clear_master(pdev); |
| 383 | pci_disable_device(pdev); | 385 | pci_disable_device(pdev); |
| @@ -81,7 +81,7 @@ u64 hl_get_max_power(struct hl_device *hdev) · 80 unmodified lines | |||
| 81 | return result; | 81 | return result; |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | void hl_set_max_power(struct hl_device *hdev, u64 value) | 84 | void hl_set_max_power(struct hl_device *hdev) |
| 85 | { | 85 | { |
| 86 | struct armcp_packet pkt; | 86 | struct armcp_packet pkt; |
| 87 | int rc; | 87 | int rc; |
| @@ -90,7 +90,7 @@ void hl_set_max_power(struct hl_device *hdev, u64 value) · 2 unmodified lines | |||
| 90 | 90 | ||
| 91 | pkt.ctl = cpu_to_le32(ARMCP_PACKET_MAX_POWER_SET << | 91 | pkt.ctl = cpu_to_le32(ARMCP_PACKET_MAX_POWER_SET << |
| 92 | ARMCP_PKT_CTL_OPCODE_SHIFT); | 92 | ARMCP_PKT_CTL_OPCODE_SHIFT); |
| 93 | pkt.value = cpu_to_le64(value); | 93 | pkt.value = cpu_to_le64(hdev->max_power); |
| 94 | 94 | ||
| 95 | rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt), | 95 | rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt), |
| 96 | 0, NULL); | 96 | 0, NULL); |
| @@ -316,7 +316,7 @@ static ssize_t max_power_store(struct device *dev, · 219 unmodified lines | |||
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | hdev->max_power = value; | 318 | hdev->max_power = value; |
| 319 | hl_set_max_power(hdev, value); | 319 | hl_set_max_power(hdev); |
| 320 | 320 | ||
| 321 | out: | 321 | out: |
| 322 | return count; | 322 | return count; |
| @@ -422,6 +422,7 @@ int hl_sysfs_init(struct hl_device *hdev) · 99 unmodified lines | |||
| 422 | hdev->pm_mng_profile = PM_AUTO; | 422 | hdev->pm_mng_profile = PM_AUTO; |
| 423 | else | 423 | else |
| 424 | hdev->pm_mng_profile = PM_MANUAL; | 424 | hdev->pm_mng_profile = PM_MANUAL; |
| 425 | |||
| 425 | hdev->max_power = hdev->asic_prop.max_power_default; | 426 | hdev->max_power = hdev->asic_prop.max_power_default; |
| 426 | 427 | ||
| 427 | hdev->asic_funcs->add_device_attr(hdev, &hl_dev_clks_attr_group); | 428 | hdev->asic_funcs->add_device_attr(hdev, &hl_dev_clks_attr_group); |
| @@ -154,6 +154,29 @@ static const u16 gaudi_packet_sizes[MAX_PACKET_ID] = { · 153 unmodified lines | |||
| 154 | [PACKET_LOAD_AND_EXE] = sizeof(struct packet_load_and_exe) | 154 | [PACKET_LOAD_AND_EXE] = sizeof(struct packet_load_and_exe) |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | static inline bool validate_packet_id(enum packet_id id) | ||
| 158 | { | ||
| 159 | switch (id) { | ||
| 160 | case PACKET_WREG_32: | ||
| 161 | case PACKET_WREG_BULK: | ||
| 162 | case PACKET_MSG_LONG: | ||
| 163 | case PACKET_MSG_SHORT: | ||
| 164 | case PACKET_CP_DMA: | ||
| 165 | case PACKET_REPEAT: | ||
| 166 | case PACKET_MSG_PROT: | ||
| 167 | case PACKET_FENCE: | ||
| 168 | case PACKET_LIN_DMA: | ||
| 169 | case PACKET_NOP: | ||
| 170 | case PACKET_STOP: | ||
| 171 | case PACKET_ARB_POINT: | ||
| 172 | case PACKET_WAIT: | ||
| 173 | case PACKET_LOAD_AND_EXE: | ||
| 174 | return true; | ||
| 175 | default: | ||
| 176 | return false; | ||
| 177 | } | ||
| 178 | } | ||
| 179 | |||
| 157 | static const char * const | 180 | static const char * const |
| 158 | gaudi_tpc_interrupts_cause[GAUDI_NUM_OF_TPC_INTR_CAUSE] = { | 181 | gaudi_tpc_interrupts_cause[GAUDI_NUM_OF_TPC_INTR_CAUSE] = { |
| 159 | "tpc_address_exceed_slm", | 182 | "tpc_address_exceed_slm", |
| @@ -433,7 +456,7 @@ static int gaudi_get_fixed_properties(struct hl_device *hdev) · 273 unmodified lines | |||
| 433 | prop->num_of_events = GAUDI_EVENT_SIZE; | 456 | prop->num_of_events = GAUDI_EVENT_SIZE; |
| 434 | prop->tpc_enabled_mask = TPC_ENABLED_MASK; | 457 | prop->tpc_enabled_mask = TPC_ENABLED_MASK; |
| 435 | 458 | ||
| 436 | prop->max_power_default = MAX_POWER_DEFAULT; | 459 | prop->max_power_default = MAX_POWER_DEFAULT_PCI; |
| 437 | 460 | ||
| 438 | prop->cb_pool_cb_cnt = GAUDI_CB_POOL_CB_CNT; | 461 | prop->cb_pool_cb_cnt = GAUDI_CB_POOL_CB_CNT; |
| 439 | prop->cb_pool_cb_size = GAUDI_CB_POOL_CB_SIZE; | 462 | prop->cb_pool_cb_size = GAUDI_CB_POOL_CB_SIZE; |
| @@ -2485,6 +2508,7 @@ static void gaudi_set_clock_gating(struct hl_device *hdev) · 2045 unmodified lines | |||
| 2485 | { | 2508 | { |
| 2486 | struct gaudi_device *gaudi = hdev->asic_specific; | 2509 | struct gaudi_device *gaudi = hdev->asic_specific; |
| 2487 | u32 qman_offset; | 2510 | u32 qman_offset; |
| 2511 | bool enable; | ||
| 2488 | int i; | 2512 | int i; |
| 2489 | 2513 | ||
| 2490 | /* In case we are during debug session, don't enable the clock gate | 2514 | /* In case we are during debug session, don't enable the clock gate |
| @@ -2494,46 +2518,43 @@ static void gaudi_set_clock_gating(struct hl_device *hdev) · 3 unmodified lines | |||
| 2494 | return; | 2518 | return; |
| 2495 | 2519 | ||
| 2496 | for (i = GAUDI_PCI_DMA_1, qman_offset = 0 ; i < GAUDI_HBM_DMA_1 ; i++) { | 2520 | for (i = GAUDI_PCI_DMA_1, qman_offset = 0 ; i < GAUDI_HBM_DMA_1 ; i++) { |
| 2497 | if (!(hdev->clock_gating_mask & | 2521 | enable = !!(hdev->clock_gating_mask & |
| 2498 | (BIT_ULL(gaudi_dma_assignment[i])))) | 2522 | (BIT_ULL(gaudi_dma_assignment[i]))); |
| 2499 | continue; | ||
| 2500 | 2523 | ||
| 2501 | qman_offset = gaudi_dma_assignment[i] * DMA_QMAN_OFFSET; | 2524 | qman_offset = gaudi_dma_assignment[i] * DMA_QMAN_OFFSET; |
| 2502 | WREG32(mmDMA0_QM_CGM_CFG1 + qman_offset, QMAN_CGM1_PWR_GATE_EN); | 2525 | WREG32(mmDMA0_QM_CGM_CFG1 + qman_offset, |
| 2526 | enable ? QMAN_CGM1_PWR_GATE_EN : 0); | ||
| 2503 | WREG32(mmDMA0_QM_CGM_CFG + qman_offset, | 2527 | WREG32(mmDMA0_QM_CGM_CFG + qman_offset, |
| 2504 | QMAN_UPPER_CP_CGM_PWR_GATE_EN); | 2528 | enable ? QMAN_UPPER_CP_CGM_PWR_GATE_EN : 0); |
| 2505 | } | 2529 | } |
| 2506 | 2530 | ||
| 2507 | for (i = GAUDI_HBM_DMA_1 ; i < GAUDI_DMA_MAX ; i++) { | 2531 | for (i = GAUDI_HBM_DMA_1 ; i < GAUDI_DMA_MAX ; i++) { |
| 2508 | if (!(hdev->clock_gating_mask & | 2532 | enable = !!(hdev->clock_gating_mask & |
| 2509 | (BIT_ULL(gaudi_dma_assignment[i])))) | 2533 | (BIT_ULL(gaudi_dma_assignment[i]))); |
| 2510 | continue; | ||
| 2511 | 2534 | ||
| 2512 | qman_offset = gaudi_dma_assignment[i] * DMA_QMAN_OFFSET; | 2535 | qman_offset = gaudi_dma_assignment[i] * DMA_QMAN_OFFSET; |
| 2513 | WREG32(mmDMA0_QM_CGM_CFG1 + qman_offset, QMAN_CGM1_PWR_GATE_EN); | 2536 | WREG32(mmDMA0_QM_CGM_CFG1 + qman_offset, |
| 2537 | enable ? QMAN_CGM1_PWR_GATE_EN : 0); | ||
| 2514 | WREG32(mmDMA0_QM_CGM_CFG + qman_offset, | 2538 | WREG32(mmDMA0_QM_CGM_CFG + qman_offset, |
| 2515 | QMAN_COMMON_CP_CGM_PWR_GATE_EN); | 2539 | enable ? QMAN_COMMON_CP_CGM_PWR_GATE_EN : 0); |
| 2516 | } | 2540 | } |
| 2517 | 2541 | ||
| 2518 | if (hdev->clock_gating_mask & (BIT_ULL(GAUDI_ENGINE_ID_MME_0))) { | 2542 | enable = !!(hdev->clock_gating_mask & (BIT_ULL(GAUDI_ENGINE_ID_MME_0))); |
| 2519 | WREG32(mmMME0_QM_CGM_CFG1, QMAN_CGM1_PWR_GATE_EN); | 2543 | WREG32(mmMME0_QM_CGM_CFG1, enable ? QMAN_CGM1_PWR_GATE_EN : 0); |
| 2520 | WREG32(mmMME0_QM_CGM_CFG, QMAN_COMMON_CP_CGM_PWR_GATE_EN); | 2544 | WREG32(mmMME0_QM_CGM_CFG, enable ? QMAN_COMMON_CP_CGM_PWR_GATE_EN : 0); |
| 2521 | } | ||
| 2522 | 2545 | ||
| 2523 | if (hdev->clock_gating_mask & (BIT_ULL(GAUDI_ENGINE_ID_MME_2))) { | 2546 | enable = !!(hdev->clock_gating_mask & (BIT_ULL(GAUDI_ENGINE_ID_MME_2))); |
| 2524 | WREG32(mmMME2_QM_CGM_CFG1, QMAN_CGM1_PWR_GATE_EN); | 2547 | WREG32(mmMME2_QM_CGM_CFG1, enable ? QMAN_CGM1_PWR_GATE_EN : 0); |
| 2525 | WREG32(mmMME2_QM_CGM_CFG, QMAN_COMMON_CP_CGM_PWR_GATE_EN); | 2548 | WREG32(mmMME2_QM_CGM_CFG, enable ? QMAN_COMMON_CP_CGM_PWR_GATE_EN : 0); |
| 2526 | } | ||
| 2527 | 2549 | ||
| 2528 | for (i = 0, qman_offset = 0 ; i < TPC_NUMBER_OF_ENGINES ; i++) { | 2550 | for (i = 0, qman_offset = 0 ; i < TPC_NUMBER_OF_ENGINES ; i++) { |
| 2529 | if (!(hdev->clock_gating_mask & | 2551 | enable = !!(hdev->clock_gating_mask & |
| 2530 | (BIT_ULL(GAUDI_ENGINE_ID_TPC_0 + i)))) | 2552 | (BIT_ULL(GAUDI_ENGINE_ID_TPC_0 + i))); |
| 2531 | continue; | ||
| 2532 | 2553 | ||
| 2533 | WREG32(mmTPC0_QM_CGM_CFG1 + qman_offset, | 2554 | WREG32(mmTPC0_QM_CGM_CFG1 + qman_offset, |
| 2534 | QMAN_CGM1_PWR_GATE_EN); | 2555 | enable ? QMAN_CGM1_PWR_GATE_EN : 0); |
| 2535 | WREG32(mmTPC0_QM_CGM_CFG + qman_offset, | 2556 | WREG32(mmTPC0_QM_CGM_CFG + qman_offset, |
| 2536 | QMAN_COMMON_CP_CGM_PWR_GATE_EN); | 2557 | enable ? QMAN_COMMON_CP_CGM_PWR_GATE_EN : 0); |
| 2537 | 2558 | ||
| 2538 | qman_offset += TPC_QMAN_OFFSET; | 2559 | qman_offset += TPC_QMAN_OFFSET; |
| 2539 | } | 2560 | } |
| @@ -3772,6 +3793,12 @@ static int gaudi_validate_cb(struct hl_device *hdev, · 1232 unmodified lines | |||
| 3772 | PACKET_HEADER_PACKET_ID_MASK) >> | 3793 | PACKET_HEADER_PACKET_ID_MASK) >> |
| 3773 | PACKET_HEADER_PACKET_ID_SHIFT); | 3794 | PACKET_HEADER_PACKET_ID_SHIFT); |
| 3774 | 3795 | ||
| 3796 | if (!validate_packet_id(pkt_id)) { | ||
| 3797 | dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id); | ||
| 3798 | rc = -EINVAL; | ||
| 3799 | break; | ||
| 3800 | } | ||
| 3801 | |||
| 3775 | pkt_size = gaudi_packet_sizes[pkt_id]; | 3802 | pkt_size = gaudi_packet_sizes[pkt_id]; |
| 3776 | cb_parsed_length += pkt_size; | 3803 | cb_parsed_length += pkt_size; |
| 3777 | if (cb_parsed_length > parser->user_cb_size) { | 3804 | if (cb_parsed_length > parser->user_cb_size) { |
| @@ -3995,6 +4022,12 @@ static int gaudi_patch_cb(struct hl_device *hdev, · 217 unmodified lines | |||
| 3995 | PACKET_HEADER_PACKET_ID_MASK) >> | 4022 | PACKET_HEADER_PACKET_ID_MASK) >> |
| 3996 | PACKET_HEADER_PACKET_ID_SHIFT); | 4023 | PACKET_HEADER_PACKET_ID_SHIFT); |
| 3997 | 4024 | ||
| 4025 | if (!validate_packet_id(pkt_id)) { | ||
| 4026 | dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id); | ||
| 4027 | rc = -EINVAL; | ||
| 4028 | break; | ||
| 4029 | } | ||
| 4030 | |||
| 3998 | pkt_size = gaudi_packet_sizes[pkt_id]; | 4031 | pkt_size = gaudi_packet_sizes[pkt_id]; |
| 3999 | cb_parsed_length += pkt_size; | 4032 | cb_parsed_length += pkt_size; |
| 4000 | if (cb_parsed_length > parser->user_cb_size) { | 4033 | if (cb_parsed_length > parser->user_cb_size) { |
| @@ -5215,7 +5248,7 @@ static int gaudi_extract_ecc_info(struct hl_device *hdev, · 1214 unmodified lines | |||
| 5215 | *memory_wrapper_idx = 0xFF; | 5248 | *memory_wrapper_idx = 0xFF; |
| 5216 | 5249 | ||
| 5217 | /* Iterate through memory wrappers, a single bit must be set */ | 5250 | /* Iterate through memory wrappers, a single bit must be set */ |
| 5218 | for (i = 0 ; i > num_mem_regs ; i++) { | 5251 | for (i = 0 ; i < num_mem_regs ; i++) { |
| 5219 | err_addr += i * 4; | 5252 | err_addr += i * 4; |
| 5220 | err_word = RREG32(err_addr); | 5253 | err_word = RREG32(err_addr); |
| 5221 | if (err_word) { | 5254 | if (err_word) { |
| @@ -6022,6 +6055,15 @@ static int gaudi_armcp_info_get(struct hl_device *hdev) · 800 unmodified lines | |||
| 6022 | strncpy(prop->armcp_info.card_name, GAUDI_DEFAULT_CARD_NAME, | 6055 | strncpy(prop->armcp_info.card_name, GAUDI_DEFAULT_CARD_NAME, |
| 6023 | CARD_NAME_MAX_LEN); | 6056 | CARD_NAME_MAX_LEN); |
| 6024 | 6057 | ||
| 6058 | hdev->card_type = le32_to_cpu(hdev->asic_prop.armcp_info.card_type); | ||
| 6059 | |||
| 6060 | if (hdev->card_type == armcp_card_type_pci) | ||
| 6061 | prop->max_power_default = MAX_POWER_DEFAULT_PCI; | ||
| 6062 | else if (hdev->card_type == armcp_card_type_pmc) | ||
| 6063 | prop->max_power_default = MAX_POWER_DEFAULT_PMC; | ||
| 6064 | |||
| 6065 | hdev->max_power = prop->max_power_default; | ||
| 6066 | |||
| 6025 | return 0; | 6067 | return 0; |
| 6026 | } | 6068 | } |
| 6027 | 6069 | ||
| @@ -41,7 +41,8 @@ · 40 unmodified lines | |||
| 41 | 41 | ||
| 42 | #define GAUDI_MAX_CLK_FREQ 2200000000ull /* 2200 MHz */ | 42 | #define GAUDI_MAX_CLK_FREQ 2200000000ull /* 2200 MHz */ |
| 43 | 43 | ||
| 44 | #define MAX_POWER_DEFAULT 200000 /* 200W */ | 44 | #define MAX_POWER_DEFAULT_PCI 200000 /* 200W */ |
| 45 | #define MAX_POWER_DEFAULT_PMC 350000 /* 350W */ | ||
| 45 | 46 | ||
| 46 | #define GAUDI_CPU_TIMEOUT_USEC 15000000 /* 15s */ | 47 | #define GAUDI_CPU_TIMEOUT_USEC 15000000 /* 15s */ |
| 47 | 48 | ||
| @@ -527,7 +527,7 @@ static int gaudi_config_etf(struct hl_device *hdev, · 526 unmodified lines | |||
| 527 | } | 527 | } |
| 528 | 528 | ||
| 529 | static bool gaudi_etr_validate_address(struct hl_device *hdev, u64 addr, | 529 | static bool gaudi_etr_validate_address(struct hl_device *hdev, u64 addr, |
| 530 | u32 size, bool *is_host) | 530 | u64 size, bool *is_host) |
| 531 | { | 531 | { |
| 532 | struct asic_fixed_properties *prop = &hdev->asic_prop; | 532 | struct asic_fixed_properties *prop = &hdev->asic_prop; |
| 533 | struct gaudi_device *gaudi = hdev->asic_specific; | 533 | struct gaudi_device *gaudi = hdev->asic_specific; |
| @@ -539,6 +539,12 @@ static bool gaudi_etr_validate_address(struct hl_device *hdev, u64 addr, · 5 unmodified lines | |||
| 539 | return false; | 539 | return false; |
| 540 | } | 540 | } |
| 541 | 541 | ||
| 542 | if (addr > (addr + size)) { | ||
| 543 | dev_err(hdev->dev, | ||
| 544 | "ETR buffer size %llu overflow\n", size); | ||
| 545 | return false; | ||
| 546 | } | ||
| 547 | |||
| 542 | /* PMMU and HPMMU addresses are equal, check only one of them */ | 548 | /* PMMU and HPMMU addresses are equal, check only one of them */ |
| 543 | if ((gaudi->hw_cap_initialized & HW_CAP_MMU) && | 549 | if ((gaudi->hw_cap_initialized & HW_CAP_MMU) && |
| 544 | hl_mem_area_inside_range(addr, size, | 550 | hl_mem_area_inside_range(addr, size, |
| @@ -139,6 +139,25 @@ static u16 goya_packet_sizes[MAX_PACKET_ID] = { · 138 unmodified lines | |||
| 139 | [PACKET_STOP] = sizeof(struct packet_stop) | 139 | [PACKET_STOP] = sizeof(struct packet_stop) |
| 140 | }; | 140 | }; |
| 141 | 141 | ||
| 142 | static inline bool validate_packet_id(enum packet_id id) | ||
| 143 | { | ||
| 144 | switch (id) { | ||
| 145 | case PACKET_WREG_32: | ||
| 146 | case PACKET_WREG_BULK: | ||
| 147 | case PACKET_MSG_LONG: | ||
| 148 | case PACKET_MSG_SHORT: | ||
| 149 | case PACKET_CP_DMA: | ||
| 150 | case PACKET_MSG_PROT: | ||
| 151 | case PACKET_FENCE: | ||
| 152 | case PACKET_LIN_DMA: | ||
| 153 | case PACKET_NOP: | ||
| 154 | case PACKET_STOP: | ||
| 155 | return true; | ||
| 156 | default: | ||
| 157 | return false; | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 142 | static u64 goya_mmu_regs[GOYA_MMU_REGS_NUM] = { | 161 | static u64 goya_mmu_regs[GOYA_MMU_REGS_NUM] = { |
| 143 | mmDMA_QM_0_GLBL_NON_SECURE_PROPS, | 162 | mmDMA_QM_0_GLBL_NON_SECURE_PROPS, |
| 144 | mmDMA_QM_1_GLBL_NON_SECURE_PROPS, | 163 | mmDMA_QM_1_GLBL_NON_SECURE_PROPS, |
| @@ -3455,6 +3474,12 @@ static int goya_validate_cb(struct hl_device *hdev, · 3310 unmodified lines | |||
| 3455 | PACKET_HEADER_PACKET_ID_MASK) >> | 3474 | PACKET_HEADER_PACKET_ID_MASK) >> |
| 3456 | PACKET_HEADER_PACKET_ID_SHIFT); | 3475 | PACKET_HEADER_PACKET_ID_SHIFT); |
| 3457 | 3476 | ||
| 3477 | if (!validate_packet_id(pkt_id)) { | ||
| 3478 | dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id); | ||
| 3479 | rc = -EINVAL; | ||
| 3480 | break; | ||
| 3481 | } | ||
| 3482 | |||
| 3458 | pkt_size = goya_packet_sizes[pkt_id]; | 3483 | pkt_size = goya_packet_sizes[pkt_id]; |
| 3459 | cb_parsed_length += pkt_size; | 3484 | cb_parsed_length += pkt_size; |
| 3460 | if (cb_parsed_length > parser->user_cb_size) { | 3485 | if (cb_parsed_length > parser->user_cb_size) { |
| @@ -3690,6 +3715,12 @@ static int goya_patch_cb(struct hl_device *hdev, · 229 unmodified lines | |||
| 3690 | PACKET_HEADER_PACKET_ID_MASK) >> | 3715 | PACKET_HEADER_PACKET_ID_MASK) >> |
| 3691 | PACKET_HEADER_PACKET_ID_SHIFT); | 3716 | PACKET_HEADER_PACKET_ID_SHIFT); |
| 3692 | 3717 | ||
| 3718 | if (!validate_packet_id(pkt_id)) { | ||
| 3719 | dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id); | ||
| 3720 | rc = -EINVAL; | ||
| 3721 | break; | ||
| 3722 | } | ||
| 3723 | |||
| 3693 | pkt_size = goya_packet_sizes[pkt_id]; | 3724 | pkt_size = goya_packet_sizes[pkt_id]; |
| 3694 | cb_parsed_length += pkt_size; | 3725 | cb_parsed_length += pkt_size; |
| 3695 | if (cb_parsed_length > parser->user_cb_size) { | 3726 | if (cb_parsed_length > parser->user_cb_size) { |
| @@ -362,11 +362,17 @@ static int goya_config_etf(struct hl_device *hdev, · 361 unmodified lines | |||
| 362 | } | 362 | } |
| 363 | 363 | ||
| 364 | static int goya_etr_validate_address(struct hl_device *hdev, u64 addr, | 364 | static int goya_etr_validate_address(struct hl_device *hdev, u64 addr, |
| 365 | u32 size) | 365 | u64 size) |
| 366 | { | 366 | { |
| 367 | struct asic_fixed_properties *prop = &hdev->asic_prop; | 367 | struct asic_fixed_properties *prop = &hdev->asic_prop; |
| 368 | u64 range_start, range_end; | 368 | u64 range_start, range_end; |
| 369 | 369 | ||
| 370 | if (addr > (addr + size)) { | ||
| 371 | dev_err(hdev->dev, | ||
| 372 | "ETR buffer size %llu overflow\n", size); | ||
| 373 | return false; | ||
| 374 | } | ||
| 375 | |||
| 370 | if (hdev->mmu_enable) { | 376 | if (hdev->mmu_enable) { |
| 371 | range_start = prop->dmmu.start_addr; | 377 | range_start = prop->dmmu.start_addr; |
| 372 | range_end = prop->dmmu.end_addr; | 378 | range_end = prop->dmmu.end_addr; |
| @@ -546,38 +546,46 @@ static int mei_hdcp_verify_mprime(struct device *dev, · 545 unmodified lines | |||
| 546 | struct hdcp_port_data *data, | 546 | struct hdcp_port_data *data, |
| 547 | struct hdcp2_rep_stream_ready *stream_ready) | 547 | struct hdcp2_rep_stream_ready *stream_ready) |
| 548 | { | 548 | { |
| 549 | struct wired_cmd_repeater_auth_stream_req_in | 549 | struct wired_cmd_repeater_auth_stream_req_in *verify_mprime_in; |
| 550 | verify_mprime_in = { { 0 } }; | ||
| 551 | struct wired_cmd_repeater_auth_stream_req_out | 550 | struct wired_cmd_repeater_auth_stream_req_out |
| 552 | verify_mprime_out = { { 0 } }; | 551 | verify_mprime_out = { { 0 } }; |
| 553 | struct mei_cl_device *cldev; | 552 | struct mei_cl_device *cldev; |
| 554 | ssize_t byte; | 553 | ssize_t byte; |
| 554 | size_t cmd_size; | ||
| 555 | 555 | ||
| 556 | if (!dev || !stream_ready || !data) | 556 | if (!dev || !stream_ready || !data) |
| 557 | return -EINVAL; | 557 | return -EINVAL; |
| 558 | 558 | ||
| 559 | cldev = to_mei_cl_device(dev); | 559 | cldev = to_mei_cl_device(dev); |
| 560 | 560 | ||
| 561 | verify_mprime_in.header.api_version = HDCP_API_VERSION; | 561 | cmd_size = struct_size(verify_mprime_in, streams, data->k); |
| 562 | verify_mprime_in.header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; | 562 | if (cmd_size == SIZE_MAX) |
| 563 | verify_mprime_in.header.status = ME_HDCP_STATUS_SUCCESS; | 563 | return -EINVAL; |
| 564 | verify_mprime_in.header.buffer_len = | 564 | |
| 565 | verify_mprime_in = kzalloc(cmd_size, GFP_KERNEL); | ||
| 566 | if (!verify_mprime_in) | ||
| 567 | return -ENOMEM; | ||
| 568 | |||
| 569 | verify_mprime_in->header.api_version = HDCP_API_VERSION; | ||
| 570 | verify_mprime_in->header.command_id = WIRED_REPEATER_AUTH_STREAM_REQ; | ||
| 571 | verify_mprime_in->header.status = ME_HDCP_STATUS_SUCCESS; | ||
| 572 | verify_mprime_in->header.buffer_len = | ||
| 565 | WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_MIN_IN; | 573 | WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_MIN_IN; |
| 566 | 574 | ||
| 567 | verify_mprime_in.port.integrated_port_type = data->port_type; | 575 | verify_mprime_in->port.integrated_port_type = data->port_type; |
| 568 | verify_mprime_in.port.physical_port = (u8)data->fw_ddi; | 576 | verify_mprime_in->port.physical_port = (u8)data->fw_ddi; |
| 569 | verify_mprime_in.port.attached_transcoder = (u8)data->fw_tc; | 577 | verify_mprime_in->port.attached_transcoder = (u8)data->fw_tc; |
| 578 | |||
| 579 | memcpy(verify_mprime_in->m_prime, stream_ready->m_prime, HDCP_2_2_MPRIME_LEN); | ||
| 580 | drm_hdcp_cpu_to_be24(verify_mprime_in->seq_num_m, data->seq_num_m); | ||
| 570 | 581 | ||
| 571 | memcpy(verify_mprime_in.m_prime, stream_ready->m_prime, | 582 | memcpy(verify_mprime_in->streams, data->streams, |
| 572 | HDCP_2_2_MPRIME_LEN); | ||
| 573 | drm_hdcp_cpu_to_be24(verify_mprime_in.seq_num_m, data->seq_num_m); | ||
| 574 | memcpy(verify_mprime_in.streams, data->streams, | ||
| 575 | array_size(data->k, sizeof(*data->streams))); | 583 | array_size(data->k, sizeof(*data->streams))); |
| 576 | 584 | ||
| 577 | verify_mprime_in.k = cpu_to_be16(data->k); | 585 | verify_mprime_in->k = cpu_to_be16(data->k); |
| 578 | 586 | ||
| 579 | byte = mei_cldev_send(cldev, (u8 *)&verify_mprime_in, | 587 | byte = mei_cldev_send(cldev, (u8 *)verify_mprime_in, cmd_size); |
| 580 | sizeof(verify_mprime_in)); | 588 | kfree(verify_mprime_in); |
| 581 | if (byte < 0) { | 589 | if (byte < 0) { |
| 582 | dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte); | 590 | dev_dbg(dev, "mei_cldev_send failed. %zd\n", byte); |
| 583 | return byte; | 591 | return byte; |
| @@ -178,7 +178,7 @@ int scif_close(scif_epd_t epd) · 177 unmodified lines | |||
| 178 | case SCIFEP_ZOMBIE: | 178 | case SCIFEP_ZOMBIE: |
| 179 | dev_err(scif_info.mdev.this_device, | 179 | dev_err(scif_info.mdev.this_device, |
| 180 | "SCIFAPI close: zombie state unexpected\n"); | 180 | "SCIFAPI close: zombie state unexpected\n"); |
| 181 | /* fall through */ | 181 | fallthrough; |
| 182 | case SCIFEP_DISCONNECTED: | 182 | case SCIFEP_DISCONNECTED: |
| 183 | spin_unlock(&ep->lock); | 183 | spin_unlock(&ep->lock); |
| 184 | scif_unregister_all_windows(epd); | 184 | scif_unregister_all_windows(epd); |
| @@ -645,7 +645,7 @@ int __scif_connect(scif_epd_t epd, struct scif_port_id *dst, bool non_block) · 460 unmodified lines | |||
| 645 | ep->port.port = err; | 645 | ep->port.port = err; |
| 646 | ep->port.node = scif_info.nodeid; | 646 | ep->port.node = scif_info.nodeid; |
| 647 | ep->conn_async_state = ASYNC_CONN_IDLE; | 647 | ep->conn_async_state = ASYNC_CONN_IDLE; |
| 648 | /* Fall through */ | 648 | fallthrough; |
| 649 | case SCIFEP_BOUND: | 649 | case SCIFEP_BOUND: |
| 650 | /* | 650 | /* |
| 651 | * If a non-blocking connect has been already initiated | 651 | * If a non-blocking connect has been already initiated |
| @@ -657,7 +657,7 @@ int scif_unregister_window(struct scif_window *window) · 656 unmodified lines | |||
| 657 | window->unreg_state = OP_IN_PROGRESS; | 657 | window->unreg_state = OP_IN_PROGRESS; |
| 658 | send_msg = true; | 658 | send_msg = true; |
| 659 | } | 659 | } |
| 660 | /* fall through */ | 660 | fallthrough; |
| 661 | case OP_IN_PROGRESS: | 661 | case OP_IN_PROGRESS: |
| 662 | { | 662 | { |
| 663 | scif_get_window(window, 1); | 663 | scif_get_window(window, 1); |
| @@ -622,7 +622,7 @@ static int send_noop_message(void *cb, struct gru_message_queue_desc *mqd, · 621 unmodified lines | |||
| 622 | break; | 622 | break; |
| 623 | case CBSS_PAGE_OVERFLOW: | 623 | case CBSS_PAGE_OVERFLOW: |
| 624 | STAT(mesq_noop_page_overflow); | 624 | STAT(mesq_noop_page_overflow); |
| 625 | /* fall through */ | 625 | fallthrough; |
| 626 | default: | 626 | default: |
| 627 | BUG(); | 627 | BUG(); |
| 628 | } | 628 | } |
| @@ -780,7 +780,7 @@ static int send_message_failure(void *cb, struct gru_message_queue_desc *mqd, · 151 unmodified lines | |||
| 780 | break; | 780 | break; |
| 781 | case CBSS_PAGE_OVERFLOW: | 781 | case CBSS_PAGE_OVERFLOW: |
| 782 | STAT(mesq_page_overflow); | 782 | STAT(mesq_page_overflow); |
| 783 | /* fall through */ | 783 | fallthrough; |
| 784 | default: | 784 | default: |
| 785 | BUG(); | 785 | BUG(); |
| 786 | } | 786 | } |
| @@ -1173,7 +1173,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args) · 1172 unmodified lines | |||
| 1173 | if (!xpc_kdebug_ignore) | 1173 | if (!xpc_kdebug_ignore) |
| 1174 | break; | 1174 | break; |
| 1175 | 1175 | ||
| 1176 | /* fall through */ | 1176 | fallthrough; |
| 1177 | case DIE_MCA_MONARCH_ENTER: | 1177 | case DIE_MCA_MONARCH_ENTER: |
| 1178 | case DIE_INIT_MONARCH_ENTER: | 1178 | case DIE_INIT_MONARCH_ENTER: |
| 1179 | xpc_arch_ops.offline_heartbeat(); | 1179 | xpc_arch_ops.offline_heartbeat(); |
| @@ -1184,7 +1184,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args) · 4 unmodified lines | |||
| 1184 | if (!xpc_kdebug_ignore) | 1184 | if (!xpc_kdebug_ignore) |
| 1185 | break; | 1185 | break; |
| 1186 | 1186 | ||
| 1187 | /* fall through */ | 1187 | fallthrough; |
| 1188 | case DIE_MCA_MONARCH_LEAVE: | 1188 | case DIE_MCA_MONARCH_LEAVE: |
| 1189 | case DIE_INIT_MONARCH_LEAVE: | 1189 | case DIE_INIT_MONARCH_LEAVE: |
| 1190 | xpc_arch_ops.online_heartbeat(); | 1190 | xpc_arch_ops.online_heartbeat(); |
| @@ -441,10 +441,10 @@ xpc_discovery(void) · 440 unmodified lines | |||
| 441 | switch (region_size) { | 441 | switch (region_size) { |
| 442 | case 128: | 442 | case 128: |
| 443 | max_regions *= 2; | 443 | max_regions *= 2; |
| 444 | /* fall through */ | 444 | fallthrough; |
| 445 | case 64: | 445 | case 64: |
| 446 | max_regions *= 2; | 446 | max_regions *= 2; |
| 447 | /* fall through */ | 447 | fallthrough; |
| 448 | case 32: | 448 | case 32: |
| 449 | max_regions *= 2; | 449 | max_regions *= 2; |
| 450 | region_size = 16; | 450 | region_size = 16; |
| @@ -574,7 +574,7 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, · 573 unmodified lines | |||
| 574 | 574 | ||
| 575 | xpc_wakeup_channel_mgr(part); | 575 | xpc_wakeup_channel_mgr(part); |
| 576 | } | 576 | } |
| 577 | /* fall through */ | 577 | fallthrough; |
| 578 | case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: | 578 | case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: |
| 579 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); | 579 | spin_lock_irqsave(&part_uv->flags_lock, irq_flags); |
| 580 | part_uv->flags |= XPC_P_ENGAGED_UV; | 580 | part_uv->flags |= XPC_P_ENGAGED_UV; |
| @@ -191,7 +191,7 @@ int mmc_of_parse(struct mmc_host *host) · 190 unmodified lines | |||
| 191 | switch (bus_width) { | 191 | switch (bus_width) { |
| 192 | case 8: | 192 | case 8: |
| 193 | host->caps |= MMC_CAP_8_BIT_DATA; | 193 | host->caps |= MMC_CAP_8_BIT_DATA; |
| 194 | /* fall through - Hosts capable of 8-bit can also do 4 bits */ | 194 | fallthrough; /* Hosts capable of 8-bit can also do 4 bits */ |
| 195 | case 4: | 195 | case 4: |
| 196 | host->caps |= MMC_CAP_4_BIT_DATA; | 196 | host->caps |= MMC_CAP_4_BIT_DATA; |
| 197 | break; | 197 | break; |
| @@ -2418,7 +2418,7 @@ static void atmci_get_cap(struct atmel_mci *host) · 2417 unmodified lines | |||
| 2418 | case 0x600: | 2418 | case 0x600: |
| 2419 | case 0x500: | 2419 | case 0x500: |
| 2420 | host->caps.has_odd_clk_div = 1; | 2420 | host->caps.has_odd_clk_div = 1; |
| 2421 | /* Fall through */ | 2421 | fallthrough; |
| 2422 | case 0x400: | 2422 | case 0x400: |
| 2423 | case 0x300: | 2423 | case 0x300: |
| 2424 | host->caps.has_dma_conf_reg = 1; | 2424 | host->caps.has_dma_conf_reg = 1; |
| @@ -2426,16 +2426,16 @@ static void atmci_get_cap(struct atmel_mci *host) · 1 unmodified line | |||
| 2426 | host->caps.has_cfg_reg = 1; | 2426 | host->caps.has_cfg_reg = 1; |
| 2427 | host->caps.has_cstor_reg = 1; | 2427 | host->caps.has_cstor_reg = 1; |
| 2428 | host->caps.has_highspeed = 1; | 2428 | host->caps.has_highspeed = 1; |
| 2429 | /* Fall through */ | 2429 | fallthrough; |
| 2430 | case 0x200: | 2430 | case 0x200: |
| 2431 | host->caps.has_rwproof = 1; | 2431 | host->caps.has_rwproof = 1; |
| 2432 | host->caps.need_blksz_mul_4 = 0; | 2432 | host->caps.need_blksz_mul_4 = 0; |
| 2433 | host->caps.need_notbusy_for_read_ops = 1; | 2433 | host->caps.need_notbusy_for_read_ops = 1; |
| 2434 | /* Fall through */ | 2434 | fallthrough; |
| 2435 | case 0x100: | 2435 | case 0x100: |
| 2436 | host->caps.has_bad_data_ordering = 0; | 2436 | host->caps.has_bad_data_ordering = 0; |
| 2437 | host->caps.need_reset_after_xfer = 0; | 2437 | host->caps.need_reset_after_xfer = 0; |
| 2438 | /* Fall through */ | 2438 | fallthrough; |
| 2439 | case 0x0: | 2439 | case 0x0: |
| 2440 | break; | 2440 | break; |
| 2441 | default: | 2441 | default: |
| @@ -300,7 +300,7 @@ static void mmc_davinci_start_command(struct mmc_davinci_host *host, · 299 unmodified lines | |||
| 300 | * then it's harmless for us to allow it. | 300 | * then it's harmless for us to allow it. |
| 301 | */ | 301 | */ |
| 302 | cmd_reg |= MMCCMD_BSYEXP; | 302 | cmd_reg |= MMCCMD_BSYEXP; |
| 303 | /* FALLTHROUGH */ | 303 | fallthrough; |
| 304 | case MMC_RSP_R1: /* 48 bits, CRC */ | 304 | case MMC_RSP_R1: /* 48 bits, CRC */ |
| 305 | cmd_reg |= MMCCMD_RSPFMT_R1456; | 305 | cmd_reg |= MMCCMD_RSPFMT_R1456; |
| 306 | break; | 306 | break; |
| @@ -238,7 +238,7 @@ static void dw_mci_hs_set_timing(struct dw_mci *host, int timing, · 237 unmodified lines | |||
| 238 | if (smpl_phase >= USE_DLY_MIN_SMPL && | 238 | if (smpl_phase >= USE_DLY_MIN_SMPL && |
| 239 | smpl_phase <= USE_DLY_MAX_SMPL) | 239 | smpl_phase <= USE_DLY_MAX_SMPL) |
| 240 | use_smpl_dly = 1; | 240 | use_smpl_dly = 1; |
| 241 | /* fallthrough */ | 241 | fallthrough; |
| 242 | case MMC_TIMING_UHS_SDR50: | 242 | case MMC_TIMING_UHS_SDR50: |
| 243 | if (smpl_phase >= ENABLE_SHIFT_MIN_SMPL && | 243 | if (smpl_phase >= ENABLE_SHIFT_MIN_SMPL && |
| 244 | smpl_phase <= ENABLE_SHIFT_MAX_SMPL) | 244 | smpl_phase <= ENABLE_SHIFT_MAX_SMPL) |
| @@ -2030,7 +2030,7 @@ static void dw_mci_tasklet_func(unsigned long priv) · 2029 unmodified lines | |||
| 2030 | } | 2030 | } |
| 2031 | 2031 | ||
| 2032 | prev_state = state = STATE_SENDING_DATA; | 2032 | prev_state = state = STATE_SENDING_DATA; |
| 2033 | /* fall through */ | 2033 | fallthrough; |
| 2034 | 2034 | ||
| 2035 | case STATE_SENDING_DATA: | 2035 | case STATE_SENDING_DATA: |
| 2036 | /* | 2036 | /* |
| @@ -2088,7 +2088,7 @@ static void dw_mci_tasklet_func(unsigned long priv) · 51 unmodified lines | |||
| 2088 | } | 2088 | } |
| 2089 | prev_state = state = STATE_DATA_BUSY; | 2089 | prev_state = state = STATE_DATA_BUSY; |
| 2090 | 2090 | ||
| 2091 | /* fall through */ | 2091 | fallthrough; |
| 2092 | 2092 | ||
| 2093 | case STATE_DATA_BUSY: | 2093 | case STATE_DATA_BUSY: |
| 2094 | if (!dw_mci_clear_pending_data_complete(host)) { | 2094 | if (!dw_mci_clear_pending_data_complete(host)) { |
| @@ -2141,7 +2141,7 @@ static void dw_mci_tasklet_func(unsigned long priv) · 46 unmodified lines | |||
| 2141 | */ | 2141 | */ |
| 2142 | prev_state = state = STATE_SENDING_STOP; | 2142 | prev_state = state = STATE_SENDING_STOP; |
| 2143 | 2143 | ||
| 2144 | /* fall through */ | 2144 | fallthrough; |
| 2145 | 2145 | ||
| 2146 | case STATE_SENDING_STOP: | 2146 | case STATE_SENDING_STOP: |
| 2147 | if (!dw_mci_clear_pending_cmd_complete(host)) | 2147 | if (!dw_mci_clear_pending_cmd_complete(host)) |
| @@ -739,7 +739,7 @@ static irqreturn_t jz_mmc_irq_worker(int irq, void *devid) · 738 unmodified lines | |||
| 739 | break; | 739 | break; |
| 740 | 740 | ||
| 741 | jz_mmc_prepare_data_transfer(host); | 741 | jz_mmc_prepare_data_transfer(host); |
| 742 | /* fall through */ | 742 | fallthrough; |
| 743 | 743 | ||
| 744 | case JZ4740_MMC_STATE_TRANSFER_DATA: | 744 | case JZ4740_MMC_STATE_TRANSFER_DATA: |
| 745 | if (host->use_dma) { | 745 | if (host->use_dma) { |
| @@ -774,7 +774,7 @@ static irqreturn_t jz_mmc_irq_worker(int irq, void *devid) · 28 unmodified lines | |||
| 774 | break; | 774 | break; |
| 775 | } | 775 | } |
| 776 | jz4740_mmc_write_irq_reg(host, JZ_MMC_IRQ_DATA_TRAN_DONE); | 776 | jz4740_mmc_write_irq_reg(host, JZ_MMC_IRQ_DATA_TRAN_DONE); |
| 777 | /* fall through */ | 777 | fallthrough; |
| 778 | 778 | ||
| 779 | case JZ4740_MMC_STATE_SEND_STOP: | 779 | case JZ4740_MMC_STATE_SEND_STOP: |
| 780 | if (!req->stop) | 780 | if (!req->stop) |
| @@ -294,7 +294,7 @@ static void meson_mx_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) · 293 unmodified lines | |||
| 294 | switch (ios->power_mode) { | 294 | switch (ios->power_mode) { |
| 295 | case MMC_POWER_OFF: | 295 | case MMC_POWER_OFF: |
| 296 | vdd = 0; | 296 | vdd = 0; |
| 297 | /* fall through */ | 297 | fallthrough; |
| 298 | case MMC_POWER_UP: | 298 | case MMC_POWER_UP: |
| 299 | if (!IS_ERR(mmc->supply.vmmc)) { | 299 | if (!IS_ERR(mmc->supply.vmmc)) { |
| 300 | host->error = mmc_regulator_set_ocr(mmc, | 300 | host->error = mmc_regulator_set_ocr(mmc, |
| @@ -685,7 +685,7 @@ static int renesas_sdhi_write16_hook(struct tmio_mmc_host *host, int addr) · 684 unmodified lines | |||
| 685 | case HOST_MODE: | 685 | case HOST_MODE: |
| 686 | if (host->pdata->flags & TMIO_MMC_HAVE_CBSY) | 686 | if (host->pdata->flags & TMIO_MMC_HAVE_CBSY) |
| 687 | bit = TMIO_STAT_CMD_BUSY; | 687 | bit = TMIO_STAT_CMD_BUSY; |
| 688 | /* fallthrough */ | 688 | fallthrough; |
| 689 | case CTL_SD_CARD_CLK_CTL: | 689 | case CTL_SD_CARD_CLK_CTL: |
| 690 | return renesas_sdhi_wait_idle(host, bit); | 690 | return renesas_sdhi_wait_idle(host, bit); |
| 691 | } | 691 | } |
| @@ -1556,7 +1556,7 @@ static int sdhci_esdhc_imx_probe_nondt(struct platform_device *pdev, · 1555 unmodified lines | |||
| 1556 | "failed to request card-detect gpio!\n"); | 1556 | "failed to request card-detect gpio!\n"); |
| 1557 | return err; | 1557 | return err; |
| 1558 | } | 1558 | } |
| 1559 | /* fall through */ | 1559 | fallthrough; |
| 1560 | 1560 | ||
| 1561 | case ESDHC_CD_CONTROLLER: | 1561 | case ESDHC_CD_CONTROLLER: |
| 1562 | /* we have a working card_detect back */ | 1562 | /* we have a working card_detect back */ |
| @@ -609,7 +609,7 @@ static int sdhci_s3c_probe(struct platform_device *pdev) · 608 unmodified lines | |||
| 609 | switch (pdata->max_width) { | 609 | switch (pdata->max_width) { |
| 610 | case 8: | 610 | case 8: |
| 611 | host->mmc->caps |= MMC_CAP_8_BIT_DATA; | 611 | host->mmc->caps |= MMC_CAP_8_BIT_DATA; |
| 612 | /* Fall through */ | 612 | fallthrough; |
| 613 | case 4: | 613 | case 4: |
| 614 | host->mmc->caps |= MMC_CAP_4_BIT_DATA; | 614 | host->mmc->caps |= MMC_CAP_4_BIT_DATA; |
| 615 | break; | 615 | break; |
| @@ -470,7 +470,7 @@ static int sdhci_sprd_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios) · 469 unmodified lines | |||
| 470 | break; | 470 | break; |
| 471 | 471 | ||
| 472 | default: | 472 | default: |
| 473 | /* fall-through */ | 473 | fallthrough; |
| 474 | case MMC_SIGNAL_VOLTAGE_330: | 474 | case MMC_SIGNAL_VOLTAGE_330: |
| 475 | ret = pinctrl_select_state(sprd_host->pinctrl, | 475 | ret = pinctrl_select_state(sprd_host->pinctrl, |
| 476 | sprd_host->pins_default); | 476 | sprd_host->pins_default); |
| @@ -527,7 +527,7 @@ static bool xenon_emmc_phy_slow_mode(struct sdhci_host *host, · 526 unmodified lines | |||
| 527 | ret = true; | 527 | ret = true; |
| 528 | break; | 528 | break; |
| 529 | } | 529 | } |
| 530 | /* fall through */ | 530 | fallthrough; |
| 531 | default: | 531 | default: |
| 532 | reg &= ~XENON_TIMING_ADJUST_SLOW_MODE; | 532 | reg &= ~XENON_TIMING_ADJUST_SLOW_MODE; |
| 533 | ret = false; | 533 | ret = false; |
| @@ -2825,7 +2825,7 @@ int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode) · 2824 unmodified lines | |||
| 2825 | case MMC_TIMING_UHS_SDR50: | 2825 | case MMC_TIMING_UHS_SDR50: |
| 2826 | if (host->flags & SDHCI_SDR50_NEEDS_TUNING) | 2826 | if (host->flags & SDHCI_SDR50_NEEDS_TUNING) |
| 2827 | break; | 2827 | break; |
| 2828 | /* FALLTHROUGH */ | 2828 | fallthrough; |
| 2829 | 2829 | ||
| 2830 | default: | 2830 | default: |
| 2831 | goto out; | 2831 | goto out; |
| @@ -335,7 +335,7 @@ static unsigned int tifm_sd_op_flags(struct mmc_command *cmd) · 334 unmodified lines | |||
| 335 | break; | 335 | break; |
| 336 | case MMC_RSP_R1B: | 336 | case MMC_RSP_R1B: |
| 337 | rc |= TIFM_MMCSD_RSP_BUSY; | 337 | rc |= TIFM_MMCSD_RSP_BUSY; |
| 338 | /* fall-through */ | 338 | fallthrough; |
| 339 | case MMC_RSP_R1: | 339 | case MMC_RSP_R1: |
| 340 | rc |= TIFM_MMCSD_RSP_R1; | 340 | rc |= TIFM_MMCSD_RSP_R1; |
| 341 | break; | 341 | break; |
| @@ -1343,7 +1343,7 @@ static int usdhi6_stop_cmd(struct usdhi6_host *host) · 1342 unmodified lines | |||
| 1343 | host->wait = USDHI6_WAIT_FOR_STOP; | 1343 | host->wait = USDHI6_WAIT_FOR_STOP; |
| 1344 | return 0; | 1344 | return 0; |
| 1345 | } | 1345 | } |
| 1346 | /* fall through - Unsupported STOP command. */ | 1346 | fallthrough; /* Unsupported STOP command */ |
| 1347 | default: | 1347 | default: |
| 1348 | dev_err(mmc_dev(host->mmc), | 1348 | dev_err(mmc_dev(host->mmc), |
| 1349 | "unsupported stop CMD%d for CMD%d\n", | 1349 | "unsupported stop CMD%d for CMD%d\n", |
| @@ -1691,7 +1691,7 @@ static void usdhi6_timeout_work(struct work_struct *work) · 341 unmodified lines | |||
| 1691 | switch (host->wait) { | 1691 | switch (host->wait) { |
| 1692 | default: | 1692 | default: |
| 1693 | dev_err(mmc_dev(host->mmc), "Invalid state %u\n", host->wait); | 1693 | dev_err(mmc_dev(host->mmc), "Invalid state %u\n", host->wait); |
| 1694 | /* fall through - mrq can be NULL, but is impossible. */ | 1694 | fallthrough; /* mrq can be NULL, but is impossible */ |
| 1695 | case USDHI6_WAIT_FOR_CMD: | 1695 | case USDHI6_WAIT_FOR_CMD: |
| 1696 | usdhi6_error_code(host); | 1696 | usdhi6_error_code(host); |
| 1697 | if (mrq) | 1697 | if (mrq) |
| @@ -1713,7 +1713,7 @@ static void usdhi6_timeout_work(struct work_struct *work) · 15 unmodified lines | |||
| 1713 | host->offset, data->blocks, data->blksz, data->sg_len, | 1713 | host->offset, data->blocks, data->blksz, data->sg_len, |
| 1714 | sg_dma_len(sg), sg->offset); | 1714 | sg_dma_len(sg), sg->offset); |
| 1715 | usdhi6_sg_unmap(host, true); | 1715 | usdhi6_sg_unmap(host, true); |
| 1716 | /* fall through - page unmapped in USDHI6_WAIT_FOR_DATA_END. */ | 1716 | fallthrough; /* page unmapped in USDHI6_WAIT_FOR_DATA_END */ |
| 1717 | case USDHI6_WAIT_FOR_DATA_END: | 1717 | case USDHI6_WAIT_FOR_DATA_END: |
| 1718 | usdhi6_error_code(host); | 1718 | usdhi6_error_code(host); |
| 1719 | data->error = -ETIMEDOUT; | 1719 | data->error = -ETIMEDOUT; |
| @@ -93,7 +93,7 @@ static int adgs1408_probe(struct spi_device *spi) · 92 unmodified lines | |||
| 93 | mux->idle_state = idle_state; | 93 | mux->idle_state = idle_state; |
| 94 | break; | 94 | break; |
| 95 | } | 95 | } |
| 96 | /* fall through */ | 96 | fallthrough; |
| 97 | default: | 97 | default: |
| 98 | dev_err(dev, "invalid idle-state %d\n", idle_state); | 98 | dev_err(dev, "invalid idle-state %d\n", idle_state); |
| 99 | return -EINVAL; | 99 | return -EINVAL; |
| @@ -301,7 +301,7 @@ static int __init cops_probe1(struct net_device *dev, int ioaddr) · 300 unmodified lines | |||
| 301 | dev->irq = cops_irq(ioaddr, board); | 301 | dev->irq = cops_irq(ioaddr, board); |
| 302 | if (dev->irq) | 302 | if (dev->irq) |
| 303 | break; | 303 | break; |
| 304 | /* fall through - Once no IRQ found on this port. */ | 304 | fallthrough; /* Once no IRQ found on this port */ |
| 305 | case 1: | 305 | case 1: |
| 306 | retval = -EINVAL; | 306 | retval = -EINVAL; |
| 307 | goto err_out; | 307 | goto err_out; |
| @@ -363,13 +363,13 @@ static int __init arcrimi_setup(char *s) · 362 unmodified lines | |||
| 363 | switch (ints[0]) { | 363 | switch (ints[0]) { |
| 364 | default: /* ERROR */ | 364 | default: /* ERROR */ |
| 365 | pr_err("Too many arguments\n"); | 365 | pr_err("Too many arguments\n"); |
| 366 | /* Fall through */ | 366 | fallthrough; |
| 367 | case 3: /* Node ID */ | 367 | case 3: /* Node ID */ |
| 368 | node = ints[3]; | 368 | node = ints[3]; |
| 369 | /* Fall through */ | 369 | fallthrough; |
| 370 | case 2: /* IRQ */ | 370 | case 2: /* IRQ */ |
| 371 | irq = ints[2]; | 371 | irq = ints[2]; |
| 372 | /* Fall through */ | 372 | fallthrough; |
| 373 | case 1: /* IO address */ | 373 | case 1: /* IO address */ |
| 374 | io = ints[1]; | 374 | io = ints[1]; |
| 375 | } | 375 | } |
| @@ -197,22 +197,22 @@ static int __init com20020isa_setup(char *s) · 196 unmodified lines | |||
| 197 | switch (ints[0]) { | 197 | switch (ints[0]) { |
| 198 | default: /* ERROR */ | 198 | default: /* ERROR */ |
| 199 | pr_info("Too many arguments\n"); | 199 | pr_info("Too many arguments\n"); |
| 200 | /* Fall through */ | 200 | fallthrough; |
| 201 | case 6: /* Timeout */ | 201 | case 6: /* Timeout */ |
| 202 | timeout = ints[6]; | 202 | timeout = ints[6]; |
| 203 | /* Fall through */ | 203 | fallthrough; |
| 204 | case 5: /* CKP value */ | 204 | case 5: /* CKP value */ |
| 205 | clockp = ints[5]; | 205 | clockp = ints[5]; |
| 206 | /* Fall through */ | 206 | fallthrough; |
| 207 | case 4: /* Backplane flag */ | 207 | case 4: /* Backplane flag */ |
| 208 | backplane = ints[4]; | 208 | backplane = ints[4]; |
| 209 | /* Fall through */ | 209 | fallthrough; |
| 210 | case 3: /* Node ID */ | 210 | case 3: /* Node ID */ |
| 211 | node = ints[3]; | 211 | node = ints[3]; |
| 212 | /* Fall through */ | 212 | fallthrough; |
| 213 | case 2: /* IRQ */ | 213 | case 2: /* IRQ */ |
| 214 | irq = ints[2]; | 214 | irq = ints[2]; |
| 215 | /* Fall through */ | 215 | fallthrough; |
| 216 | case 1: /* IO address */ | 216 | case 1: /* IO address */ |
| 217 | io = ints[1]; | 217 | io = ints[1]; |
| 218 | } | 218 | } |
| @@ -363,10 +363,10 @@ static int __init com90io_setup(char *s) · 362 unmodified lines | |||
| 363 | switch (ints[0]) { | 363 | switch (ints[0]) { |
| 364 | default: /* ERROR */ | 364 | default: /* ERROR */ |
| 365 | pr_err("Too many arguments\n"); | 365 | pr_err("Too many arguments\n"); |
| 366 | /* Fall through */ | 366 | fallthrough; |
| 367 | case 2: /* IRQ */ | 367 | case 2: /* IRQ */ |
| 368 | irq = ints[2]; | 368 | irq = ints[2]; |
| 369 | /* Fall through */ | 369 | fallthrough; |
| 370 | case 1: /* IO address */ | 370 | case 1: /* IO address */ |
| 371 | io = ints[1]; | 371 | io = ints[1]; |
| 372 | } | 372 | } |
| @@ -693,13 +693,13 @@ static int __init com90xx_setup(char *s) · 692 unmodified lines | |||
| 693 | switch (ints[0]) { | 693 | switch (ints[0]) { |
| 694 | default: /* ERROR */ | 694 | default: /* ERROR */ |
| 695 | pr_err("Too many arguments\n"); | 695 | pr_err("Too many arguments\n"); |
| 696 | /* Fall through */ | 696 | fallthrough; |
| 697 | case 3: /* Mem address */ | 697 | case 3: /* Mem address */ |
| 698 | shmem = ints[3]; | 698 | shmem = ints[3]; |
| 699 | /* Fall through */ | 699 | fallthrough; |
| 700 | case 2: /* IRQ */ | 700 | case 2: /* IRQ */ |
| 701 | irq = ints[2]; | 701 | irq = ints[2]; |
| 702 | /* Fall through */ | 702 | fallthrough; |
| 703 | case 1: /* IO address */ | 703 | case 1: /* IO address */ |
| 704 | io = ints[1]; | 704 | io = ints[1]; |
| 705 | } | 705 | } |
| @@ -130,7 +130,7 @@ static inline struct bonding *__get_bond_by_port(struct port *port) · 129 unmodified lines | |||
| 130 | 130 | ||
| 131 | /** | 131 | /** |
| 132 | * __get_first_agg - get the first aggregator in the bond | 132 | * __get_first_agg - get the first aggregator in the bond |
| 133 | * @bond: the bond we're looking at | 133 | * @port: the port we're looking at |
| 134 | * | 134 | * |
| 135 | * Return the aggregator of the first slave in @bond, or %NULL if it can't be | 135 | * Return the aggregator of the first slave in @bond, or %NULL if it can't be |
| 136 | * found. | 136 | * found. |
| @@ -1149,7 +1149,7 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) · 1012 unmodified lines | |||
| 1149 | port->actor_oper_port_state &= ~LACP_STATE_EXPIRED; | 1149 | port->actor_oper_port_state &= ~LACP_STATE_EXPIRED; |
| 1150 | port->sm_rx_state = AD_RX_PORT_DISABLED; | 1150 | port->sm_rx_state = AD_RX_PORT_DISABLED; |
| 1151 | 1151 | ||
| 1152 | /* Fall Through */ | 1152 | fallthrough; |
| 1153 | case AD_RX_PORT_DISABLED: | 1153 | case AD_RX_PORT_DISABLED: |
| 1154 | port->sm_vars &= ~AD_PORT_MATCHED; | 1154 | port->sm_vars &= ~AD_PORT_MATCHED; |
| 1155 | break; | 1155 | break; |
| @@ -1588,7 +1588,7 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best, · 432 unmodified lines | |||
| 1588 | if (__agg_active_ports(curr) < __agg_active_ports(best)) | 1588 | if (__agg_active_ports(curr) < __agg_active_ports(best)) |
| 1589 | return best; | 1589 | return best; |
| 1590 | 1590 | ||
| 1591 | /*FALLTHROUGH*/ | 1591 | fallthrough; |
| 1592 | case BOND_AD_STABLE: | 1592 | case BOND_AD_STABLE: |
| 1593 | case BOND_AD_BANDWIDTH: | 1593 | case BOND_AD_BANDWIDTH: |
| 1594 | if (__get_agg_bandwidth(curr) > __get_agg_bandwidth(best)) | 1594 | if (__get_agg_bandwidth(curr) > __get_agg_bandwidth(best)) |
| @@ -1626,7 +1626,7 @@ static int agg_device_up(const struct aggregator *agg) · 31 unmodified lines | |||
| 1626 | 1626 | ||
| 1627 | /** | 1627 | /** |
| 1628 | * ad_agg_selection_logic - select an aggregation group for a team | 1628 | * ad_agg_selection_logic - select an aggregation group for a team |
| 1629 | * @aggregator: the aggregator we're looking at | 1629 | * @agg: the aggregator we're looking at |
| 1630 | * @update_slave_arr: Does slave array need update? | 1630 | * @update_slave_arr: Does slave array need update? |
| 1631 | * | 1631 | * |
| 1632 | * It is assumed that only one aggregator may be selected for a team. | 1632 | * It is assumed that only one aggregator may be selected for a team. |
| @@ -1810,7 +1810,7 @@ static void ad_initialize_agg(struct aggregator *aggregator) · 177 unmodified lines | |||
| 1810 | 1810 | ||
| 1811 | /** | 1811 | /** |
| 1812 | * ad_initialize_port - initialize a given port's parameters | 1812 | * ad_initialize_port - initialize a given port's parameters |
| 1813 | * @aggregator: the aggregator we're looking at | 1813 | * @port: the port we're looking at |
| 1814 | * @lacp_fast: boolean. whether fast periodic should be used | 1814 | * @lacp_fast: boolean. whether fast periodic should be used |
| 1815 | */ | 1815 | */ |
| 1816 | static void ad_initialize_port(struct port *port, int lacp_fast) | 1816 | static void ad_initialize_port(struct port *port, int lacp_fast) |
| @@ -1967,6 +1967,7 @@ static void ad_marker_response_received(struct bond_marker *marker, · 150 unmodified lines | |||
| 1967 | /** | 1967 | /** |
| 1968 | * bond_3ad_initiate_agg_selection - initate aggregator selection | 1968 | * bond_3ad_initiate_agg_selection - initate aggregator selection |
| 1969 | * @bond: bonding struct | 1969 | * @bond: bonding struct |
| 1970 | * @timeout: timeout value to set | ||
| 1970 | * | 1971 | * |
| 1971 | * Set the aggregation selection timer, to initiate an agg selection in | 1972 | * Set the aggregation selection timer, to initiate an agg selection in |
| 1972 | * the very near future. Called during first initialization, and during | 1973 | * the very near future. Called during first initialization, and during |
| @@ -2259,7 +2260,7 @@ void bond_3ad_update_ad_actor_settings(struct bonding *bond) · 286 unmodified lines | |||
| 2259 | 2260 | ||
| 2260 | /** | 2261 | /** |
| 2261 | * bond_3ad_state_machine_handler - handle state machines timeout | 2262 | * bond_3ad_state_machine_handler - handle state machines timeout |
| 2262 | * @bond: bonding struct to work on | 2263 | * @work: work context to fetch bonding struct to work on from |
| 2263 | * | 2264 | * |
| 2264 | * The state machine handling concept in this module is to check every tick | 2265 | * The state machine handling concept in this module is to check every tick |
| 2265 | * which state machine should operate any function. The execution order is | 2266 | * which state machine should operate any function. The execution order is |
| @@ -2500,7 +2501,7 @@ void bond_3ad_adapter_speed_duplex_changed(struct slave *slave) · 234 unmodified lines | |||
| 2500 | /** | 2501 | /** |
| 2501 | * bond_3ad_handle_link_change - handle a slave's link status change indication | 2502 | * bond_3ad_handle_link_change - handle a slave's link status change indication |
| 2502 | * @slave: slave struct to work on | 2503 | * @slave: slave struct to work on |
| 2503 | * @status: whether the link is now up or down | 2504 | * @link: whether the link is now up or down |
| 2504 | * | 2505 | * |
| 2505 | * Handle reselection of aggregator (if needed) for this port. | 2506 | * Handle reselection of aggregator (if needed) for this port. |
| 2506 | */ | 2507 | */ |
| @@ -2551,7 +2552,7 @@ void bond_3ad_handle_link_change(struct slave *slave, char link) · 44 unmodified lines | |||
| 2551 | 2552 | ||
| 2552 | /** | 2553 | /** |
| 2553 | * bond_3ad_set_carrier - set link state for bonding master | 2554 | * bond_3ad_set_carrier - set link state for bonding master |
| 2554 | * @bond - bonding structure | 2555 | * @bond: bonding structure |
| 2555 | * | 2556 | * |
| 2556 | * if we have an active aggregator, we're up, if not, we're down. | 2557 | * if we have an active aggregator, we're up, if not, we're down. |
| 2557 | * Presumes that we cannot have an active aggregator if there are | 2558 | * Presumes that we cannot have an active aggregator if there are |
| @@ -2664,7 +2665,7 @@ int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond, · 106 unmodified lines | |||
| 2664 | 2665 | ||
| 2665 | /** | 2666 | /** |
| 2666 | * bond_3ad_update_lacp_rate - change the lacp rate | 2667 | * bond_3ad_update_lacp_rate - change the lacp rate |
| 2667 | * @bond - bonding struct | 2668 | * @bond: bonding struct |
| 2668 | * | 2669 | * |
| 2669 | * When modify lacp_rate parameter via sysfs, | 2670 | * When modify lacp_rate parameter via sysfs, |
| 2670 | * update actor_oper_port_state of each port. | 2671 | * update actor_oper_port_state of each port. |
| @@ -1206,8 +1206,8 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav · 1205 unmodified lines | |||
| 1206 | 1206 | ||
| 1207 | /** | 1207 | /** |
| 1208 | * alb_set_mac_address | 1208 | * alb_set_mac_address |
| 1209 | * @bond: | 1209 | * @bond: bonding we're working on |
| 1210 | * @addr: | 1210 | * @addr: MAC address to set |
| 1211 | * | 1211 | * |
| 1212 | * In TLB mode all slaves are configured to the bond's hw address, but set | 1212 | * In TLB mode all slaves are configured to the bond's hw address, but set |
| 1213 | * their dev_addr field to different addresses (based on their permanent hw | 1213 | * their dev_addr field to different addresses (based on their permanent hw |
| @@ -322,6 +322,7 @@ netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, · 321 unmodified lines | |||
| 322 | /** | 322 | /** |
| 323 | * bond_vlan_rx_add_vid - Propagates adding an id to slaves | 323 | * bond_vlan_rx_add_vid - Propagates adding an id to slaves |
| 324 | * @bond_dev: bonding net device that got called | 324 | * @bond_dev: bonding net device that got called |
| 325 | * @proto: network protocol ID | ||
| 325 | * @vid: vlan id being added | 326 | * @vid: vlan id being added |
| 326 | */ | 327 | */ |
| 327 | static int bond_vlan_rx_add_vid(struct net_device *bond_dev, | 328 | static int bond_vlan_rx_add_vid(struct net_device *bond_dev, |
| @@ -355,6 +356,7 @@ unwind: · 27 unmodified lines | |||
| 355 | /** | 356 | /** |
| 356 | * bond_vlan_rx_kill_vid - Propagates deleting an id to slaves | 357 | * bond_vlan_rx_kill_vid - Propagates deleting an id to slaves |
| 357 | * @bond_dev: bonding net device that got called | 358 | * @bond_dev: bonding net device that got called |
| 359 | * @proto: network protocol ID | ||
| 358 | * @vid: vlan id being removed | 360 | * @vid: vlan id being removed |
| 359 | */ | 361 | */ |
| 360 | static int bond_vlan_rx_kill_vid(struct net_device *bond_dev, | 362 | static int bond_vlan_rx_kill_vid(struct net_device *bond_dev, |
| @@ -948,7 +950,7 @@ static bool bond_should_notify_peers(struct bonding *bond) · 587 unmodified lines | |||
| 948 | /** | 950 | /** |
| 949 | * change_active_interface - change the active slave into the specified one | 951 | * change_active_interface - change the active slave into the specified one |
| 950 | * @bond: our bonding struct | 952 | * @bond: our bonding struct |
| 951 | * @new: the new slave to make the active one | 953 | * @new_active: the new slave to make the active one |
| 952 | * | 954 | * |
| 953 | * Set the new slave to the bond's settings and unset them on the old | 955 | * Set the new slave to the bond's settings and unset them on the old |
| 954 | * curr_active_slave. | 956 | * curr_active_slave. |
| @@ -2205,7 +2207,8 @@ static int bond_release_and_destroy(struct net_device *bond_dev, · 1250 unmodified lines | |||
| 2205 | int ret; | 2207 | int ret; |
| 2206 | 2208 | ||
| 2207 | ret = __bond_release_one(bond_dev, slave_dev, false, true); | 2209 | ret = __bond_release_one(bond_dev, slave_dev, false, true); |
| 2208 | if (ret == 0 && !bond_has_slaves(bond)) { | 2210 | if (ret == 0 && !bond_has_slaves(bond) && |
| 2211 | bond_dev->reg_state != NETREG_UNREGISTERING) { | ||
| 2209 | bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; | 2212 | bond_dev->priv_flags |= IFF_DISABLE_NETPOLL; |
| 2210 | netdev_info(bond_dev, "Destroying bond\n"); | 2213 | netdev_info(bond_dev, "Destroying bond\n"); |
| 2211 | bond_remove_proc_entry(bond); | 2214 | bond_remove_proc_entry(bond); |
| @@ -2271,7 +2274,7 @@ static int bond_miimon_inspect(struct bonding *bond) · 59 unmodified lines | |||
| 2271 | "active " : "backup ") : "", | 2274 | "active " : "backup ") : "", |
| 2272 | bond->params.downdelay * bond->params.miimon); | 2275 | bond->params.downdelay * bond->params.miimon); |
| 2273 | } | 2276 | } |
| 2274 | /*FALLTHRU*/ | 2277 | fallthrough; |
| 2275 | case BOND_LINK_FAIL: | 2278 | case BOND_LINK_FAIL: |
| 2276 | if (link_state) { | 2279 | if (link_state) { |
| 2277 | /* recovered before downdelay expired */ | 2280 | /* recovered before downdelay expired */ |
| @@ -2307,7 +2310,7 @@ static int bond_miimon_inspect(struct bonding *bond) · 29 unmodified lines | |||
| 2307 | bond->params.updelay * | 2310 | bond->params.updelay * |
| 2308 | bond->params.miimon); | 2311 | bond->params.miimon); |
| 2309 | } | 2312 | } |
| 2310 | /*FALLTHRU*/ | 2313 | fallthrough; |
| 2311 | case BOND_LINK_BACK: | 2314 | case BOND_LINK_BACK: |
| 2312 | if (!link_state) { | 2315 | if (!link_state) { |
| 2313 | bond_propose_link_state(slave, BOND_LINK_DOWN); | 2316 | bond_propose_link_state(slave, BOND_LINK_DOWN); |
| @@ -2945,6 +2948,9 @@ static int bond_ab_arp_inspect(struct bonding *bond) · 631 unmodified lines | |||
| 2945 | if (bond_time_in_interval(bond, last_rx, 1)) { | 2948 | if (bond_time_in_interval(bond, last_rx, 1)) { |
| 2946 | bond_propose_link_state(slave, BOND_LINK_UP); | 2949 | bond_propose_link_state(slave, BOND_LINK_UP); |
| 2947 | commit++; | 2950 | commit++; |
| 2951 | } else if (slave->link == BOND_LINK_BACK) { | ||
| 2952 | bond_propose_link_state(slave, BOND_LINK_FAIL); | ||
| 2953 | commit++; | ||
| 2948 | } | 2954 | } |
| 2949 | continue; | 2955 | continue; |
| 2950 | } | 2956 | } |
| @@ -3053,6 +3059,19 @@ static void bond_ab_arp_commit(struct bonding *bond) · 102 unmodified lines | |||
| 3053 | 3059 | ||
| 3054 | continue; | 3060 | continue; |
| 3055 | 3061 | ||
| 3062 | case BOND_LINK_FAIL: | ||
| 3063 | bond_set_slave_link_state(slave, BOND_LINK_FAIL, | ||
| 3064 | BOND_SLAVE_NOTIFY_NOW); | ||
| 3065 | bond_set_slave_inactive_flags(slave, | ||
| 3066 | BOND_SLAVE_NOTIFY_NOW); | ||
| 3067 | |||
| 3068 | /* A slave has just been enslaved and has become | ||
| 3069 | * the current active slave. | ||
| 3070 | */ | ||
| 3071 | if (rtnl_dereference(bond->curr_active_slave)) | ||
| 3072 | RCU_INIT_POINTER(bond->current_arp_slave, NULL); | ||
| 3073 | continue; | ||
| 3074 | |||
| 3056 | default: | 3075 | default: |
| 3057 | slave_err(bond->dev, slave->dev, | 3076 | slave_err(bond->dev, slave->dev, |
| 3058 | "impossible: link_new_state %d on slave\n", | 3077 | "impossible: link_new_state %d on slave\n", |
| @@ -3103,8 +3122,6 @@ static bool bond_ab_arp_probe(struct bonding *bond) · 44 unmodified lines | |||
| 3103 | return should_notify_rtnl; | 3122 | return should_notify_rtnl; |
| 3104 | } | 3123 | } |
| 3105 | 3124 | ||
| 3106 | bond_set_slave_inactive_flags(curr_arp_slave, BOND_SLAVE_NOTIFY_LATER); | ||
| 3107 | |||
| 3108 | bond_for_each_slave_rcu(bond, slave, iter) { | 3125 | bond_for_each_slave_rcu(bond, slave, iter) { |
| 3109 | if (!found && !before && bond_slave_is_up(slave)) | 3126 | if (!found && !before && bond_slave_is_up(slave)) |
| 3110 | before = slave; | 3127 | before = slave; |
| @@ -3305,7 +3322,7 @@ static int bond_slave_netdev_event(unsigned long event, · 194 unmodified lines | |||
| 3305 | 3322 | ||
| 3306 | if (BOND_MODE(bond) == BOND_MODE_8023AD) | 3323 | if (BOND_MODE(bond) == BOND_MODE_8023AD) |
| 3307 | bond_3ad_adapter_speed_duplex_changed(slave); | 3324 | bond_3ad_adapter_speed_duplex_changed(slave); |
| 3308 | /* Fallthrough */ | 3325 | fallthrough; |
| 3309 | case NETDEV_DOWN: | 3326 | case NETDEV_DOWN: |
| 3310 | /* Refresh slave-array if applicable! | 3327 | /* Refresh slave-array if applicable! |
| 3311 | * If the setup does not use miimon or arpmon (mode-specific!), | 3328 | * If the setup does not use miimon or arpmon (mode-specific!), |
| @@ -3743,7 +3760,7 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd · 431 unmodified lines | |||
| 3743 | return -EINVAL; | 3760 | return -EINVAL; |
| 3744 | 3761 | ||
| 3745 | mii->phy_id = 0; | 3762 | mii->phy_id = 0; |
| 3746 | /* Fall Through */ | 3763 | fallthrough; |
| 3747 | case SIOCGMIIREG: | 3764 | case SIOCGMIIREG: |
| 3748 | /* We do this again just in case we were called by SIOCGMIIREG | 3765 | /* We do this again just in case we were called by SIOCGMIIREG |
| 3749 | * instead of SIOCGMIIPHY. | 3766 | * instead of SIOCGMIIPHY. |
| @@ -4552,13 +4569,23 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev) · 802 unmodified lines | |||
| 4552 | return ret; | 4569 | return ret; |
| 4553 | } | 4570 | } |
| 4554 | 4571 | ||
| 4572 | static u32 bond_mode_bcast_speed(struct slave *slave, u32 speed) | ||
| 4573 | { | ||
| 4574 | if (speed == 0 || speed == SPEED_UNKNOWN) | ||
| 4575 | speed = slave->speed; | ||
| 4576 | else | ||
| 4577 | speed = min(speed, slave->speed); | ||
| 4578 | |||
| 4579 | return speed; | ||
| 4580 | } | ||
| 4581 | |||
| 4555 | static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev, | 4582 | static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev, |
| 4556 | struct ethtool_link_ksettings *cmd) | 4583 | struct ethtool_link_ksettings *cmd) |
| 4557 | { | 4584 | { |
| 4558 | struct bonding *bond = netdev_priv(bond_dev); | 4585 | struct bonding *bond = netdev_priv(bond_dev); |
| 4559 | unsigned long speed = 0; | ||
| 4560 | struct list_head *iter; | 4586 | struct list_head *iter; |
| 4561 | struct slave *slave; | 4587 | struct slave *slave; |
| 4588 | u32 speed = 0; | ||
| 4562 | 4589 | ||
| 4563 | cmd->base.duplex = DUPLEX_UNKNOWN; | 4590 | cmd->base.duplex = DUPLEX_UNKNOWN; |
| 4564 | cmd->base.port = PORT_OTHER; | 4591 | cmd->base.port = PORT_OTHER; |
| @@ -4570,8 +4597,13 @@ static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev, · 5 unmodified lines | |||
| 4570 | */ | 4597 | */ |
| 4571 | bond_for_each_slave(bond, slave, iter) { | 4598 | bond_for_each_slave(bond, slave, iter) { |
| 4572 | if (bond_slave_can_tx(slave)) { | 4599 | if (bond_slave_can_tx(slave)) { |
| 4573 | if (slave->speed != SPEED_UNKNOWN) | 4600 | if (slave->speed != SPEED_UNKNOWN) { |
| 4574 | speed += slave->speed; | 4601 | if (BOND_MODE(bond) == BOND_MODE_BROADCAST) |
| 4602 | speed = bond_mode_bcast_speed(slave, | ||
| 4603 | speed); | ||
| 4604 | else | ||
| 4605 | speed += slave->speed; | ||
| 4606 | } | ||
| 4575 | if (cmd->base.duplex == DUPLEX_UNKNOWN && | 4607 | if (cmd->base.duplex == DUPLEX_UNKNOWN && |
| 4576 | slave->duplex != DUPLEX_UNKNOWN) | 4608 | slave->duplex != DUPLEX_UNKNOWN) |
| 4577 | cmd->base.duplex = slave->duplex; | 4609 | cmd->base.duplex = slave->duplex; |
| @@ -898,7 +898,7 @@ static void at91_irq_err_state(struct net_device *dev, · 897 unmodified lines | |||
| 898 | CAN_ERR_CRTL_TX_WARNING : | 898 | CAN_ERR_CRTL_TX_WARNING : |
| 899 | CAN_ERR_CRTL_RX_WARNING; | 899 | CAN_ERR_CRTL_RX_WARNING; |
| 900 | } | 900 | } |
| 901 | /* fall through */ | 901 | fallthrough; |
| 902 | case CAN_STATE_ERROR_WARNING: | 902 | case CAN_STATE_ERROR_WARNING: |
| 903 | /* | 903 | /* |
| 904 | * from: ERROR_ACTIVE, ERROR_WARNING | 904 | * from: ERROR_ACTIVE, ERROR_WARNING |
| @@ -948,7 +948,7 @@ static void at91_irq_err_state(struct net_device *dev, · 43 unmodified lines | |||
| 948 | netdev_dbg(dev, "Error Active\n"); | 948 | netdev_dbg(dev, "Error Active\n"); |
| 949 | cf->can_id |= CAN_ERR_PROT; | 949 | cf->can_id |= CAN_ERR_PROT; |
| 950 | cf->data[2] = CAN_ERR_PROT_ACTIVE; | 950 | cf->data[2] = CAN_ERR_PROT_ACTIVE; |
| 951 | /* fall through */ | 951 | fallthrough; |
| 952 | case CAN_STATE_ERROR_WARNING: | 952 | case CAN_STATE_ERROR_WARNING: |
| 953 | reg_idr = AT91_IRQ_ERRA | AT91_IRQ_WARN | AT91_IRQ_BOFF; | 953 | reg_idr = AT91_IRQ_ERRA | AT91_IRQ_WARN | AT91_IRQ_BOFF; |
| 954 | reg_ier = AT91_IRQ_ERRP; | 954 | reg_ier = AT91_IRQ_ERRP; |
| @@ -659,7 +659,7 @@ static int pciefd_can_probe(struct pciefd_board *pciefd) · 658 unmodified lines | |||
| 659 | pciefd_can_writereg(priv, CANFD_CLK_SEL_80MHZ, | 659 | pciefd_can_writereg(priv, CANFD_CLK_SEL_80MHZ, |
| 660 | PCIEFD_REG_CAN_CLK_SEL); | 660 | PCIEFD_REG_CAN_CLK_SEL); |
| 661 | 661 | ||
| 662 | /* fall through */ | 662 | fallthrough; |
| 663 | case CANFD_CLK_SEL_80MHZ: | 663 | case CANFD_CLK_SEL_80MHZ: |
| 664 | priv->ucan.can.clock.freq = 80 * 1000 * 1000; | 664 | priv->ucan.can.clock.freq = 80 * 1000 * 1000; |
| 665 | break; | 665 | break; |
| @@ -150,7 +150,7 @@ static void sp_populate_of(struct sja1000_priv *priv, struct device_node *of) · 149 unmodified lines | |||
| 150 | priv->read_reg = sp_read_reg16; | 150 | priv->read_reg = sp_read_reg16; |
| 151 | priv->write_reg = sp_write_reg16; | 151 | priv->write_reg = sp_write_reg16; |
| 152 | break; | 152 | break; |
| 153 | case 1: /* fallthrough */ | 153 | case 1: |
| 154 | default: | 154 | default: |
| 155 | priv->read_reg = sp_read_reg8; | 155 | priv->read_reg = sp_read_reg8; |
| 156 | priv->write_reg = sp_write_reg8; | 156 | priv->write_reg = sp_write_reg8; |
| @@ -153,7 +153,7 @@ static void slc_bump(struct slcan *sl) · 152 unmodified lines | |||
| 153 | switch (*cmd) { | 153 | switch (*cmd) { |
| 154 | case 'r': | 154 | case 'r': |
| 155 | cf.can_id = CAN_RTR_FLAG; | 155 | cf.can_id = CAN_RTR_FLAG; |
| 156 | /* fallthrough */ | 156 | fallthrough; |
| 157 | case 't': | 157 | case 't': |
| 158 | /* store dlc ASCII value and terminate SFF CAN ID string */ | 158 | /* store dlc ASCII value and terminate SFF CAN ID string */ |
| 159 | cf.can_dlc = sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; | 159 | cf.can_dlc = sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; |
| @@ -163,7 +163,7 @@ static void slc_bump(struct slcan *sl) · 3 unmodified lines | |||
| 163 | break; | 163 | break; |
| 164 | case 'R': | 164 | case 'R': |
| 165 | cf.can_id = CAN_RTR_FLAG; | 165 | cf.can_id = CAN_RTR_FLAG; |
| 166 | /* fallthrough */ | 166 | fallthrough; |
| 167 | case 'T': | 167 | case 'T': |
| 168 | cf.can_id |= CAN_EFF_FLAG; | 168 | cf.can_id |= CAN_EFF_FLAG; |
| 169 | /* store dlc ASCII value and terminate EFF CAN ID string */ | 169 | /* store dlc ASCII value and terminate EFF CAN ID string */ |
| @@ -864,7 +864,7 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id) · 863 unmodified lines | |||
| 864 | if (new_state >= CAN_STATE_ERROR_WARNING && | 864 | if (new_state >= CAN_STATE_ERROR_WARNING && |
| 865 | new_state <= CAN_STATE_BUS_OFF) | 865 | new_state <= CAN_STATE_BUS_OFF) |
| 866 | priv->can.can_stats.error_warning++; | 866 | priv->can.can_stats.error_warning++; |
| 867 | /* fall through */ | 867 | fallthrough; |
| 868 | case CAN_STATE_ERROR_WARNING: | 868 | case CAN_STATE_ERROR_WARNING: |
| 869 | if (new_state >= CAN_STATE_ERROR_PASSIVE && | 869 | if (new_state >= CAN_STATE_ERROR_PASSIVE && |
| 870 | new_state <= CAN_STATE_BUS_OFF) | 870 | new_state <= CAN_STATE_BUS_OFF) |
| @@ -415,7 +415,7 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n, · 414 unmodified lines | |||
| 415 | new_state = CAN_STATE_ERROR_WARNING; | 415 | new_state = CAN_STATE_ERROR_WARNING; |
| 416 | break; | 416 | break; |
| 417 | } | 417 | } |
| 418 | /* fall through */ | 418 | fallthrough; |
| 419 | 419 | ||
| 420 | case CAN_STATE_ERROR_WARNING: | 420 | case CAN_STATE_ERROR_WARNING: |
| 421 | if (n & PCAN_USB_ERROR_BUS_HEAVY) { | 421 | if (n & PCAN_USB_ERROR_BUS_HEAVY) { |
| @@ -345,7 +345,7 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb, · 344 unmodified lines | |||
| 345 | default: | 345 | default: |
| 346 | netdev_warn(netdev, "tx urb submitting failed err=%d\n", | 346 | netdev_warn(netdev, "tx urb submitting failed err=%d\n", |
| 347 | err); | 347 | err); |
| 348 | /* fall through */ | 348 | fallthrough; |
| 349 | case -ENOENT: | 349 | case -ENOENT: |
| 350 | /* cable unplugged */ | 350 | /* cable unplugged */ |
| 351 | stats->tx_dropped++; | 351 | stats->tx_dropped++; |
| @@ -133,10 +133,10 @@ static int pcan_msg_add_rec(struct pcan_usb_pro_msg *pm, int id, ...) · 132 unmodified lines | |||
| 133 | switch (id) { | 133 | switch (id) { |
| 134 | case PCAN_USBPRO_TXMSG8: | 134 | case PCAN_USBPRO_TXMSG8: |
| 135 | i += 4; | 135 | i += 4; |
| 136 | /* fall through */ | 136 | fallthrough; |
| 137 | case PCAN_USBPRO_TXMSG4: | 137 | case PCAN_USBPRO_TXMSG4: |
| 138 | i += 4; | 138 | i += 4; |
| 139 | /* fall through */ | 139 | fallthrough; |
| 140 | case PCAN_USBPRO_TXMSG0: | 140 | case PCAN_USBPRO_TXMSG0: |
| 141 | *pc++ = va_arg(ap, int); | 141 | *pc++ = va_arg(ap, int); |
| 142 | *pc++ = va_arg(ap, int); | 142 | *pc++ = va_arg(ap, int); |
| @@ -1061,7 +1061,7 @@ static void b53_force_port_config(struct b53_device *dev, int port, · 1060 unmodified lines | |||
| 1061 | switch (speed) { | 1061 | switch (speed) { |
| 1062 | case 2000: | 1062 | case 2000: |
| 1063 | reg |= PORT_OVERRIDE_SPEED_2000M; | 1063 | reg |= PORT_OVERRIDE_SPEED_2000M; |
| 1064 | /* fallthrough */ | 1064 | fallthrough; |
| 1065 | case SPEED_1000: | 1065 | case SPEED_1000: |
| 1066 | reg |= PORT_OVERRIDE_SPEED_1000M; | 1066 | reg |= PORT_OVERRIDE_SPEED_1000M; |
| 1067 | break; | 1067 | break; |
| @@ -1554,6 +1554,8 @@ static int b53_arl_op(struct b53_device *dev, int op, int port, · 486 unmodified lines | |||
| 1554 | return ret; | 1554 | return ret; |
| 1555 | 1555 | ||
| 1556 | switch (ret) { | 1556 | switch (ret) { |
| 1557 | case -ETIMEDOUT: | ||
| 1558 | return ret; | ||
| 1557 | case -ENOSPC: | 1559 | case -ENOSPC: |
| 1558 | dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n", | 1560 | dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n", |
| 1559 | addr, vid); | 1561 | addr, vid); |
| @@ -170,7 +170,7 @@ void b53_serdes_phylink_validate(struct b53_device *dev, int port, · 169 unmodified lines | |||
| 170 | switch (lane) { | 170 | switch (lane) { |
| 171 | case 0: | 171 | case 0: |
| 172 | phylink_set(supported, 2500baseX_Full); | 172 | phylink_set(supported, 2500baseX_Full); |
| 173 | /* fallthrough */ | 173 | fallthrough; |
| 174 | case 1: | 174 | case 1: |
| 175 | phylink_set(supported, 1000baseX_Full); | 175 | phylink_set(supported, 1000baseX_Full); |
| 176 | break; | 176 | break; |
| @@ -566,7 +566,7 @@ static void bcm_sf2_sw_mac_config(struct dsa_switch *ds, int port, · 565 unmodified lines | |||
| 566 | switch (state->interface) { | 566 | switch (state->interface) { |
| 567 | case PHY_INTERFACE_MODE_RGMII: | 567 | case PHY_INTERFACE_MODE_RGMII: |
| 568 | id_mode_dis = 1; | 568 | id_mode_dis = 1; |
| 569 | /* fallthrough */ | 569 | fallthrough; |
| 570 | case PHY_INTERFACE_MODE_RGMII_TXID: | 570 | case PHY_INTERFACE_MODE_RGMII_TXID: |
| 571 | port_mode = EXT_GPHY; | 571 | port_mode = EXT_GPHY; |
| 572 | break; | 572 | break; |
| @@ -1083,7 +1083,7 @@ static phy_interface_t ksz9477_get_interface(struct ksz_device *dev, int port) · 1082 unmodified lines | |||
| 1083 | interface = PHY_INTERFACE_MODE_GMII; | 1083 | interface = PHY_INTERFACE_MODE_GMII; |
| 1084 | if (gbit) | 1084 | if (gbit) |
| 1085 | break; | 1085 | break; |
| 1086 | /* fall through */ | 1086 | fallthrough; |
| 1087 | case 0: | 1087 | case 0: |
| 1088 | interface = PHY_INTERFACE_MODE_MII; | 1088 | interface = PHY_INTERFACE_MODE_MII; |
| 1089 | break; | 1089 | break; |
| @@ -566,7 +566,7 @@ static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface) · 565 unmodified lines | |||
| 566 | case P5_INTF_SEL_PHY_P0: | 566 | case P5_INTF_SEL_PHY_P0: |
| 567 | /* MT7530_P5_MODE_GPHY_P0: 2nd GMAC -> P5 -> P0 */ | 567 | /* MT7530_P5_MODE_GPHY_P0: 2nd GMAC -> P5 -> P0 */ |
| 568 | val |= MHWTRAP_PHY0_SEL; | 568 | val |= MHWTRAP_PHY0_SEL; |
| 569 | /* fall through */ | 569 | fallthrough; |
| 570 | case P5_INTF_SEL_PHY_P4: | 570 | case P5_INTF_SEL_PHY_P4: |
| 571 | /* MT7530_P5_MODE_GPHY_P4: 2nd GMAC -> P5 -> P4 */ | 571 | /* MT7530_P5_MODE_GPHY_P4: 2nd GMAC -> P5 -> P4 */ |
| 572 | val &= ~MHWTRAP_P5_MAC_SEL & ~MHWTRAP_P5_DIS; | 572 | val &= ~MHWTRAP_P5_MAC_SEL & ~MHWTRAP_P5_DIS; |
| @@ -875,7 +875,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip, · 874 unmodified lines | |||
| 875 | break; | 875 | break; |
| 876 | case STATS_TYPE_BANK1: | 876 | case STATS_TYPE_BANK1: |
| 877 | reg = bank1_select; | 877 | reg = bank1_select; |
| 878 | /* fall through */ | 878 | fallthrough; |
| 879 | case STATS_TYPE_BANK0: | 879 | case STATS_TYPE_BANK0: |
| 880 | reg |= s->reg | histogram; | 880 | reg |= s->reg | histogram; |
| 881 | mv88e6xxx_g1_stats_read(chip, reg, &low); | 881 | mv88e6xxx_g1_stats_read(chip, reg, &low); |
| @@ -9,7 +9,7 @@ config NET_DSA_MSCC_FELIX · 8 unmodified lines | |||
| 9 | select NET_DSA_TAG_OCELOT | 9 | select NET_DSA_TAG_OCELOT |
| 10 | select FSL_ENETC_MDIO | 10 | select FSL_ENETC_MDIO |
| 11 | help | 11 | help |
| 12 | This driver supports network switches from the the Vitesse / | 12 | This driver supports network switches from the Vitesse / |
| 13 | Microsemi / Microchip Ocelot family of switching cores that are | 13 | Microsemi / Microchip Ocelot family of switching cores that are |
| 14 | connected to their host CPU via Ethernet. | 14 | connected to their host CPU via Ethernet. |
| 15 | The following switches are supported: | 15 | The following switches are supported: |
| @@ -1259,14 +1259,14 @@ el3_up(struct net_device *dev) · 1258 unmodified lines | |||
| 1259 | pr_cont("Forcing 3c5x9b full-duplex mode"); | 1259 | pr_cont("Forcing 3c5x9b full-duplex mode"); |
| 1260 | break; | 1260 | break; |
| 1261 | } | 1261 | } |
| 1262 | /* fall through */ | 1262 | fallthrough; |
| 1263 | case 8: | 1263 | case 8: |
| 1264 | /* set full-duplex mode based on eeprom config setting */ | 1264 | /* set full-duplex mode based on eeprom config setting */ |
| 1265 | if ((sw_info & 0x000f) && (sw_info & 0x8000)) { | 1265 | if ((sw_info & 0x000f) && (sw_info & 0x8000)) { |
| 1266 | pr_cont("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)"); | 1266 | pr_cont("Setting 3c5x9b full-duplex mode (from EEPROM configuration bit)"); |
| 1267 | break; | 1267 | break; |
| 1268 | } | 1268 | } |
| 1269 | /* fall through */ | 1269 | fallthrough; |
| 1270 | default: | 1270 | default: |
| 1271 | /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */ | 1271 | /* xcvr=(0 || 4) OR user has an old 3c5x9 non "B" model */ |
| 1272 | pr_cont("Setting 3c5x9/3c5x9B half-duplex mode"); | 1272 | pr_cont("Setting 3c5x9/3c5x9B half-duplex mode"); |
| @@ -951,7 +951,7 @@ static struct net_device_stats *el3_get_stats(struct net_device *dev) · 950 unmodified lines | |||
| 951 | static void update_stats(struct net_device *dev) | 951 | static void update_stats(struct net_device *dev) |
| 952 | { | 952 | { |
| 953 | unsigned int ioaddr = dev->base_addr; | 953 | unsigned int ioaddr = dev->base_addr; |
| 954 | u8 rx, tx, up; | 954 | u8 up; |
| 955 | 955 | ||
| 956 | pr_debug("%s: updating the statistics.\n", dev->name); | 956 | pr_debug("%s: updating the statistics.\n", dev->name); |
| 957 | 957 | ||
| @@ -972,8 +972,8 @@ static void update_stats(struct net_device *dev) · 14 unmodified lines | |||
| 972 | dev->stats.tx_packets += (up&0x30) << 4; | 972 | dev->stats.tx_packets += (up&0x30) << 4; |
| 973 | /* Rx packets */ inb(ioaddr + 7); | 973 | /* Rx packets */ inb(ioaddr + 7); |
| 974 | /* Tx deferrals */ inb(ioaddr + 8); | 974 | /* Tx deferrals */ inb(ioaddr + 8); |
| 975 | rx = inw(ioaddr + 10); | 975 | /* rx */ inw(ioaddr + 10); |
| 976 | tx = inw(ioaddr + 12); | 976 | /* tx */ inw(ioaddr + 12); |
| 977 | 977 | ||
| 978 | EL3WINDOW(4); | 978 | EL3WINDOW(4); |
| 979 | /* BadSSD */ inb(ioaddr + 12); | 979 | /* BadSSD */ inb(ioaddr + 12); |
| @@ -1046,7 +1046,7 @@ static int el3_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 66 unmodified lines | |||
| 1046 | switch(cmd) { | 1046 | switch(cmd) { |
| 1047 | case SIOCGMIIPHY: /* Get the address of the PHY in use. */ | 1047 | case SIOCGMIIPHY: /* Get the address of the PHY in use. */ |
| 1048 | data->phy_id = phy; | 1048 | data->phy_id = phy; |
| 1049 | /* fall through */ | 1049 | fallthrough; |
| 1050 | case SIOCGMIIREG: /* Read the specified MII register. */ | 1050 | case SIOCGMIIREG: /* Read the specified MII register. */ |
| 1051 | { | 1051 | { |
| 1052 | int saved_window; | 1052 | int saved_window; |
| @@ -610,7 +610,7 @@ static int axnet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 609 unmodified lines | |||
| 610 | switch (cmd) { | 610 | switch (cmd) { |
| 611 | case SIOCGMIIPHY: | 611 | case SIOCGMIIPHY: |
| 612 | data->phy_id = info->phy_id; | 612 | data->phy_id = info->phy_id; |
| 613 | /* Fall through */ | 613 | fallthrough; |
| 614 | case SIOCGMIIREG: /* Read MII PHY register. */ | 614 | case SIOCGMIIREG: /* Read MII PHY register. */ |
| 615 | data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f); | 615 | data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f); |
| 616 | return 0; | 616 | return 0; |
| @@ -898,6 +898,7 @@ static int ax_close(struct net_device *dev) · 281 unmodified lines | |||
| 898 | /** | 898 | /** |
| 899 | * axnet_tx_timeout - handle transmit time out condition | 899 | * axnet_tx_timeout - handle transmit time out condition |
| 900 | * @dev: network device which has apparently fallen asleep | 900 | * @dev: network device which has apparently fallen asleep |
| 901 | * @txqueue: unused | ||
| 901 | * | 902 | * |
| 902 | * Called by kernel when device never acknowledges a transmit has | 903 | * Called by kernel when device never acknowledges a transmit has |
| 903 | * completed (or failed) - i.e. never posted a Tx related interrupt. | 904 | * completed (or failed) - i.e. never posted a Tx related interrupt. |
| @@ -1108,7 +1108,7 @@ static int ei_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 1107 unmodified lines | |||
| 1108 | switch (cmd) { | 1108 | switch (cmd) { |
| 1109 | case SIOCGMIIPHY: | 1109 | case SIOCGMIIPHY: |
| 1110 | data->phy_id = info->phy_id; | 1110 | data->phy_id = info->phy_id; |
| 1111 | /* fall through */ | 1111 | fallthrough; |
| 1112 | case SIOCGMIIREG: /* Read MII PHY register. */ | 1112 | case SIOCGMIIREG: /* Read MII PHY register. */ |
| 1113 | data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f); | 1113 | data->val_out = mdio_read(mii_addr, data->phy_id, data->reg_num & 0x1f); |
| 1114 | return 0; | 1114 | return 0; |
| @@ -1712,13 +1712,13 @@ static bool slic_is_fiber(unsigned short subdev) · 1711 unmodified lines | |||
| 1712 | { | 1712 | { |
| 1713 | switch (subdev) { | 1713 | switch (subdev) { |
| 1714 | /* Mojave */ | 1714 | /* Mojave */ |
| 1715 | case PCI_SUBDEVICE_ID_ALACRITECH_1000X1F: /* fallthrough */ | 1715 | case PCI_SUBDEVICE_ID_ALACRITECH_1000X1F: |
| 1716 | case PCI_SUBDEVICE_ID_ALACRITECH_SES1001F: /* fallthrough */ | 1716 | case PCI_SUBDEVICE_ID_ALACRITECH_SES1001F: fallthrough; |
| 1717 | /* Oasis */ | 1717 | /* Oasis */ |
| 1718 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2002XF: /* fallthrough */ | 1718 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2002XF: |
| 1719 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2001XF: /* fallthrough */ | 1719 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2001XF: |
| 1720 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2104EF: /* fallthrough */ | 1720 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2104EF: |
| 1721 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2102EF: /* fallthrough */ | 1721 | case PCI_SUBDEVICE_ID_ALACRITECH_SEN2102EF: |
| 1722 | return true; | 1722 | return true; |
| 1723 | } | 1723 | } |
| 1724 | return false; | 1724 | return false; |
| @@ -547,7 +547,7 @@ static int acenic_probe_one(struct pci_dev *pdev, · 546 unmodified lines | |||
| 547 | ap->name); | 547 | ap->name); |
| 548 | break; | 548 | break; |
| 549 | } | 549 | } |
| 550 | /* Fall through */ | 550 | fallthrough; |
| 551 | case PCI_VENDOR_ID_SGI: | 551 | case PCI_VENDOR_ID_SGI: |
| 552 | printk(KERN_INFO "%s: SGI AceNIC ", ap->name); | 552 | printk(KERN_INFO "%s: SGI AceNIC ", ap->name); |
| 553 | break; | 553 | break; |
| @@ -2180,13 +2180,10 @@ static void ena_del_napi_in_range(struct ena_adapter *adapter, · 2179 unmodified lines | |||
| 2180 | int i; | 2180 | int i; |
| 2181 | 2181 | ||
| 2182 | for (i = first_index; i < first_index + count; i++) { | 2182 | for (i = first_index; i < first_index + count; i++) { |
| 2183 | /* Check if napi was initialized before */ | 2183 | netif_napi_del(&adapter->ena_napi[i].napi); |
| 2184 | if (!ENA_IS_XDP_INDEX(adapter, i) || | 2184 | |
| 2185 | adapter->ena_napi[i].xdp_ring) | 2185 | WARN_ON(!ENA_IS_XDP_INDEX(adapter, i) && |
| 2186 | netif_napi_del(&adapter->ena_napi[i].napi); | 2186 | adapter->ena_napi[i].xdp_ring); |
| 2187 | else | ||
| 2188 | WARN_ON(ENA_IS_XDP_INDEX(adapter, i) && | ||
| 2189 | adapter->ena_napi[i].xdp_ring); | ||
| 2190 | } | 2187 | } |
| 2191 | } | 2188 | } |
| 2192 | 2189 | ||
| @@ -3601,16 +3598,14 @@ static void ena_fw_reset_device(struct work_struct *work) · 1408 unmodified lines | |||
| 3601 | { | 3598 | { |
| 3602 | struct ena_adapter *adapter = | 3599 | struct ena_adapter *adapter = |
| 3603 | container_of(work, struct ena_adapter, reset_task); | 3600 | container_of(work, struct ena_adapter, reset_task); |
| 3604 | struct pci_dev *pdev = adapter->pdev; | ||
| 3605 | 3601 | ||
| 3606 | if (unlikely(!test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))) { | ||
| 3607 | dev_err(&pdev->dev, | ||
| 3608 | "device reset schedule while reset bit is off\n"); | ||
| 3609 | return; | ||
| 3610 | } | ||
| 3611 | rtnl_lock(); | 3602 | rtnl_lock(); |
| 3612 | ena_destroy_device(adapter, false); | 3603 | |
| 3613 | ena_restore_device(adapter); | 3604 | if (likely(test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))) { |
| 3605 | ena_destroy_device(adapter, false); | ||
| 3606 | ena_restore_device(adapter); | ||
| 3607 | } | ||
| 3608 | |||
| 3614 | rtnl_unlock(); | 3609 | rtnl_unlock(); |
| 3615 | } | 3610 | } |
| 3616 | 3611 | ||
| @@ -3692,7 +3687,7 @@ static int check_missing_comp_in_tx_queue(struct ena_adapter *adapter, · 75 unmodified lines | |||
| 3692 | } | 3687 | } |
| 3693 | 3688 | ||
| 3694 | u64_stats_update_begin(&tx_ring->syncp); | 3689 | u64_stats_update_begin(&tx_ring->syncp); |
| 3695 | tx_ring->tx_stats.missed_tx = missed_tx; | 3690 | tx_ring->tx_stats.missed_tx += missed_tx; |
| 3696 | u64_stats_update_end(&tx_ring->syncp); | 3691 | u64_stats_update_end(&tx_ring->syncp); |
| 3697 | 3692 | ||
| 3698 | return rc; | 3693 | return rc; |
| @@ -4389,8 +4384,11 @@ static void __ena_shutoff(struct pci_dev *pdev, bool shutdown) · 690 unmodified lines | |||
| 4389 | netdev->rx_cpu_rmap = NULL; | 4384 | netdev->rx_cpu_rmap = NULL; |
| 4390 | } | 4385 | } |
| 4391 | #endif /* CONFIG_RFS_ACCEL */ | 4386 | #endif /* CONFIG_RFS_ACCEL */ |
| 4392 | del_timer_sync(&adapter->timer_service); | ||
| 4393 | 4387 | ||
| 4388 | /* Make sure timer and reset routine won't be called after | ||
| 4389 | * freeing device resources. | ||
| 4390 | */ | ||
| 4391 | del_timer_sync(&adapter->timer_service); | ||
| 4394 | cancel_work_sync(&adapter->reset_task); | 4392 | cancel_work_sync(&adapter->reset_task); |
| 4395 | 4393 | ||
| 4396 | rtnl_lock(); /* lock released inside the below if-else block */ | 4394 | rtnl_lock(); /* lock released inside the below if-else block */ |
| @@ -4558,6 +4556,9 @@ static void ena_keep_alive_wd(void *adapter_data, · 161 unmodified lines | |||
| 4558 | tx_drops = ((u64)desc->tx_drops_high << 32) | desc->tx_drops_low; | 4556 | tx_drops = ((u64)desc->tx_drops_high << 32) | desc->tx_drops_low; |
| 4559 | 4557 | ||
| 4560 | u64_stats_update_begin(&adapter->syncp); | 4558 | u64_stats_update_begin(&adapter->syncp); |
| 4559 | /* These stats are accumulated by the device, so the counters indicate | ||
| 4560 | * all drops since last reset. | ||
| 4561 | */ | ||
| 4561 | adapter->dev_stats.rx_drops = rx_drops; | 4562 | adapter->dev_stats.rx_drops = rx_drops; |
| 4562 | adapter->dev_stats.tx_drops = tx_drops; | 4563 | adapter->dev_stats.tx_drops = tx_drops; |
| 4563 | u64_stats_update_end(&adapter->syncp); | 4564 | u64_stats_update_end(&adapter->syncp); |
| @@ -1475,7 +1475,7 @@ static int amd8111e_ioctl(struct net_device *dev , struct ifreq *ifr, int cmd) · 1474 unmodified lines | |||
| 1475 | case SIOCGMIIPHY: | 1475 | case SIOCGMIIPHY: |
| 1476 | data->phy_id = lp->ext_phy_addr; | 1476 | data->phy_id = lp->ext_phy_addr; |
| 1477 | 1477 | ||
| 1478 | /* fallthru */ | 1478 | fallthrough; |
| 1479 | case SIOCGMIIREG: | 1479 | case SIOCGMIIREG: |
| 1480 | 1480 | ||
| 1481 | spin_lock_irq(&lp->lock); | 1481 | spin_lock_irq(&lp->lock); |
| @@ -1538,7 +1538,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata, · 1537 unmodified lines | |||
| 1538 | /* PTP v2, UDP, any kind of event packet */ | 1538 | /* PTP v2, UDP, any kind of event packet */ |
| 1539 | case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: | 1539 | case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: |
| 1540 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); | 1540 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); |
| 1541 | /* Fall through - to PTP v1, UDP, any kind of event packet */ | 1541 | fallthrough; /* to PTP v1, UDP, any kind of event packet */ |
| 1542 | case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: | 1542 | case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: |
| 1543 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); | 1543 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); |
| 1544 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); | 1544 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); |
| @@ -1549,7 +1549,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata, · 4 unmodified lines | |||
| 1549 | /* PTP v2, UDP, Sync packet */ | 1549 | /* PTP v2, UDP, Sync packet */ |
| 1550 | case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: | 1550 | case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: |
| 1551 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); | 1551 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); |
| 1552 | /* Fall through - to PTP v1, UDP, Sync packet */ | 1552 | fallthrough; /* to PTP v1, UDP, Sync packet */ |
| 1553 | case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: | 1553 | case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: |
| 1554 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); | 1554 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); |
| 1555 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); | 1555 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); |
| @@ -1560,7 +1560,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata, · 4 unmodified lines | |||
| 1560 | /* PTP v2, UDP, Delay_req packet */ | 1560 | /* PTP v2, UDP, Delay_req packet */ |
| 1561 | case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: | 1561 | case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: |
| 1562 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); | 1562 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSVER2ENA, 1); |
| 1563 | /* Fall through - to PTP v1, UDP, Delay_req packet */ | 1563 | fallthrough; /* to PTP v1, UDP, Delay_req packet */ |
| 1564 | case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: | 1564 | case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: |
| 1565 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); | 1565 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV4ENA, 1); |
| 1566 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); | 1566 | XGMAC_SET_BITS(mac_tscr, MAC_TSCR, TSIPV6ENA, 1); |
| @@ -1631,8 +1631,8 @@ static int hw_atl_b0_get_mac_temp(struct aq_hw_s *self, u32 *temp) · 1630 unmodified lines | |||
| 1631 | hw_atl_ts_reset_set(self, 0); | 1631 | hw_atl_ts_reset_set(self, 0); |
| 1632 | } | 1632 | } |
| 1633 | 1633 | ||
| 1634 | err = readx_poll_timeout_atomic(hw_atl_b0_ts_ready_and_latch_high_get, | 1634 | err = readx_poll_timeout(hw_atl_b0_ts_ready_and_latch_high_get, self, |
| 1635 | self, val, val == 1, 10000U, 500000U); | 1635 | val, val == 1, 10000U, 500000U); |
| 1636 | if (err) | 1636 | if (err) |
| 1637 | return err; | 1637 | return err; |
| 1638 | 1638 | ||
| @@ -217,7 +217,7 @@ static int bgmac_probe(struct bcma_device *core) · 216 unmodified lines | |||
| 217 | /* BCM 471X/535X family */ | 217 | /* BCM 471X/535X family */ |
| 218 | case BCMA_CHIP_ID_BCM4716: | 218 | case BCMA_CHIP_ID_BCM4716: |
| 219 | bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; | 219 | bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST; |
| 220 | /* fallthrough */ | 220 | fallthrough; |
| 221 | case BCMA_CHIP_ID_BCM47162: | 221 | case BCMA_CHIP_ID_BCM47162: |
| 222 | bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL2; | 222 | bgmac->feature_flags |= BGMAC_FEAT_FLW_CTRL2; |
| 223 | bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK; | 223 | bgmac->feature_flags |= BGMAC_FEAT_SET_RXQ_CLK; |
| @@ -131,7 +131,7 @@ static void bgmac_nicpm_speed_set(struct net_device *net_dev) · 130 unmodified lines | |||
| 131 | switch (bgmac->net_dev->phydev->speed) { | 131 | switch (bgmac->net_dev->phydev->speed) { |
| 132 | default: | 132 | default: |
| 133 | netdev_err(net_dev, "Unsupported speed. Defaulting to 1000Mb\n"); | 133 | netdev_err(net_dev, "Unsupported speed. Defaulting to 1000Mb\n"); |
| 134 | /* fall through */ | 134 | fallthrough; |
| 135 | case SPEED_1000: | 135 | case SPEED_1000: |
| 136 | val |= NICPM_IOMUX_CTRL_SPD_1000M << NICPM_IOMUX_CTRL_SPD_SHIFT; | 136 | val |= NICPM_IOMUX_CTRL_SPD_1000M << NICPM_IOMUX_CTRL_SPD_SHIFT; |
| 137 | break; | 137 | break; |
| @@ -1337,13 +1337,13 @@ bnx2_set_mac_link(struct bnx2 *bp) · 1336 unmodified lines | |||
| 1337 | val |= BNX2_EMAC_MODE_PORT_MII_10M; | 1337 | val |= BNX2_EMAC_MODE_PORT_MII_10M; |
| 1338 | break; | 1338 | break; |
| 1339 | } | 1339 | } |
| 1340 | /* fall through */ | 1340 | fallthrough; |
| 1341 | case SPEED_100: | 1341 | case SPEED_100: |
| 1342 | val |= BNX2_EMAC_MODE_PORT_MII; | 1342 | val |= BNX2_EMAC_MODE_PORT_MII; |
| 1343 | break; | 1343 | break; |
| 1344 | case SPEED_2500: | 1344 | case SPEED_2500: |
| 1345 | val |= BNX2_EMAC_MODE_25G_MODE; | 1345 | val |= BNX2_EMAC_MODE_25G_MODE; |
| 1346 | /* fall through */ | 1346 | fallthrough; |
| 1347 | case SPEED_1000: | 1347 | case SPEED_1000: |
| 1348 | val |= BNX2_EMAC_MODE_PORT_GMII; | 1348 | val |= BNX2_EMAC_MODE_PORT_GMII; |
| 1349 | break; | 1349 | break; |
| @@ -1995,26 +1995,26 @@ bnx2_remote_phy_event(struct bnx2 *bp) · 645 unmodified lines | |||
| 1995 | switch (speed) { | 1995 | switch (speed) { |
| 1996 | case BNX2_LINK_STATUS_10HALF: | 1996 | case BNX2_LINK_STATUS_10HALF: |
| 1997 | bp->duplex = DUPLEX_HALF; | 1997 | bp->duplex = DUPLEX_HALF; |
| 1998 | /* fall through */ | 1998 | fallthrough; |
| 1999 | case BNX2_LINK_STATUS_10FULL: | 1999 | case BNX2_LINK_STATUS_10FULL: |
| 2000 | bp->line_speed = SPEED_10; | 2000 | bp->line_speed = SPEED_10; |
| 2001 | break; | 2001 | break; |
| 2002 | case BNX2_LINK_STATUS_100HALF: | 2002 | case BNX2_LINK_STATUS_100HALF: |
| 2003 | bp->duplex = DUPLEX_HALF; | 2003 | bp->duplex = DUPLEX_HALF; |
| 2004 | /* fall through */ | 2004 | fallthrough; |
| 2005 | case BNX2_LINK_STATUS_100BASE_T4: | 2005 | case BNX2_LINK_STATUS_100BASE_T4: |
| 2006 | case BNX2_LINK_STATUS_100FULL: | 2006 | case BNX2_LINK_STATUS_100FULL: |
| 2007 | bp->line_speed = SPEED_100; | 2007 | bp->line_speed = SPEED_100; |
| 2008 | break; | 2008 | break; |
| 2009 | case BNX2_LINK_STATUS_1000HALF: | 2009 | case BNX2_LINK_STATUS_1000HALF: |
| 2010 | bp->duplex = DUPLEX_HALF; | 2010 | bp->duplex = DUPLEX_HALF; |
| 2011 | /* fall through */ | 2011 | fallthrough; |
| 2012 | case BNX2_LINK_STATUS_1000FULL: | 2012 | case BNX2_LINK_STATUS_1000FULL: |
| 2013 | bp->line_speed = SPEED_1000; | 2013 | bp->line_speed = SPEED_1000; |
| 2014 | break; | 2014 | break; |
| 2015 | case BNX2_LINK_STATUS_2500HALF: | 2015 | case BNX2_LINK_STATUS_2500HALF: |
| 2016 | bp->duplex = DUPLEX_HALF; | 2016 | bp->duplex = DUPLEX_HALF; |
| 2017 | /* fall through */ | 2017 | fallthrough; |
| 2018 | case BNX2_LINK_STATUS_2500FULL: | 2018 | case BNX2_LINK_STATUS_2500FULL: |
| 2019 | bp->line_speed = SPEED_2500; | 2019 | bp->line_speed = SPEED_2500; |
| 2020 | break; | 2020 | break; |
| @@ -7856,7 +7856,7 @@ bnx2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 5835 unmodified lines | |||
| 7856 | case SIOCGMIIPHY: | 7856 | case SIOCGMIIPHY: |
| 7857 | data->phy_id = bp->phy_addr; | 7857 | data->phy_id = bp->phy_addr; |
| 7858 | 7858 | ||
| 7859 | /* fallthru */ | 7859 | fallthrough; |
| 7860 | case SIOCGMIIREG: { | 7860 | case SIOCGMIIREG: { |
| 7861 | u32 mii_regval; | 7861 | u32 mii_regval; |
| 7862 | 7862 | ||
| @@ -4712,14 +4712,14 @@ static void bnx2x_sync_link(struct link_params *params, · 4711 unmodified lines | |||
| 4712 | LINK_STATUS_SPEED_AND_DUPLEX_MASK) { | 4712 | LINK_STATUS_SPEED_AND_DUPLEX_MASK) { |
| 4713 | case LINK_10THD: | 4713 | case LINK_10THD: |
| 4714 | vars->duplex = DUPLEX_HALF; | 4714 | vars->duplex = DUPLEX_HALF; |
| 4715 | /* Fall thru */ | 4715 | fallthrough; |
| 4716 | case LINK_10TFD: | 4716 | case LINK_10TFD: |
| 4717 | vars->line_speed = SPEED_10; | 4717 | vars->line_speed = SPEED_10; |
| 4718 | break; | 4718 | break; |
| 4719 | 4719 | ||
| 4720 | case LINK_100TXHD: | 4720 | case LINK_100TXHD: |
| 4721 | vars->duplex = DUPLEX_HALF; | 4721 | vars->duplex = DUPLEX_HALF; |
| 4722 | /* Fall thru */ | 4722 | fallthrough; |
| 4723 | case LINK_100T4: | 4723 | case LINK_100T4: |
| 4724 | case LINK_100TXFD: | 4724 | case LINK_100TXFD: |
| 4725 | vars->line_speed = SPEED_100; | 4725 | vars->line_speed = SPEED_100; |
| @@ -4727,14 +4727,14 @@ static void bnx2x_sync_link(struct link_params *params, · 1 unmodified line | |||
| 4727 | 4727 | ||
| 4728 | case LINK_1000THD: | 4728 | case LINK_1000THD: |
| 4729 | vars->duplex = DUPLEX_HALF; | 4729 | vars->duplex = DUPLEX_HALF; |
| 4730 | /* Fall thru */ | 4730 | fallthrough; |
| 4731 | case LINK_1000TFD: | 4731 | case LINK_1000TFD: |
| 4732 | vars->line_speed = SPEED_1000; | 4732 | vars->line_speed = SPEED_1000; |
| 4733 | break; | 4733 | break; |
| 4734 | 4734 | ||
| 4735 | case LINK_2500THD: | 4735 | case LINK_2500THD: |
| 4736 | vars->duplex = DUPLEX_HALF; | 4736 | vars->duplex = DUPLEX_HALF; |
| 4737 | /* Fall thru */ | 4737 | fallthrough; |
| 4738 | case LINK_2500TFD: | 4738 | case LINK_2500TFD: |
| 4739 | vars->line_speed = SPEED_2500; | 4739 | vars->line_speed = SPEED_2500; |
| 4740 | break; | 4740 | break; |
| @@ -6339,7 +6339,7 @@ int bnx2x_set_led(struct link_params *params, · 1598 unmodified lines | |||
| 6339 | */ | 6339 | */ |
| 6340 | if (!vars->link_up) | 6340 | if (!vars->link_up) |
| 6341 | break; | 6341 | break; |
| 6342 | /* fall through */ | 6342 | fallthrough; |
| 6343 | case LED_MODE_ON: | 6343 | case LED_MODE_ON: |
| 6344 | if (((params->phy[EXT_PHY1].type == | 6344 | if (((params->phy[EXT_PHY1].type == |
| 6345 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727) || | 6345 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727) || |
| @@ -12508,13 +12508,13 @@ static void bnx2x_phy_def_cfg(struct link_params *params, · 6162 unmodified lines | |||
| 12508 | switch (link_config & PORT_FEATURE_LINK_SPEED_MASK) { | 12508 | switch (link_config & PORT_FEATURE_LINK_SPEED_MASK) { |
| 12509 | case PORT_FEATURE_LINK_SPEED_10M_HALF: | 12509 | case PORT_FEATURE_LINK_SPEED_10M_HALF: |
| 12510 | phy->req_duplex = DUPLEX_HALF; | 12510 | phy->req_duplex = DUPLEX_HALF; |
| 12511 | /* fall through */ | 12511 | fallthrough; |
| 12512 | case PORT_FEATURE_LINK_SPEED_10M_FULL: | 12512 | case PORT_FEATURE_LINK_SPEED_10M_FULL: |
| 12513 | phy->req_line_speed = SPEED_10; | 12513 | phy->req_line_speed = SPEED_10; |
| 12514 | break; | 12514 | break; |
| 12515 | case PORT_FEATURE_LINK_SPEED_100M_HALF: | 12515 | case PORT_FEATURE_LINK_SPEED_100M_HALF: |
| 12516 | phy->req_duplex = DUPLEX_HALF; | 12516 | phy->req_duplex = DUPLEX_HALF; |
| 12517 | /* fall through */ | 12517 | fallthrough; |
| 12518 | case PORT_FEATURE_LINK_SPEED_100M_FULL: | 12518 | case PORT_FEATURE_LINK_SPEED_100M_FULL: |
| 12519 | phy->req_line_speed = SPEED_100; | 12519 | phy->req_line_speed = SPEED_100; |
| 12520 | break; | 12520 | break; |
| @@ -8600,11 +8600,11 @@ int bnx2x_set_int_mode(struct bnx2x *bp) · 8599 unmodified lines | |||
| 8600 | bp->num_queues, | 8600 | bp->num_queues, |
| 8601 | 1 + bp->num_cnic_queues); | 8601 | 1 + bp->num_cnic_queues); |
| 8602 | 8602 | ||
| 8603 | /* fall through */ | 8603 | fallthrough; |
| 8604 | case BNX2X_INT_MODE_MSI: | 8604 | case BNX2X_INT_MODE_MSI: |
| 8605 | bnx2x_enable_msi(bp); | 8605 | bnx2x_enable_msi(bp); |
| 8606 | 8606 | ||
| 8607 | /* fall through */ | 8607 | fallthrough; |
| 8608 | case BNX2X_INT_MODE_INTX: | 8608 | case BNX2X_INT_MODE_INTX: |
| 8609 | bp->num_ethernet_queues = 1; | 8609 | bp->num_ethernet_queues = 1; |
| 8610 | bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; | 8610 | bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues; |
| @@ -3258,7 +3258,7 @@ static int bnx2x_mcast_validate_e2(struct bnx2x *bp, · 3257 unmodified lines | |||
| 3258 | /* DEL command deletes all currently configured MACs */ | 3258 | /* DEL command deletes all currently configured MACs */ |
| 3259 | case BNX2X_MCAST_CMD_DEL: | 3259 | case BNX2X_MCAST_CMD_DEL: |
| 3260 | o->set_registry_size(o, 0); | 3260 | o->set_registry_size(o, 0); |
| 3261 | /* fall through */ | 3261 | fallthrough; |
| 3262 | 3262 | ||
| 3263 | /* RESTORE command will restore the entire multicast configuration */ | 3263 | /* RESTORE command will restore the entire multicast configuration */ |
| 3264 | case BNX2X_MCAST_CMD_RESTORE: | 3264 | case BNX2X_MCAST_CMD_RESTORE: |
| @@ -3592,7 +3592,7 @@ static int bnx2x_mcast_validate_e1(struct bnx2x *bp, · 327 unmodified lines | |||
| 3592 | /* DEL command deletes all currently configured MACs */ | 3592 | /* DEL command deletes all currently configured MACs */ |
| 3593 | case BNX2X_MCAST_CMD_DEL: | 3593 | case BNX2X_MCAST_CMD_DEL: |
| 3594 | o->set_registry_size(o, 0); | 3594 | o->set_registry_size(o, 0); |
| 3595 | /* fall through */ | 3595 | fallthrough; |
| 3596 | 3596 | ||
| 3597 | /* RESTORE command will restore the entire multicast configuration */ | 3597 | /* RESTORE command will restore the entire multicast configuration */ |
| 3598 | case BNX2X_MCAST_CMD_RESTORE: | 3598 | case BNX2X_MCAST_CMD_RESTORE: |
| @@ -1809,7 +1809,7 @@ get_vf: · 1808 unmodified lines | |||
| 1809 | DP(BNX2X_MSG_IOV, "got VF [%d:%d] RSS update ramrod\n", | 1809 | DP(BNX2X_MSG_IOV, "got VF [%d:%d] RSS update ramrod\n", |
| 1810 | vf->abs_vfid, qidx); | 1810 | vf->abs_vfid, qidx); |
| 1811 | bnx2x_vf_handle_rss_update_eqe(bp, vf); | 1811 | bnx2x_vf_handle_rss_update_eqe(bp, vf); |
| 1812 | /* fall through */ | 1812 | fallthrough; |
| 1813 | case EVENT_RING_OPCODE_VF_FLR: | 1813 | case EVENT_RING_OPCODE_VF_FLR: |
| 1814 | /* Do nothing for now */ | 1814 | /* Do nothing for now */ |
| 1815 | return 0; | 1815 | return 0; |
| @@ -2207,7 +2207,7 @@ int bnx2x_vf_free(struct bnx2x *bp, struct bnx2x_virtf *vf) · 391 unmodified lines | |||
| 2207 | rc = bnx2x_vf_close(bp, vf); | 2207 | rc = bnx2x_vf_close(bp, vf); |
| 2208 | if (rc) | 2208 | if (rc) |
| 2209 | goto op_err; | 2209 | goto op_err; |
| 2210 | /* Fall through - to release resources */ | 2210 | fallthrough; /* to release resources */ |
| 2211 | case VF_ACQUIRED: | 2211 | case VF_ACQUIRED: |
| 2212 | DP(BNX2X_MSG_IOV, "about to free resources\n"); | 2212 | DP(BNX2X_MSG_IOV, "about to free resources\n"); |
| 2213 | bnx2x_vf_free_resc(bp, vf); | 2213 | bnx2x_vf_free_resc(bp, vf); |
| @@ -1923,7 +1923,7 @@ u32 bnxt_fw_health_readl(struct bnxt *bp, int reg_idx) · 1922 unmodified lines | |||
| 1923 | break; | 1923 | break; |
| 1924 | case BNXT_FW_HEALTH_REG_TYPE_GRC: | 1924 | case BNXT_FW_HEALTH_REG_TYPE_GRC: |
| 1925 | reg_off = fw_health->mapped_regs[reg_idx]; | 1925 | reg_off = fw_health->mapped_regs[reg_idx]; |
| 1926 | /* fall through */ | 1926 | fallthrough; |
| 1927 | case BNXT_FW_HEALTH_REG_TYPE_BAR0: | 1927 | case BNXT_FW_HEALTH_REG_TYPE_BAR0: |
| 1928 | val = readl(bp->bar0 + reg_off); | 1928 | val = readl(bp->bar0 + reg_off); |
| 1929 | break; | 1929 | break; |
| @@ -1966,11 +1966,11 @@ static int bnxt_async_event_process(struct bnxt *bp, · 36 unmodified lines | |||
| 1966 | } | 1966 | } |
| 1967 | set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event); | 1967 | set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event); |
| 1968 | } | 1968 | } |
| 1969 | /* fall through */ | 1969 | fallthrough; |
| 1970 | case ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE: | 1970 | case ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE: |
| 1971 | case ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE: | 1971 | case ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE: |
| 1972 | set_bit(BNXT_LINK_CFG_CHANGE_SP_EVENT, &bp->sp_event); | 1972 | set_bit(BNXT_LINK_CFG_CHANGE_SP_EVENT, &bp->sp_event); |
| 1973 | /* fall through */ | 1973 | fallthrough; |
| 1974 | case ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE: | 1974 | case ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE: |
| 1975 | set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event); | 1975 | set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event); |
| 1976 | break; | 1976 | break; |
| @@ -9765,7 +9765,7 @@ static int bnxt_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 7788 unmodified lines | |||
| 9765 | case SIOCGMIIPHY: | 9765 | case SIOCGMIIPHY: |
| 9766 | mdio->phy_id = bp->link_info.phy_addr; | 9766 | mdio->phy_id = bp->link_info.phy_addr; |
| 9767 | 9767 | ||
| 9768 | /* fallthru */ | 9768 | fallthrough; |
| 9769 | case SIOCGMIIREG: { | 9769 | case SIOCGMIIREG: { |
| 9770 | u16 mii_regval = 0; | 9770 | u16 mii_regval = 0; |
| 9771 | 9771 | ||
| @@ -11022,7 +11022,7 @@ static void bnxt_fw_reset_writel(struct bnxt *bp, int reg_idx) · 1250 unmodified lines | |||
| 11022 | writel(reg_off & BNXT_GRC_BASE_MASK, | 11022 | writel(reg_off & BNXT_GRC_BASE_MASK, |
| 11023 | bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 4); | 11023 | bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 4); |
| 11024 | reg_off = (reg_off & BNXT_GRC_OFFSET_MASK) + 0x2000; | 11024 | reg_off = (reg_off & BNXT_GRC_OFFSET_MASK) + 0x2000; |
| 11025 | /* fall through */ | 11025 | fallthrough; |
| 11026 | case BNXT_FW_HEALTH_REG_TYPE_BAR0: | 11026 | case BNXT_FW_HEALTH_REG_TYPE_BAR0: |
| 11027 | writel(val, bp->bar0 + reg_off); | 11027 | writel(val, bp->bar0 + reg_off); |
| 11028 | break; | 11028 | break; |
| @@ -11135,7 +11135,7 @@ static void bnxt_fw_reset_task(struct work_struct *work) · 106 unmodified lines | |||
| 11135 | } | 11135 | } |
| 11136 | bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW; | 11136 | bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW; |
| 11137 | } | 11137 | } |
| 11138 | /* fall through */ | 11138 | fallthrough; |
| 11139 | case BNXT_FW_RESET_STATE_RESET_FW: | 11139 | case BNXT_FW_RESET_STATE_RESET_FW: |
| 11140 | bnxt_reset_all(bp); | 11140 | bnxt_reset_all(bp); |
| 11141 | bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV; | 11141 | bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV; |
| @@ -11158,7 +11158,7 @@ static void bnxt_fw_reset_task(struct work_struct *work) · 16 unmodified lines | |||
| 11158 | } | 11158 | } |
| 11159 | pci_set_master(bp->pdev); | 11159 | pci_set_master(bp->pdev); |
| 11160 | bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW; | 11160 | bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW; |
| 11161 | /* fall through */ | 11161 | fallthrough; |
| 11162 | case BNXT_FW_RESET_STATE_POLL_FW: | 11162 | case BNXT_FW_RESET_STATE_POLL_FW: |
| 11163 | bp->hwrm_cmd_timeout = SHORT_HWRM_CMD_TIMEOUT; | 11163 | bp->hwrm_cmd_timeout = SHORT_HWRM_CMD_TIMEOUT; |
| 11164 | rc = __bnxt_hwrm_ver_get(bp, true); | 11164 | rc = __bnxt_hwrm_ver_get(bp, true); |
| @@ -11173,7 +11173,7 @@ static void bnxt_fw_reset_task(struct work_struct *work) · 8 unmodified lines | |||
| 11173 | } | 11173 | } |
| 11174 | bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT; | 11174 | bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT; |
| 11175 | bp->fw_reset_state = BNXT_FW_RESET_STATE_OPENING; | 11175 | bp->fw_reset_state = BNXT_FW_RESET_STATE_OPENING; |
| 11176 | /* fall through */ | 11176 | fallthrough; |
| 11177 | case BNXT_FW_RESET_STATE_OPENING: | 11177 | case BNXT_FW_RESET_STATE_OPENING: |
| 11178 | while (!rtnl_trylock()) { | 11178 | while (!rtnl_trylock()) { |
| 11179 | bnxt_queue_fw_reset_work(bp, HZ / 10); | 11179 | bnxt_queue_fw_reset_work(bp, HZ / 10); |
| @@ -1073,7 +1073,7 @@ static int bnxt_grxfh(struct bnxt *bp, struct ethtool_rxnfc *cmd) · 1072 unmodified lines | |||
| 1073 | if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4) | 1073 | if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4) |
| 1074 | cmd->data |= RXH_IP_SRC | RXH_IP_DST | | 1074 | cmd->data |= RXH_IP_SRC | RXH_IP_DST | |
| 1075 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | 1075 | RXH_L4_B_0_1 | RXH_L4_B_2_3; |
| 1076 | /* fall through */ | 1076 | fallthrough; |
| 1077 | case SCTP_V4_FLOW: | 1077 | case SCTP_V4_FLOW: |
| 1078 | case AH_ESP_V4_FLOW: | 1078 | case AH_ESP_V4_FLOW: |
| 1079 | case AH_V4_FLOW: | 1079 | case AH_V4_FLOW: |
| @@ -1092,7 +1092,7 @@ static int bnxt_grxfh(struct bnxt *bp, struct ethtool_rxnfc *cmd) · 12 unmodified lines | |||
| 1092 | if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6) | 1092 | if (bp->rss_hash_cfg & VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6) |
| 1093 | cmd->data |= RXH_IP_SRC | RXH_IP_DST | | 1093 | cmd->data |= RXH_IP_SRC | RXH_IP_DST | |
| 1094 | RXH_L4_B_0_1 | RXH_L4_B_2_3; | 1094 | RXH_L4_B_0_1 | RXH_L4_B_2_3; |
| 1095 | /* fall through */ | 1095 | fallthrough; |
| 1096 | case SCTP_V6_FLOW: | 1096 | case SCTP_V6_FLOW: |
| 1097 | case AH_ESP_V6_FLOW: | 1097 | case AH_ESP_V6_FLOW: |
| 1098 | case AH_V6_FLOW: | 1098 | case AH_V6_FLOW: |
| @@ -201,10 +201,10 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons, · 200 unmodified lines | |||
| 201 | break; | 201 | break; |
| 202 | default: | 202 | default: |
| 203 | bpf_warn_invalid_xdp_action(act); | 203 | bpf_warn_invalid_xdp_action(act); |
| 204 | /* Fall thru */ | 204 | fallthrough; |
| 205 | case XDP_ABORTED: | 205 | case XDP_ABORTED: |
| 206 | trace_xdp_exception(bp->dev, xdp_prog, act); | 206 | trace_xdp_exception(bp->dev, xdp_prog, act); |
| 207 | /* Fall thru */ | 207 | fallthrough; |
| 208 | case XDP_DROP: | 208 | case XDP_DROP: |
| 209 | bnxt_reuse_rx_data(rxr, cons, page); | 209 | bnxt_reuse_rx_data(rxr, cons, page); |
| 210 | break; | 210 | break; |
| @@ -3311,7 +3311,7 @@ static int cnic_ctl(void *data, struct cnic_ctl_info *info) · 3310 unmodified lines | |||
| 3311 | } | 3311 | } |
| 3312 | case CNIC_CTL_FCOE_STATS_GET_CMD: | 3312 | case CNIC_CTL_FCOE_STATS_GET_CMD: |
| 3313 | ulp_type = CNIC_ULP_FCOE; | 3313 | ulp_type = CNIC_ULP_FCOE; |
| 3314 | /* fall through */ | 3314 | fallthrough; |
| 3315 | case CNIC_CTL_ISCSI_STATS_GET_CMD: | 3315 | case CNIC_CTL_ISCSI_STATS_GET_CMD: |
| 3316 | cnic_hold(dev); | 3316 | cnic_hold(dev); |
| 3317 | cnic_copy_ulp_stats(dev, ulp_type); | 3317 | cnic_copy_ulp_stats(dev, ulp_type); |
| @@ -4044,7 +4044,7 @@ static void cnic_cm_process_kcqe(struct cnic_dev *dev, struct kcqe *kcqe) · 726 unmodified lines | |||
| 4044 | l4kcqe->status, l5kcqe->completion_status); | 4044 | l4kcqe->status, l5kcqe->completion_status); |
| 4045 | opcode = L4_KCQE_OPCODE_VALUE_CLOSE_COMP; | 4045 | opcode = L4_KCQE_OPCODE_VALUE_CLOSE_COMP; |
| 4046 | } | 4046 | } |
| 4047 | /* Fall through */ | 4047 | fallthrough; |
| 4048 | case L4_KCQE_OPCODE_VALUE_RESET_RECEIVED: | 4048 | case L4_KCQE_OPCODE_VALUE_RESET_RECEIVED: |
| 4049 | case L4_KCQE_OPCODE_VALUE_CLOSE_COMP: | 4049 | case L4_KCQE_OPCODE_VALUE_CLOSE_COMP: |
| 4050 | case L4_KCQE_OPCODE_VALUE_RESET_COMP: | 4050 | case L4_KCQE_OPCODE_VALUE_RESET_COMP: |
| @@ -1185,10 +1185,10 @@ static void bcmgenet_update_mib_counters(struct bcmgenet_priv *priv) · 1184 unmodified lines | |||
| 1185 | continue; | 1185 | continue; |
| 1186 | case BCMGENET_STAT_RUNT: | 1186 | case BCMGENET_STAT_RUNT: |
| 1187 | offset += BCMGENET_STAT_OFFSET; | 1187 | offset += BCMGENET_STAT_OFFSET; |
| 1188 | /* fall through */ | 1188 | fallthrough; |
| 1189 | case BCMGENET_STAT_MIB_TX: | 1189 | case BCMGENET_STAT_MIB_TX: |
| 1190 | offset += BCMGENET_STAT_OFFSET; | 1190 | offset += BCMGENET_STAT_OFFSET; |
| 1191 | /* fall through */ | 1191 | fallthrough; |
| 1192 | case BCMGENET_STAT_MIB_RX: | 1192 | case BCMGENET_STAT_MIB_RX: |
| 1193 | val = bcmgenet_umac_readl(priv, | 1193 | val = bcmgenet_umac_readl(priv, |
| 1194 | UMAC_MIB_START + j + offset); | 1194 | UMAC_MIB_START + j + offset); |
| @@ -192,7 +192,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init) · 191 unmodified lines | |||
| 192 | switch (priv->phy_interface) { | 192 | switch (priv->phy_interface) { |
| 193 | case PHY_INTERFACE_MODE_INTERNAL: | 193 | case PHY_INTERFACE_MODE_INTERNAL: |
| 194 | phy_name = "internal PHY"; | 194 | phy_name = "internal PHY"; |
| 195 | /* fall through */ | 195 | fallthrough; |
| 196 | case PHY_INTERFACE_MODE_MOCA: | 196 | case PHY_INTERFACE_MODE_MOCA: |
| 197 | /* Irrespective of the actually configured PHY speed (100 or | 197 | /* Irrespective of the actually configured PHY speed (100 or |
| 198 | * 1000) GENETv4 only has an internal GPHY so we will just end | 198 | * 1000) GENETv4 only has an internal GPHY so we will just end |
| @@ -715,7 +715,7 @@ static int tg3_ape_lock(struct tg3 *tp, int locknum) · 714 unmodified lines | |||
| 715 | case TG3_APE_LOCK_GPIO: | 715 | case TG3_APE_LOCK_GPIO: |
| 716 | if (tg3_asic_rev(tp) == ASIC_REV_5761) | 716 | if (tg3_asic_rev(tp) == ASIC_REV_5761) |
| 717 | return 0; | 717 | return 0; |
| 718 | /* fall through */ | 718 | fallthrough; |
| 719 | case TG3_APE_LOCK_GRC: | 719 | case TG3_APE_LOCK_GRC: |
| 720 | case TG3_APE_LOCK_MEM: | 720 | case TG3_APE_LOCK_MEM: |
| 721 | if (!tp->pci_fn) | 721 | if (!tp->pci_fn) |
| @@ -776,7 +776,7 @@ static void tg3_ape_unlock(struct tg3 *tp, int locknum) · 54 unmodified lines | |||
| 776 | case TG3_APE_LOCK_GPIO: | 776 | case TG3_APE_LOCK_GPIO: |
| 777 | if (tg3_asic_rev(tp) == ASIC_REV_5761) | 777 | if (tg3_asic_rev(tp) == ASIC_REV_5761) |
| 778 | return; | 778 | return; |
| 779 | /* fall through */ | 779 | fallthrough; |
| 780 | case TG3_APE_LOCK_GRC: | 780 | case TG3_APE_LOCK_GRC: |
| 781 | case TG3_APE_LOCK_MEM: | 781 | case TG3_APE_LOCK_MEM: |
| 782 | if (!tp->pci_fn) | 782 | if (!tp->pci_fn) |
| @@ -1586,7 +1586,7 @@ static int tg3_mdio_init(struct tg3 *tp) · 803 unmodified lines | |||
| 1586 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; | 1586 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; |
| 1587 | if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) | 1587 | if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) |
| 1588 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; | 1588 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; |
| 1589 | /* fall through */ | 1589 | fallthrough; |
| 1590 | case PHY_ID_RTL8211C: | 1590 | case PHY_ID_RTL8211C: |
| 1591 | phydev->interface = PHY_INTERFACE_MODE_RGMII; | 1591 | phydev->interface = PHY_INTERFACE_MODE_RGMII; |
| 1592 | break; | 1592 | break; |
| @@ -2114,7 +2114,7 @@ static int tg3_phy_init(struct tg3 *tp) · 521 unmodified lines | |||
| 2114 | phy_support_asym_pause(phydev); | 2114 | phy_support_asym_pause(phydev); |
| 2115 | break; | 2115 | break; |
| 2116 | } | 2116 | } |
| 2117 | /* fall through */ | 2117 | fallthrough; |
| 2118 | case PHY_INTERFACE_MODE_MII: | 2118 | case PHY_INTERFACE_MODE_MII: |
| 2119 | phy_set_max_speed(phydev, SPEED_100); | 2119 | phy_set_max_speed(phydev, SPEED_100); |
| 2120 | phy_support_asym_pause(phydev); | 2120 | phy_support_asym_pause(phydev); |
| @@ -4390,7 +4390,7 @@ static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) · 2269 unmodified lines | |||
| 4390 | MII_TG3_DSP_TAP26_RMRXSTO | | 4390 | MII_TG3_DSP_TAP26_RMRXSTO | |
| 4391 | MII_TG3_DSP_TAP26_OPCSINPT; | 4391 | MII_TG3_DSP_TAP26_OPCSINPT; |
| 4392 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); | 4392 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); |
| 4393 | /* Fall through */ | 4393 | fallthrough; |
| 4394 | case ASIC_REV_5720: | 4394 | case ASIC_REV_5720: |
| 4395 | case ASIC_REV_5762: | 4395 | case ASIC_REV_5762: |
| 4396 | if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) | 4396 | if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) |
| @@ -4538,7 +4538,7 @@ static int tg3_phy_pull_config(struct tg3 *tp) · 141 unmodified lines | |||
| 4538 | tp->link_config.speed = SPEED_1000; | 4538 | tp->link_config.speed = SPEED_1000; |
| 4539 | break; | 4539 | break; |
| 4540 | } | 4540 | } |
| 4541 | /* Fall through */ | 4541 | fallthrough; |
| 4542 | default: | 4542 | default: |
| 4543 | goto done; | 4543 | goto done; |
| 4544 | } | 4544 | } |
| @@ -5209,7 +5209,7 @@ static int tg3_fiber_aneg_smachine(struct tg3 *tp, · 664 unmodified lines | |||
| 5209 | if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) | 5209 | if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) |
| 5210 | ap->state = ANEG_STATE_AN_ENABLE; | 5210 | ap->state = ANEG_STATE_AN_ENABLE; |
| 5211 | 5211 | ||
| 5212 | /* fall through */ | 5212 | fallthrough; |
| 5213 | case ANEG_STATE_AN_ENABLE: | 5213 | case ANEG_STATE_AN_ENABLE: |
| 5214 | ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); | 5214 | ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); |
| 5215 | if (ap->flags & MR_AN_ENABLE) { | 5215 | if (ap->flags & MR_AN_ENABLE) { |
| @@ -5239,7 +5239,7 @@ static int tg3_fiber_aneg_smachine(struct tg3 *tp, · 23 unmodified lines | |||
| 5239 | ret = ANEG_TIMER_ENAB; | 5239 | ret = ANEG_TIMER_ENAB; |
| 5240 | ap->state = ANEG_STATE_RESTART; | 5240 | ap->state = ANEG_STATE_RESTART; |
| 5241 | 5241 | ||
| 5242 | /* fall through */ | 5242 | fallthrough; |
| 5243 | case ANEG_STATE_RESTART: | 5243 | case ANEG_STATE_RESTART: |
| 5244 | delta = ap->cur_time - ap->link_time; | 5244 | delta = ap->cur_time - ap->link_time; |
| 5245 | if (delta > ANEG_STATE_SETTLE_TIME) | 5245 | if (delta > ANEG_STATE_SETTLE_TIME) |
| @@ -5282,7 +5282,7 @@ static int tg3_fiber_aneg_smachine(struct tg3 *tp, · 36 unmodified lines | |||
| 5282 | 5282 | ||
| 5283 | ap->state = ANEG_STATE_ACK_DETECT; | 5283 | ap->state = ANEG_STATE_ACK_DETECT; |
| 5284 | 5284 | ||
| 5285 | /* fall through */ | 5285 | fallthrough; |
| 5286 | case ANEG_STATE_ACK_DETECT: | 5286 | case ANEG_STATE_ACK_DETECT: |
| 5287 | if (ap->ack_match != 0) { | 5287 | if (ap->ack_match != 0) { |
| 5288 | if ((ap->rxconfig & ~ANEG_CFG_ACK) == | 5288 | if ((ap->rxconfig & ~ANEG_CFG_ACK) == |
| @@ -10720,40 +10720,40 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy) · 5431 unmodified lines | |||
| 10720 | switch (limit) { | 10720 | switch (limit) { |
| 10721 | case 16: | 10721 | case 16: |
| 10722 | tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); | 10722 | tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); |
| 10723 | /* fall through */ | 10723 | fallthrough; |
| 10724 | case 15: | 10724 | case 15: |
| 10725 | tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); | 10725 | tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); |
| 10726 | /* fall through */ | 10726 | fallthrough; |
| 10727 | case 14: | 10727 | case 14: |
| 10728 | tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); | 10728 | tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); |
| 10729 | /* fall through */ | 10729 | fallthrough; |
| 10730 | case 13: | 10730 | case 13: |
| 10731 | tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); | 10731 | tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); |
| 10732 | /* fall through */ | 10732 | fallthrough; |
| 10733 | case 12: | 10733 | case 12: |
| 10734 | tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); | 10734 | tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); |
| 10735 | /* fall through */ | 10735 | fallthrough; |
| 10736 | case 11: | 10736 | case 11: |
| 10737 | tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); | 10737 | tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); |
| 10738 | /* fall through */ | 10738 | fallthrough; |
| 10739 | case 10: | 10739 | case 10: |
| 10740 | tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); | 10740 | tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); |
| 10741 | /* fall through */ | 10741 | fallthrough; |
| 10742 | case 9: | 10742 | case 9: |
| 10743 | tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); | 10743 | tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); |
| 10744 | /* fall through */ | 10744 | fallthrough; |
| 10745 | case 8: | 10745 | case 8: |
| 10746 | tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); | 10746 | tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); |
| 10747 | /* fall through */ | 10747 | fallthrough; |
| 10748 | case 7: | 10748 | case 7: |
| 10749 | tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); | 10749 | tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); |
| 10750 | /* fall through */ | 10750 | fallthrough; |
| 10751 | case 6: | 10751 | case 6: |
| 10752 | tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); | 10752 | tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); |
| 10753 | /* fall through */ | 10753 | fallthrough; |
| 10754 | case 5: | 10754 | case 5: |
| 10755 | tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); | 10755 | tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); |
| 10756 | /* fall through */ | 10756 | fallthrough; |
| 10757 | case 4: | 10757 | case 4: |
| 10758 | /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ | 10758 | /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ |
| 10759 | case 3: | 10759 | case 3: |
| @@ -13998,7 +13998,7 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) · 3238 unmodified lines | |||
| 13998 | case SIOCGMIIPHY: | 13998 | case SIOCGMIIPHY: |
| 13999 | data->phy_id = tp->phy_addr; | 13999 | data->phy_id = tp->phy_addr; |
| 14000 | 14000 | ||
| 14001 | /* fall through */ | 14001 | fallthrough; |
| 14002 | case SIOCGMIIREG: { | 14002 | case SIOCGMIIREG: { |
| 14003 | u32 mii_regval; | 14003 | u32 mii_regval; |
| 14004 | 14004 | ||
| @@ -17136,7 +17136,7 @@ static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) · 3131 unmodified lines | |||
| 17136 | val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; | 17136 | val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; |
| 17137 | break; | 17137 | break; |
| 17138 | } | 17138 | } |
| 17139 | /* fallthrough */ | 17139 | fallthrough; |
| 17140 | case 128: | 17140 | case 128: |
| 17141 | default: | 17141 | default: |
| 17142 | val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; | 17142 | val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; |
| @@ -17151,28 +17151,28 @@ static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) · 8 unmodified lines | |||
| 17151 | DMA_RWCTRL_WRITE_BNDRY_16); | 17151 | DMA_RWCTRL_WRITE_BNDRY_16); |
| 17152 | break; | 17152 | break; |
| 17153 | } | 17153 | } |
| 17154 | /* fallthrough */ | 17154 | fallthrough; |
| 17155 | case 32: | 17155 | case 32: |
| 17156 | if (goal == BOUNDARY_SINGLE_CACHELINE) { | 17156 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
| 17157 | val |= (DMA_RWCTRL_READ_BNDRY_32 | | 17157 | val |= (DMA_RWCTRL_READ_BNDRY_32 | |
| 17158 | DMA_RWCTRL_WRITE_BNDRY_32); | 17158 | DMA_RWCTRL_WRITE_BNDRY_32); |
| 17159 | break; | 17159 | break; |
| 17160 | } | 17160 | } |
| 17161 | /* fallthrough */ | 17161 | fallthrough; |
| 17162 | case 64: | 17162 | case 64: |
| 17163 | if (goal == BOUNDARY_SINGLE_CACHELINE) { | 17163 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
| 17164 | val |= (DMA_RWCTRL_READ_BNDRY_64 | | 17164 | val |= (DMA_RWCTRL_READ_BNDRY_64 | |
| 17165 | DMA_RWCTRL_WRITE_BNDRY_64); | 17165 | DMA_RWCTRL_WRITE_BNDRY_64); |
| 17166 | break; | 17166 | break; |
| 17167 | } | 17167 | } |
| 17168 | /* fallthrough */ | 17168 | fallthrough; |
| 17169 | case 128: | 17169 | case 128: |
| 17170 | if (goal == BOUNDARY_SINGLE_CACHELINE) { | 17170 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
| 17171 | val |= (DMA_RWCTRL_READ_BNDRY_128 | | 17171 | val |= (DMA_RWCTRL_READ_BNDRY_128 | |
| 17172 | DMA_RWCTRL_WRITE_BNDRY_128); | 17172 | DMA_RWCTRL_WRITE_BNDRY_128); |
| 17173 | break; | 17173 | break; |
| 17174 | } | 17174 | } |
| 17175 | /* fallthrough */ | 17175 | fallthrough; |
| 17176 | case 256: | 17176 | case 256: |
| 17177 | val |= (DMA_RWCTRL_READ_BNDRY_256 | | 17177 | val |= (DMA_RWCTRL_READ_BNDRY_256 | |
| 17178 | DMA_RWCTRL_WRITE_BNDRY_256); | 17178 | DMA_RWCTRL_WRITE_BNDRY_256); |
| @@ -321,7 +321,7 @@ bfa_ioc_sm_getattr(struct bfa_ioc *ioc, enum ioc_event event) · 320 unmodified lines | |||
| 321 | case IOC_E_PFFAILED: | 321 | case IOC_E_PFFAILED: |
| 322 | case IOC_E_HWERROR: | 322 | case IOC_E_HWERROR: |
| 323 | del_timer(&ioc->ioc_timer); | 323 | del_timer(&ioc->ioc_timer); |
| 324 | /* fall through */ | 324 | fallthrough; |
| 325 | case IOC_E_TIMEOUT: | 325 | case IOC_E_TIMEOUT: |
| 326 | ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); | 326 | ioc->cbfn->enable_cbfn(ioc->bfa, BFA_STATUS_IOC_FAILURE); |
| 327 | bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); | 327 | bfa_fsm_set_state(ioc, bfa_ioc_sm_fail); |
| @@ -780,7 +780,7 @@ bfa_iocpf_sm_enabling(struct bfa_iocpf *iocpf, enum iocpf_event event) · 452 unmodified lines | |||
| 780 | 780 | ||
| 781 | case IOCPF_E_INITFAIL: | 781 | case IOCPF_E_INITFAIL: |
| 782 | del_timer(&ioc->iocpf_timer); | 782 | del_timer(&ioc->iocpf_timer); |
| 783 | /* fall through */ | 783 | fallthrough; |
| 784 | 784 | ||
| 785 | case IOCPF_E_TIMEOUT: | 785 | case IOCPF_E_TIMEOUT: |
| 786 | bfa_nw_ioc_hw_sem_release(ioc); | 786 | bfa_nw_ioc_hw_sem_release(ioc); |
| @@ -849,7 +849,7 @@ bfa_iocpf_sm_disabling(struct bfa_iocpf *iocpf, enum iocpf_event event) · 62 unmodified lines | |||
| 849 | 849 | ||
| 850 | case IOCPF_E_FAIL: | 850 | case IOCPF_E_FAIL: |
| 851 | del_timer(&ioc->iocpf_timer); | 851 | del_timer(&ioc->iocpf_timer); |
| 852 | /* fall through*/ | 852 | fallthrough; |
| 853 | 853 | ||
| 854 | case IOCPF_E_TIMEOUT: | 854 | case IOCPF_E_TIMEOUT: |
| 855 | bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); | 855 | bfa_ioc_set_cur_ioc_fwstate(ioc, BFI_IOC_FAIL); |
| @@ -1084,7 +1084,7 @@ bna_enet_sm_cfg_wait(struct bna_enet *enet, · 1083 unmodified lines | |||
| 1084 | 1084 | ||
| 1085 | case ENET_E_CHLD_STOPPED: | 1085 | case ENET_E_CHLD_STOPPED: |
| 1086 | bna_enet_rx_start(enet); | 1086 | bna_enet_rx_start(enet); |
| 1087 | /* Fall through */ | 1087 | fallthrough; |
| 1088 | case ENET_E_FWRESP_PAUSE: | 1088 | case ENET_E_FWRESP_PAUSE: |
| 1089 | if (enet->flags & BNA_ENET_F_PAUSE_CHANGED) { | 1089 | if (enet->flags & BNA_ENET_F_PAUSE_CHANGED) { |
| 1090 | enet->flags &= ~BNA_ENET_F_PAUSE_CHANGED; | 1090 | enet->flags &= ~BNA_ENET_F_PAUSE_CHANGED; |
| @@ -1636,7 +1636,7 @@ bna_bfi_rx_enet_start(struct bna_rx *rx) · 1635 unmodified lines | |||
| 1636 | &q1->qpt); | 1636 | &q1->qpt); |
| 1637 | cfg_req->q_cfg[i].qs.rx_buffer_size = | 1637 | cfg_req->q_cfg[i].qs.rx_buffer_size = |
| 1638 | htons((u16)q1->buffer_size); | 1638 | htons((u16)q1->buffer_size); |
| 1639 | /* Fall through */ | 1639 | fallthrough; |
| 1640 | 1640 | ||
| 1641 | case BNA_RXP_SINGLE: | 1641 | case BNA_RXP_SINGLE: |
| 1642 | /* Large/Single RxQ */ | 1642 | /* Large/Single RxQ */ |
| @@ -460,7 +460,7 @@ int gem_set_hwtst(struct net_device *dev, struct ifreq *ifr, int cmd) · 459 unmodified lines | |||
| 460 | case HWTSTAMP_TX_ONESTEP_SYNC: | 460 | case HWTSTAMP_TX_ONESTEP_SYNC: |
| 461 | if (gem_ptp_set_one_step_sync(bp, 1) != 0) | 461 | if (gem_ptp_set_one_step_sync(bp, 1) != 0) |
| 462 | return -ERANGE; | 462 | return -ERANGE; |
| 463 | /* fall through */ | 463 | fallthrough; |
| 464 | case HWTSTAMP_TX_ON: | 464 | case HWTSTAMP_TX_ON: |
| 465 | tx_bd_control = TSTAMP_ALL_FRAMES; | 465 | tx_bd_control = TSTAMP_ALL_FRAMES; |
| 466 | break; | 466 | break; |
| @@ -977,15 +977,14 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 976 unmodified lines | |||
| 977 | 977 | ||
| 978 | schedule_timeout_uninterruptible(HZ / 10); | 978 | schedule_timeout_uninterruptible(HZ / 10); |
| 979 | 979 | ||
| 980 | /* fallthrough */ | 980 | fallthrough; |
| 981 | case OCT_DEV_HOST_OK: | 981 | case OCT_DEV_HOST_OK: |
| 982 | 982 | ||
| 983 | /* fallthrough */ | ||
| 984 | case OCT_DEV_CONSOLE_INIT_DONE: | 983 | case OCT_DEV_CONSOLE_INIT_DONE: |
| 985 | /* Remove any consoles */ | 984 | /* Remove any consoles */ |
| 986 | octeon_remove_consoles(oct); | 985 | octeon_remove_consoles(oct); |
| 987 | 986 | ||
| 988 | /* fallthrough */ | 987 | fallthrough; |
| 989 | case OCT_DEV_IO_QUEUES_DONE: | 988 | case OCT_DEV_IO_QUEUES_DONE: |
| 990 | if (lio_wait_for_instr_fetch(oct)) | 989 | if (lio_wait_for_instr_fetch(oct)) |
| 991 | dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); | 990 | dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); |
| @@ -1027,7 +1026,7 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 35 unmodified lines | |||
| 1027 | octeon_free_sc_done_list(oct); | 1026 | octeon_free_sc_done_list(oct); |
| 1028 | octeon_free_sc_zombie_list(oct); | 1027 | octeon_free_sc_zombie_list(oct); |
| 1029 | 1028 | ||
| 1030 | /* fallthrough */ | 1029 | fallthrough; |
| 1031 | case OCT_DEV_INTR_SET_DONE: | 1030 | case OCT_DEV_INTR_SET_DONE: |
| 1032 | /* Disable interrupts */ | 1031 | /* Disable interrupts */ |
| 1033 | oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); | 1032 | oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); |
| @@ -1062,17 +1061,17 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 28 unmodified lines | |||
| 1062 | kfree(oct->irq_name_storage); | 1061 | kfree(oct->irq_name_storage); |
| 1063 | oct->irq_name_storage = NULL; | 1062 | oct->irq_name_storage = NULL; |
| 1064 | 1063 | ||
| 1065 | /* fallthrough */ | 1064 | fallthrough; |
| 1066 | case OCT_DEV_MSIX_ALLOC_VECTOR_DONE: | 1065 | case OCT_DEV_MSIX_ALLOC_VECTOR_DONE: |
| 1067 | if (OCTEON_CN23XX_PF(oct)) | 1066 | if (OCTEON_CN23XX_PF(oct)) |
| 1068 | octeon_free_ioq_vector(oct); | 1067 | octeon_free_ioq_vector(oct); |
| 1069 | 1068 | ||
| 1070 | /* fallthrough */ | 1069 | fallthrough; |
| 1071 | case OCT_DEV_MBOX_SETUP_DONE: | 1070 | case OCT_DEV_MBOX_SETUP_DONE: |
| 1072 | if (OCTEON_CN23XX_PF(oct)) | 1071 | if (OCTEON_CN23XX_PF(oct)) |
| 1073 | oct->fn_list.free_mbox(oct); | 1072 | oct->fn_list.free_mbox(oct); |
| 1074 | 1073 | ||
| 1075 | /* fallthrough */ | 1074 | fallthrough; |
| 1076 | case OCT_DEV_IN_RESET: | 1075 | case OCT_DEV_IN_RESET: |
| 1077 | case OCT_DEV_DROQ_INIT_DONE: | 1076 | case OCT_DEV_DROQ_INIT_DONE: |
| 1078 | /* Wait for any pending operations */ | 1077 | /* Wait for any pending operations */ |
| @@ -1095,11 +1094,11 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 16 unmodified lines | |||
| 1095 | } | 1094 | } |
| 1096 | } | 1095 | } |
| 1097 | 1096 | ||
| 1098 | /* fallthrough */ | 1097 | fallthrough; |
| 1099 | case OCT_DEV_RESP_LIST_INIT_DONE: | 1098 | case OCT_DEV_RESP_LIST_INIT_DONE: |
| 1100 | octeon_delete_response_list(oct); | 1099 | octeon_delete_response_list(oct); |
| 1101 | 1100 | ||
| 1102 | /* fallthrough */ | 1101 | fallthrough; |
| 1103 | case OCT_DEV_INSTR_QUEUE_INIT_DONE: | 1102 | case OCT_DEV_INSTR_QUEUE_INIT_DONE: |
| 1104 | for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { | 1103 | for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { |
| 1105 | if (!(oct->io_qmask.iq & BIT_ULL(i))) | 1104 | if (!(oct->io_qmask.iq & BIT_ULL(i))) |
| @@ -1110,16 +1109,16 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 4 unmodified lines | |||
| 1110 | if (oct->sriov_info.sriov_enabled) | 1109 | if (oct->sriov_info.sriov_enabled) |
| 1111 | pci_disable_sriov(oct->pci_dev); | 1110 | pci_disable_sriov(oct->pci_dev); |
| 1112 | #endif | 1111 | #endif |
| 1113 | /* fallthrough */ | 1112 | fallthrough; |
| 1114 | case OCT_DEV_SC_BUFF_POOL_INIT_DONE: | 1113 | case OCT_DEV_SC_BUFF_POOL_INIT_DONE: |
| 1115 | octeon_free_sc_buffer_pool(oct); | 1114 | octeon_free_sc_buffer_pool(oct); |
| 1116 | 1115 | ||
| 1117 | /* fallthrough */ | 1116 | fallthrough; |
| 1118 | case OCT_DEV_DISPATCH_INIT_DONE: | 1117 | case OCT_DEV_DISPATCH_INIT_DONE: |
| 1119 | octeon_delete_dispatch_list(oct); | 1118 | octeon_delete_dispatch_list(oct); |
| 1120 | cancel_delayed_work_sync(&oct->nic_poll_work.work); | 1119 | cancel_delayed_work_sync(&oct->nic_poll_work.work); |
| 1121 | 1120 | ||
| 1122 | /* fallthrough */ | 1121 | fallthrough; |
| 1123 | case OCT_DEV_PCI_MAP_DONE: | 1122 | case OCT_DEV_PCI_MAP_DONE: |
| 1124 | refcount = octeon_deregister_device(oct); | 1123 | refcount = octeon_deregister_device(oct); |
| 1125 | 1124 | ||
| @@ -1137,13 +1136,13 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 11 unmodified lines | |||
| 1137 | octeon_unmap_pci_barx(oct, 0); | 1136 | octeon_unmap_pci_barx(oct, 0); |
| 1138 | octeon_unmap_pci_barx(oct, 1); | 1137 | octeon_unmap_pci_barx(oct, 1); |
| 1139 | 1138 | ||
| 1140 | /* fallthrough */ | 1139 | fallthrough; |
| 1141 | case OCT_DEV_PCI_ENABLE_DONE: | 1140 | case OCT_DEV_PCI_ENABLE_DONE: |
| 1142 | pci_clear_master(oct->pci_dev); | 1141 | pci_clear_master(oct->pci_dev); |
| 1143 | /* Disable the device, releasing the PCI INT */ | 1142 | /* Disable the device, releasing the PCI INT */ |
| 1144 | pci_disable_device(oct->pci_dev); | 1143 | pci_disable_device(oct->pci_dev); |
| 1145 | 1144 | ||
| 1146 | /* fallthrough */ | 1145 | fallthrough; |
| 1147 | case OCT_DEV_BEGIN_STATE: | 1146 | case OCT_DEV_BEGIN_STATE: |
| 1148 | /* Nothing to be done here either */ | 1147 | /* Nothing to be done here either */ |
| 1149 | break; | 1148 | break; |
| @@ -2168,7 +2167,7 @@ static int liquidio_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) · 1018 unmodified lines | |||
| 2168 | case SIOCSHWTSTAMP: | 2167 | case SIOCSHWTSTAMP: |
| 2169 | if (lio->oct_dev->ptp_enable) | 2168 | if (lio->oct_dev->ptp_enable) |
| 2170 | return hwtstamp_ioctl(netdev, ifr); | 2169 | return hwtstamp_ioctl(netdev, ifr); |
| 2171 | /* fall through */ | 2170 | fallthrough; |
| 2172 | default: | 2171 | default: |
| 2173 | return -EOPNOTSUPP; | 2172 | return -EOPNOTSUPP; |
| 2174 | } | 2173 | } |
| @@ -460,9 +460,8 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 459 unmodified lines | |||
| 460 | 460 | ||
| 461 | schedule_timeout_uninterruptible(HZ / 10); | 461 | schedule_timeout_uninterruptible(HZ / 10); |
| 462 | 462 | ||
| 463 | /* fallthrough */ | 463 | fallthrough; |
| 464 | case OCT_DEV_HOST_OK: | 464 | case OCT_DEV_HOST_OK: |
| 465 | /* fallthrough */ | ||
| 466 | case OCT_DEV_IO_QUEUES_DONE: | 465 | case OCT_DEV_IO_QUEUES_DONE: |
| 467 | if (lio_wait_for_instr_fetch(oct)) | 466 | if (lio_wait_for_instr_fetch(oct)) |
| 468 | dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); | 467 | dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); |
| @@ -504,7 +503,7 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 35 unmodified lines | |||
| 504 | octeon_free_sc_done_list(oct); | 503 | octeon_free_sc_done_list(oct); |
| 505 | octeon_free_sc_zombie_list(oct); | 504 | octeon_free_sc_zombie_list(oct); |
| 506 | 505 | ||
| 507 | /* fall through */ | 506 | fallthrough; |
| 508 | case OCT_DEV_INTR_SET_DONE: | 507 | case OCT_DEV_INTR_SET_DONE: |
| 509 | /* Disable interrupts */ | 508 | /* Disable interrupts */ |
| 510 | oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); | 509 | oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); |
| @@ -533,15 +532,15 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 22 unmodified lines | |||
| 533 | else | 532 | else |
| 534 | cn23xx_vf_ask_pf_to_do_flr(oct); | 533 | cn23xx_vf_ask_pf_to_do_flr(oct); |
| 535 | 534 | ||
| 536 | /* fallthrough */ | 535 | fallthrough; |
| 537 | case OCT_DEV_MSIX_ALLOC_VECTOR_DONE: | 536 | case OCT_DEV_MSIX_ALLOC_VECTOR_DONE: |
| 538 | octeon_free_ioq_vector(oct); | 537 | octeon_free_ioq_vector(oct); |
| 539 | 538 | ||
| 540 | /* fallthrough */ | 539 | fallthrough; |
| 541 | case OCT_DEV_MBOX_SETUP_DONE: | 540 | case OCT_DEV_MBOX_SETUP_DONE: |
| 542 | oct->fn_list.free_mbox(oct); | 541 | oct->fn_list.free_mbox(oct); |
| 543 | 542 | ||
| 544 | /* fallthrough */ | 543 | fallthrough; |
| 545 | case OCT_DEV_IN_RESET: | 544 | case OCT_DEV_IN_RESET: |
| 546 | case OCT_DEV_DROQ_INIT_DONE: | 545 | case OCT_DEV_DROQ_INIT_DONE: |
| 547 | mdelay(100); | 546 | mdelay(100); |
| @@ -551,11 +550,11 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 3 unmodified lines | |||
| 551 | octeon_delete_droq(oct, i); | 550 | octeon_delete_droq(oct, i); |
| 552 | } | 551 | } |
| 553 | 552 | ||
| 554 | /* fallthrough */ | 553 | fallthrough; |
| 555 | case OCT_DEV_RESP_LIST_INIT_DONE: | 554 | case OCT_DEV_RESP_LIST_INIT_DONE: |
| 556 | octeon_delete_response_list(oct); | 555 | octeon_delete_response_list(oct); |
| 557 | 556 | ||
| 558 | /* fallthrough */ | 557 | fallthrough; |
| 559 | case OCT_DEV_INSTR_QUEUE_INIT_DONE: | 558 | case OCT_DEV_INSTR_QUEUE_INIT_DONE: |
| 560 | for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { | 559 | for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { |
| 561 | if (!(oct->io_qmask.iq & BIT_ULL(i))) | 560 | if (!(oct->io_qmask.iq & BIT_ULL(i))) |
| @@ -563,27 +562,27 @@ static void octeon_destroy_resources(struct octeon_device *oct) · 1 unmodified line | |||
| 563 | octeon_delete_instr_queue(oct, i); | 562 | octeon_delete_instr_queue(oct, i); |
| 564 | } | 563 | } |
| 565 | 564 | ||
| 566 | /* fallthrough */ | 565 | fallthrough; |
| 567 | case OCT_DEV_SC_BUFF_POOL_INIT_DONE: | 566 | case OCT_DEV_SC_BUFF_POOL_INIT_DONE: |
| 568 | octeon_free_sc_buffer_pool(oct); | 567 | octeon_free_sc_buffer_pool(oct); |
| 569 | 568 | ||
| 570 | /* fallthrough */ | 569 | fallthrough; |
| 571 | case OCT_DEV_DISPATCH_INIT_DONE: | 570 | case OCT_DEV_DISPATCH_INIT_DONE: |
| 572 | octeon_delete_dispatch_list(oct); | 571 | octeon_delete_dispatch_list(oct); |
| 573 | cancel_delayed_work_sync(&oct->nic_poll_work.work); | 572 | cancel_delayed_work_sync(&oct->nic_poll_work.work); |
| 574 | 573 | ||
| 575 | /* fallthrough */ | 574 | fallthrough; |
| 576 | case OCT_DEV_PCI_MAP_DONE: | 575 | case OCT_DEV_PCI_MAP_DONE: |
| 577 | octeon_unmap_pci_barx(oct, 0); | 576 | octeon_unmap_pci_barx(oct, 0); |
| 578 | octeon_unmap_pci_barx(oct, 1); | 577 | octeon_unmap_pci_barx(oct, 1); |
| 579 | 578 | ||
| 580 | /* fallthrough */ | 579 | fallthrough; |
| 581 | case OCT_DEV_PCI_ENABLE_DONE: | 580 | case OCT_DEV_PCI_ENABLE_DONE: |
| 582 | pci_clear_master(oct->pci_dev); | 581 | pci_clear_master(oct->pci_dev); |
| 583 | /* Disable the device, releasing the PCI INT */ | 582 | /* Disable the device, releasing the PCI INT */ |
| 584 | pci_disable_device(oct->pci_dev); | 583 | pci_disable_device(oct->pci_dev); |
| 585 | 584 | ||
| 586 | /* fallthrough */ | 585 | fallthrough; |
| 587 | case OCT_DEV_BEGIN_STATE: | 586 | case OCT_DEV_BEGIN_STATE: |
| 588 | /* Nothing to be done here either */ | 587 | /* Nothing to be done here either */ |
| 589 | break; | 588 | break; |
| @@ -522,7 +522,7 @@ static int nicvf_get_rss_hash_opts(struct nicvf *nic, · 521 unmodified lines | |||
| 522 | case SCTP_V4_FLOW: | 522 | case SCTP_V4_FLOW: |
| 523 | case SCTP_V6_FLOW: | 523 | case SCTP_V6_FLOW: |
| 524 | info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; | 524 | info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
| 525 | /* Fall through */ | 525 | fallthrough; |
| 526 | case IPV4_FLOW: | 526 | case IPV4_FLOW: |
| 527 | case IPV6_FLOW: | 527 | case IPV6_FLOW: |
| 528 | info->data |= RXH_IP_SRC | RXH_IP_DST; | 528 | info->data |= RXH_IP_SRC | RXH_IP_DST; |
| @@ -594,10 +594,10 @@ static inline bool nicvf_xdp_rx(struct nicvf *nic, struct bpf_prog *prog, · 593 unmodified lines | |||
| 594 | return true; | 594 | return true; |
| 595 | default: | 595 | default: |
| 596 | bpf_warn_invalid_xdp_action(action); | 596 | bpf_warn_invalid_xdp_action(action); |
| 597 | /* fall through */ | 597 | fallthrough; |
| 598 | case XDP_ABORTED: | 598 | case XDP_ABORTED: |
| 599 | trace_xdp_exception(nic->netdev, prog, action); | 599 | trace_xdp_exception(nic->netdev, prog, action); |
| 600 | /* fall through */ | 600 | fallthrough; |
| 601 | case XDP_DROP: | 601 | case XDP_DROP: |
| 602 | /* Check if it's a recycled page, if not | 602 | /* Check if it's a recycled page, if not |
| 603 | * unmap the DMA mapping. | 603 | * unmap the DMA mapping. |
| @@ -2543,7 +2543,7 @@ static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd) · 2542 unmodified lines | |||
| 2543 | !(data->phy_id & 0xe0e0)) | 2543 | !(data->phy_id & 0xe0e0)) |
| 2544 | data->phy_id = mdio_phy_id_c45(data->phy_id >> 8, | 2544 | data->phy_id = mdio_phy_id_c45(data->phy_id >> 8, |
| 2545 | data->phy_id & 0x1f); | 2545 | data->phy_id & 0x1f); |
| 2546 | /* FALLTHRU */ | 2546 | fallthrough; |
| 2547 | case SIOCGMIIPHY: | 2547 | case SIOCGMIIPHY: |
| 2548 | return mdio_mii_ioctl(&pi->phy.mdio, data, cmd); | 2548 | return mdio_mii_ioctl(&pi->phy.mdio, data, cmd); |
| 2549 | case SIOCCHIOCTL: | 2549 | case SIOCCHIOCTL: |
| @@ -136,7 +136,7 @@ again: · 135 unmodified lines | |||
| 136 | if (e->state == L2T_STATE_STALE) | 136 | if (e->state == L2T_STATE_STALE) |
| 137 | e->state = L2T_STATE_VALID; | 137 | e->state = L2T_STATE_VALID; |
| 138 | spin_unlock_bh(&e->lock); | 138 | spin_unlock_bh(&e->lock); |
| 139 | /* fall through */ | 139 | fallthrough; |
| 140 | case L2T_STATE_VALID: /* fast-path, send the packet on */ | 140 | case L2T_STATE_VALID: /* fast-path, send the packet on */ |
| 141 | return cxgb3_ofld_send(dev, skb); | 141 | return cxgb3_ofld_send(dev, skb); |
| 142 | case L2T_STATE_RESOLVING: | 142 | case L2T_STATE_RESOLVING: |
| @@ -231,7 +231,7 @@ again: · 230 unmodified lines | |||
| 231 | if (e->state == L2T_STATE_STALE) | 231 | if (e->state == L2T_STATE_STALE) |
| 232 | e->state = L2T_STATE_VALID; | 232 | e->state = L2T_STATE_VALID; |
| 233 | spin_unlock_bh(&e->lock); | 233 | spin_unlock_bh(&e->lock); |
| 234 | /* fall through */ | 234 | fallthrough; |
| 235 | case L2T_STATE_VALID: /* fast-path, send the packet on */ | 235 | case L2T_STATE_VALID: /* fast-path, send the packet on */ |
| 236 | return t4_ofld_send(adap, skb); | 236 | return t4_ofld_send(adap, skb); |
| 237 | case L2T_STATE_RESOLVING: | 237 | case L2T_STATE_RESOLVING: |
| @@ -2553,19 +2553,22 @@ int cxgb4_selftest_lb_pkt(struct net_device *netdev) · 2552 unmodified lines | |||
| 2553 | 2553 | ||
| 2554 | pkt_len = ETH_HLEN + sizeof(CXGB4_SELFTEST_LB_STR); | 2554 | pkt_len = ETH_HLEN + sizeof(CXGB4_SELFTEST_LB_STR); |
| 2555 | 2555 | ||
| 2556 | flits = DIV_ROUND_UP(pkt_len + sizeof(struct cpl_tx_pkt) + | 2556 | flits = DIV_ROUND_UP(pkt_len + sizeof(*cpl) + sizeof(*wr), |
| 2557 | sizeof(*wr), sizeof(__be64)); | 2557 | sizeof(__be64)); |
| 2558 | ndesc = flits_to_desc(flits); | 2558 | ndesc = flits_to_desc(flits); |
| 2559 | 2559 | ||
| 2560 | lb = &pi->ethtool_lb; | 2560 | lb = &pi->ethtool_lb; |
| 2561 | lb->loopback = 1; | 2561 | lb->loopback = 1; |
| 2562 | 2562 | ||
| 2563 | q = &adap->sge.ethtxq[pi->first_qset]; | 2563 | q = &adap->sge.ethtxq[pi->first_qset]; |
| 2564 | __netif_tx_lock(q->txq, smp_processor_id()); | ||
| 2564 | 2565 | ||
| 2565 | reclaim_completed_tx(adap, &q->q, -1, true); | 2566 | reclaim_completed_tx(adap, &q->q, -1, true); |
| 2566 | credits = txq_avail(&q->q) - ndesc; | 2567 | credits = txq_avail(&q->q) - ndesc; |
| 2567 | if (unlikely(credits < 0)) | 2568 | if (unlikely(credits < 0)) { |
| 2569 | __netif_tx_unlock(q->txq); | ||
| 2568 | return -ENOMEM; | 2570 | return -ENOMEM; |
| 2571 | } | ||
| 2569 | 2572 | ||
| 2570 | wr = (void *)&q->q.desc[q->q.pidx]; | 2573 | wr = (void *)&q->q.desc[q->q.pidx]; |
| 2571 | memset(wr, 0, sizeof(struct tx_desc)); | 2574 | memset(wr, 0, sizeof(struct tx_desc)); |
| @@ -2598,6 +2601,7 @@ int cxgb4_selftest_lb_pkt(struct net_device *netdev) · 26 unmodified lines | |||
| 2598 | init_completion(&lb->completion); | 2601 | init_completion(&lb->completion); |
| 2599 | txq_advance(&q->q, ndesc); | 2602 | txq_advance(&q->q, ndesc); |
| 2600 | cxgb4_ring_tx_db(adap, &q->q, ndesc); | 2603 | cxgb4_ring_tx_db(adap, &q->q, ndesc); |
| 2604 | __netif_tx_unlock(q->txq); | ||
| 2601 | 2605 | ||
| 2602 | /* wait for the pkt to return */ | 2606 | /* wait for the pkt to return */ |
| 2603 | ret = wait_for_completion_timeout(&lb->completion, 10 * HZ); | 2607 | ret = wait_for_completion_timeout(&lb->completion, 10 * HZ); |
| @@ -7656,13 +7656,13 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port, · 7655 unmodified lines | |||
| 7656 | switch (nmac) { | 7656 | switch (nmac) { |
| 7657 | case 5: | 7657 | case 5: |
| 7658 | memcpy(mac + 24, c.nmac3, sizeof(c.nmac3)); | 7658 | memcpy(mac + 24, c.nmac3, sizeof(c.nmac3)); |
| 7659 | /* Fall through */ | 7659 | fallthrough; |
| 7660 | case 4: | 7660 | case 4: |
| 7661 | memcpy(mac + 18, c.nmac2, sizeof(c.nmac2)); | 7661 | memcpy(mac + 18, c.nmac2, sizeof(c.nmac2)); |
| 7662 | /* Fall through */ | 7662 | fallthrough; |
| 7663 | case 3: | 7663 | case 3: |
| 7664 | memcpy(mac + 12, c.nmac1, sizeof(c.nmac1)); | 7664 | memcpy(mac + 12, c.nmac1, sizeof(c.nmac1)); |
| 7665 | /* Fall through */ | 7665 | fallthrough; |
| 7666 | case 2: | 7666 | case 2: |
| 7667 | memcpy(mac + 6, c.nmac0, sizeof(c.nmac0)); | 7667 | memcpy(mac + 6, c.nmac0, sizeof(c.nmac0)); |
| 7668 | } | 7668 | } |
| @@ -517,7 +517,7 @@ static int fwevtq_handler(struct sge_rspq *rspq, const __be64 *rsp, · 516 unmodified lines | |||
| 517 | } | 517 | } |
| 518 | cpl = (void *)p; | 518 | cpl = (void *)p; |
| 519 | } | 519 | } |
| 520 | /* Fall through */ | 520 | fallthrough; |
| 521 | 521 | ||
| 522 | case CPL_SGE_EGR_UPDATE: { | 522 | case CPL_SGE_EGR_UPDATE: { |
| 523 | /* | 523 | /* |
| @@ -272,7 +272,7 @@ static netdev_features_t enic_features_check(struct sk_buff *skb, · 271 unmodified lines | |||
| 272 | case ntohs(ETH_P_IPV6): | 272 | case ntohs(ETH_P_IPV6): |
| 273 | if (!(enic->vxlan.flags & ENIC_VXLAN_INNER_IPV6)) | 273 | if (!(enic->vxlan.flags & ENIC_VXLAN_INNER_IPV6)) |
| 274 | goto out; | 274 | goto out; |
| 275 | /* Fall through */ | 275 | fallthrough; |
| 276 | case ntohs(ETH_P_IP): | 276 | case ntohs(ETH_P_IP): |
| 277 | break; | 277 | break; |
| 278 | default: | 278 | default: |
| @@ -2389,7 +2389,7 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev) · 2388 unmodified lines | |||
| 2389 | 2389 | ||
| 2390 | dev_info(dev, "probe %s ID %d\n", dev_name(dev), id); | 2390 | dev_info(dev, "probe %s ID %d\n", dev_name(dev), id); |
| 2391 | 2391 | ||
| 2392 | netdev = alloc_etherdev_mq(sizeof(*port), TX_QUEUE_NUM); | 2392 | netdev = devm_alloc_etherdev_mqs(dev, sizeof(*port), TX_QUEUE_NUM, TX_QUEUE_NUM); |
| 2393 | if (!netdev) { | 2393 | if (!netdev) { |
| 2394 | dev_err(dev, "Can't allocate ethernet device #%d\n", id); | 2394 | dev_err(dev, "Can't allocate ethernet device #%d\n", id); |
| 2395 | return -ENOMEM; | 2395 | return -ENOMEM; |
| @@ -2521,7 +2521,6 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev) · 125 unmodified lines | |||
| 2521 | } | 2521 | } |
| 2522 | 2522 | ||
| 2523 | port->netdev = NULL; | 2523 | port->netdev = NULL; |
| 2524 | free_netdev(netdev); | ||
| 2525 | return ret; | 2524 | return ret; |
| 2526 | } | 2525 | } |
| 2527 | 2526 | ||
| @@ -2530,7 +2529,6 @@ static int gemini_ethernet_port_remove(struct platform_device *pdev) · 2 unmodified lines | |||
| 2530 | struct gemini_ethernet_port *port = platform_get_drvdata(pdev); | 2529 | struct gemini_ethernet_port *port = platform_get_drvdata(pdev); |
| 2531 | 2530 | ||
| 2532 | gemini_port_remove(port); | 2531 | gemini_port_remove(port); |
| 2533 | free_netdev(port->netdev); | ||
| 2534 | return 0; | 2532 | return 0; |
| 2535 | } | 2533 | } |
| 2536 | 2534 | ||
| @@ -385,7 +385,7 @@ static void dm9000_set_io(struct board_info *db, int byte_width) · 384 unmodified lines | |||
| 385 | 385 | ||
| 386 | case 3: | 386 | case 3: |
| 387 | dev_dbg(db->dev, ": 3 byte IO, falling back to 16bit\n"); | 387 | dev_dbg(db->dev, ": 3 byte IO, falling back to 16bit\n"); |
| 388 | /* fall through */ | 388 | fallthrough; |
| 389 | case 2: | 389 | case 2: |
| 390 | db->dumpblk = dm9000_dumpblk_16bit; | 390 | db->dumpblk = dm9000_dumpblk_16bit; |
| 391 | db->outblk = dm9000_outblk_16bit; | 391 | db->outblk = dm9000_outblk_16bit; |
| @@ -3203,7 +3203,7 @@ srom_map_media(struct net_device *dev) · 3202 unmodified lines | |||
| 3203 | case SROM_10BASETF: | 3203 | case SROM_10BASETF: |
| 3204 | if (!lp->params.fdx) return -1; | 3204 | if (!lp->params.fdx) return -1; |
| 3205 | lp->fdx = true; | 3205 | lp->fdx = true; |
| 3206 | /* fall through */ | 3206 | fallthrough; |
| 3207 | 3207 | ||
| 3208 | case SROM_10BASET: | 3208 | case SROM_10BASET: |
| 3209 | if (lp->params.fdx && !lp->fdx) return -1; | 3209 | if (lp->params.fdx && !lp->fdx) return -1; |
| @@ -3225,7 +3225,7 @@ srom_map_media(struct net_device *dev) · 15 unmodified lines | |||
| 3225 | case SROM_100BASETF: | 3225 | case SROM_100BASETF: |
| 3226 | if (!lp->params.fdx) return -1; | 3226 | if (!lp->params.fdx) return -1; |
| 3227 | lp->fdx = true; | 3227 | lp->fdx = true; |
| 3228 | /* fall through */ | 3228 | fallthrough; |
| 3229 | 3229 | ||
| 3230 | case SROM_100BASET: | 3230 | case SROM_100BASET: |
| 3231 | if (lp->params.fdx && !lp->fdx) return -1; | 3231 | if (lp->params.fdx && !lp->fdx) return -1; |
| @@ -3239,7 +3239,7 @@ srom_map_media(struct net_device *dev) · 7 unmodified lines | |||
| 3239 | case SROM_100BASEFF: | 3239 | case SROM_100BASEFF: |
| 3240 | if (!lp->params.fdx) return -1; | 3240 | if (!lp->params.fdx) return -1; |
| 3241 | lp->fdx = true; | 3241 | lp->fdx = true; |
| 3242 | /* fall through */ | 3242 | fallthrough; |
| 3243 | 3243 | ||
| 3244 | case SROM_100BASEF: | 3244 | case SROM_100BASEF: |
| 3245 | if (lp->params.fdx && !lp->fdx) return -1; | 3245 | if (lp->params.fdx && !lp->fdx) return -1; |
| @@ -911,7 +911,7 @@ static int private_ioctl (struct net_device *dev, struct ifreq *rq, int cmd) · 910 unmodified lines | |||
| 911 | data->phy_id = 1; | 911 | data->phy_id = 1; |
| 912 | else | 912 | else |
| 913 | return -ENODEV; | 913 | return -ENODEV; |
| 914 | /* Fall through */ | 914 | fallthrough; |
| 915 | 915 | ||
| 916 | case SIOCGMIIREG: /* Read MII PHY register. */ | 916 | case SIOCGMIIREG: /* Read MII PHY register. */ |
| 917 | if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) { | 917 | if (data->phy_id == 32 && (tp->flags & HAS_NWAY)) { |
| @@ -1443,7 +1443,7 @@ static int netdev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) · 1442 unmodified lines | |||
| 1443 | switch(cmd) { | 1443 | switch(cmd) { |
| 1444 | case SIOCGMIIPHY: /* Get address of MII PHY in use. */ | 1444 | case SIOCGMIIPHY: /* Get address of MII PHY in use. */ |
| 1445 | data->phy_id = ((struct netdev_private *)netdev_priv(dev))->phys[0] & 0x1f; | 1445 | data->phy_id = ((struct netdev_private *)netdev_priv(dev))->phys[0] & 0x1f; |
| 1446 | /* Fall Through */ | 1446 | fallthrough; |
| 1447 | 1447 | ||
| 1448 | case SIOCGMIIREG: /* Read MII PHY register. */ | 1448 | case SIOCGMIIREG: /* Read MII PHY register. */ |
| 1449 | spin_lock_irq(&np->lock); | 1449 | spin_lock_irq(&np->lock); |
| @@ -571,7 +571,7 @@ static u32 convert_to_et_setting(struct be_adapter *adapter, u32 if_speeds) · 570 unmodified lines | |||
| 571 | break; | 571 | break; |
| 572 | } | 572 | } |
| 573 | } | 573 | } |
| 574 | /* fall through */ | 574 | fallthrough; |
| 575 | case PHY_TYPE_SFP_PLUS_10GB: | 575 | case PHY_TYPE_SFP_PLUS_10GB: |
| 576 | case PHY_TYPE_XFP_10GB: | 576 | case PHY_TYPE_XFP_10GB: |
| 577 | case PHY_TYPE_SFP_1GB: | 577 | case PHY_TYPE_SFP_1GB: |
| @@ -945,7 +945,7 @@ static void dpaa_fq_setup(struct dpaa_priv *priv, · 944 unmodified lines | |||
| 945 | break; | 945 | break; |
| 946 | case FQ_TYPE_TX_CONF_MQ: | 946 | case FQ_TYPE_TX_CONF_MQ: |
| 947 | priv->conf_fqs[conf_cnt++] = &fq->fq_base; | 947 | priv->conf_fqs[conf_cnt++] = &fq->fq_base; |
| 948 | /* fall through */ | 948 | fallthrough; |
| 949 | case FQ_TYPE_TX_CONFIRM: | 949 | case FQ_TYPE_TX_CONFIRM: |
| 950 | dpaa_setup_ingress(priv, fq, &fq_cbs->tx_defq); | 950 | dpaa_setup_ingress(priv, fq, &fq_cbs->tx_defq); |
| 951 | break; | 951 | break; |
| @@ -375,7 +375,7 @@ static int dpaa_get_hash_opts(struct net_device *dev, · 374 unmodified lines | |||
| 375 | case UDP_V6_FLOW: | 375 | case UDP_V6_FLOW: |
| 376 | if (priv->keygen_in_use) | 376 | if (priv->keygen_in_use) |
| 377 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; | 377 | cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; |
| 378 | /* Fall through */ | 378 | fallthrough; |
| 379 | case IPV4_FLOW: | 379 | case IPV4_FLOW: |
| 380 | case IPV6_FLOW: | 380 | case IPV6_FLOW: |
| 381 | case SCTP_V4_FLOW: | 381 | case SCTP_V4_FLOW: |
| @@ -376,10 +376,10 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, · 375 unmodified lines | |||
| 376 | break; | 376 | break; |
| 377 | default: | 377 | default: |
| 378 | bpf_warn_invalid_xdp_action(xdp_act); | 378 | bpf_warn_invalid_xdp_action(xdp_act); |
| 379 | /* fall through */ | 379 | fallthrough; |
| 380 | case XDP_ABORTED: | 380 | case XDP_ABORTED: |
| 381 | trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act); | 381 | trace_xdp_exception(priv->net_dev, xdp_prog, xdp_act); |
| 382 | /* fall through */ | 382 | fallthrough; |
| 383 | case XDP_DROP: | 383 | case XDP_DROP: |
| 384 | xdp_release_buf(priv, ch, addr); | 384 | xdp_release_buf(priv, ch, addr); |
| 385 | ch->stats.xdp_drop++; | 385 | ch->stats.xdp_drop++; |
| @@ -3715,11 +3715,11 @@ failed_mii_init: · 3714 unmodified lines | |||
| 3715 | failed_irq: | 3715 | failed_irq: |
| 3716 | failed_init: | 3716 | failed_init: |
| 3717 | fec_ptp_stop(pdev); | 3717 | fec_ptp_stop(pdev); |
| 3718 | if (fep->reg_phy) | ||
| 3719 | regulator_disable(fep->reg_phy); | ||
| 3720 | failed_reset: | 3718 | failed_reset: |
| 3721 | pm_runtime_put_noidle(&pdev->dev); | 3719 | pm_runtime_put_noidle(&pdev->dev); |
| 3722 | pm_runtime_disable(&pdev->dev); | 3720 | pm_runtime_disable(&pdev->dev); |
| 3721 | if (fep->reg_phy) | ||
| 3722 | regulator_disable(fep->reg_phy); | ||
| 3723 | failed_regulator: | 3723 | failed_regulator: |
| 3724 | clk_disable_unprepare(fep->clk_ahb); | 3724 | clk_disable_unprepare(fep->clk_ahb); |
| 3725 | failed_clk_ahb: | 3725 | failed_clk_ahb: |
| @@ -528,7 +528,7 @@ static void setup_sgmii_internal_phy(struct fman_mac *memac, · 527 unmodified lines | |||
| 528 | case 100: | 528 | case 100: |
| 529 | tmp_reg16 |= IF_MODE_SGMII_SPEED_100M; | 529 | tmp_reg16 |= IF_MODE_SGMII_SPEED_100M; |
| 530 | break; | 530 | break; |
| 531 | case 1000: /* fallthrough */ | 531 | case 1000: |
| 532 | default: | 532 | default: |
| 533 | tmp_reg16 |= IF_MODE_SGMII_SPEED_1G; | 533 | tmp_reg16 |= IF_MODE_SGMII_SPEED_1G; |
| 534 | break; | 534 | break; |
| @@ -1344,10 +1344,10 @@ int fman_port_config(struct fman_port *port, struct fman_port_params *params) · 1343 unmodified lines | |||
| 1344 | switch (port->port_type) { | 1344 | switch (port->port_type) { |
| 1345 | case FMAN_PORT_TYPE_RX: | 1345 | case FMAN_PORT_TYPE_RX: |
| 1346 | set_rx_dflt_cfg(port, params); | 1346 | set_rx_dflt_cfg(port, params); |
| 1347 | /* fall through */ | 1347 | fallthrough; |
| 1348 | case FMAN_PORT_TYPE_TX: | 1348 | case FMAN_PORT_TYPE_TX: |
| 1349 | set_tx_dflt_cfg(port, params, &port->dts_params); | 1349 | set_tx_dflt_cfg(port, params, &port->dts_params); |
| 1350 | /* fall through */ | 1350 | fallthrough; |
| 1351 | default: | 1351 | default: |
| 1352 | set_dflt_cfg(port, params); | 1352 | set_dflt_cfg(port, params); |
| 1353 | } | 1353 | } |
| @@ -750,8 +750,10 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev) · 749 unmodified lines | |||
| 750 | continue; | 750 | continue; |
| 751 | 751 | ||
| 752 | err = gfar_parse_group(child, priv, model); | 752 | err = gfar_parse_group(child, priv, model); |
| 753 | if (err) | 753 | if (err) { |
| 754 | of_node_put(child); | ||
| 754 | goto err_grp_init; | 755 | goto err_grp_init; |
| 756 | } | ||
| 755 | } | 757 | } |
| 756 | } else { /* SQ_SG_MODE */ | 758 | } else { /* SQ_SG_MODE */ |
| 757 | err = gfar_parse_group(np, priv, model); | 759 | err = gfar_parse_group(np, priv, model); |
| @@ -1348,7 +1348,7 @@ static int adjust_enet_interface(struct ucc_geth_private *ugeth) · 1347 unmodified lines | |||
| 1348 | switch (ugeth->max_speed) { | 1348 | switch (ugeth->max_speed) { |
| 1349 | case SPEED_10: | 1349 | case SPEED_10: |
| 1350 | upsmr |= UCC_GETH_UPSMR_R10M; | 1350 | upsmr |= UCC_GETH_UPSMR_R10M; |
| 1351 | /* FALLTHROUGH */ | 1351 | fallthrough; |
| 1352 | case SPEED_100: | 1352 | case SPEED_100: |
| 1353 | if (ugeth->phy_interface != PHY_INTERFACE_MODE_RTBI) | 1353 | if (ugeth->phy_interface != PHY_INTERFACE_MODE_RTBI) |
| 1354 | upsmr |= UCC_GETH_UPSMR_RMM; | 1354 | upsmr |= UCC_GETH_UPSMR_RMM; |
| @@ -305,7 +305,7 @@ static int __lb_setup(struct net_device *ndev, · 304 unmodified lines | |||
| 305 | break; | 305 | break; |
| 306 | case MAC_LOOP_PHY_NONE: | 306 | case MAC_LOOP_PHY_NONE: |
| 307 | ret = hns_nic_config_phy_loopback(phy_dev, 0x0); | 307 | ret = hns_nic_config_phy_loopback(phy_dev, 0x0); |
| 308 | /* fall through */ | 308 | fallthrough; |
| 309 | case MAC_LOOP_NONE: | 309 | case MAC_LOOP_NONE: |
| 310 | if (!ret && h->dev->ops->set_loopback) { | 310 | if (!ret && h->dev->ops->set_loopback) { |
| 311 | if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) | 311 | if (priv->ae_handle->phy_if != PHY_INTERFACE_MODE_XGMII) |
| @@ -2746,7 +2746,7 @@ static void hns3_rx_checksum(struct hns3_enet_ring *ring, struct sk_buff *skb, · 2745 unmodified lines | |||
| 2746 | case HNS3_OL4_TYPE_MAC_IN_UDP: | 2746 | case HNS3_OL4_TYPE_MAC_IN_UDP: |
| 2747 | case HNS3_OL4_TYPE_NVGRE: | 2747 | case HNS3_OL4_TYPE_NVGRE: |
| 2748 | skb->csum_level = 1; | 2748 | skb->csum_level = 1; |
| 2749 | /* fall through */ | 2749 | fallthrough; |
| 2750 | case HNS3_OL4_TYPE_NO_TUN: | 2750 | case HNS3_OL4_TYPE_NO_TUN: |
| 2751 | l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M, | 2751 | l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M, |
| 2752 | HNS3_RXD_L3ID_S); | 2752 | HNS3_RXD_L3ID_S); |
| @@ -3061,7 +3061,7 @@ static irqreturn_t hclge_misc_irq_handle(int irq, void *data) · 3060 unmodified lines | |||
| 3061 | * by first decoding the types of errors. | 3061 | * by first decoding the types of errors. |
| 3062 | */ | 3062 | */ |
| 3063 | set_bit(HNAE3_UNKNOWN_RESET, &hdev->reset_request); | 3063 | set_bit(HNAE3_UNKNOWN_RESET, &hdev->reset_request); |
| 3064 | /* fall through */ | 3064 | fallthrough; |
| 3065 | case HCLGE_VECTOR0_EVENT_RST: | 3065 | case HCLGE_VECTOR0_EVENT_RST: |
| 3066 | hclge_reset_task_schedule(hdev); | 3066 | hclge_reset_task_schedule(hdev); |
| 3067 | break; | 3067 | break; |
| @@ -3686,12 +3686,10 @@ static int hclge_reset_prepare_up(struct hclge_dev *hdev) · 618 unmodified lines | |||
12 more lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 194 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 283 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 225 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 254 lines aren’t shown here.
This diff is large: its 223 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 540 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 590 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 264 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 600 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 309 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 276 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 247 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 312 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.