<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/drivers/mtd/chips, branch v4.9</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v4.9</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v4.9'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2016-07-10T01:53:33Z</updated>
<entry>
<title>mtd: cfi_cmdset_0020: Deinline do_write_buffer, save 5316 bytes</title>
<updated>2016-07-10T01:53:33Z</updated>
<author>
<name>Denys Vlasenko</name>
<email>dvlasenk@redhat.com</email>
</author>
<published>2016-04-08T18:35:43Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=21a190b970878be8298c3f696aede1de36986817'/>
<id>urn:sha1:21a190b970878be8298c3f696aede1de36986817</id>
<content type='text'>
This function compiles to 2554 bytes of machine code.
In C, the function is almost 200 lines long.

It has only one callsite, but forced inlining that much code
makes gcc generate significantly worse code. Let gcc itself decide
what to do.

Signed-off-by: Denys Vlasenko &lt;dvlasenk@redhat.com&gt;
CC: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
CC: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
CC: Artem Bityutskiy &lt;artem.bityutskiy@linux.intel.com&gt;
CC: linux-mtd@lists.infradead.org
CC: linux-kernel@vger.kernel.org
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: avoid stack overflow in MTD CFI code</title>
<updated>2016-04-03T23:46:24Z</updated>
<author>
<name>Arnd Bergmann</name>
<email>arnd@arndb.de</email>
</author>
<published>2016-02-29T12:20:28Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=fddcca5107051adf9e4481d2a79ae0616577fd2c'/>
<id>urn:sha1:fddcca5107051adf9e4481d2a79ae0616577fd2c</id>
<content type='text'>
When map_word gets too large, we use a lot of kernel stack, and for
MTD_MAP_BANK_WIDTH_32, this means we use more than the recommended
1024 bytes in a number of functions:

drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_write_buffers':
drivers/mtd/chips/cfi_cmdset_0020.c:651:1: warning: the frame size of 1336 bytes is larger than 1024 bytes [-Wframe-larger-than=]
drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_erase_varsize':
drivers/mtd/chips/cfi_cmdset_0020.c:972:1: warning: the frame size of 1208 bytes is larger than 1024 bytes [-Wframe-larger-than=]
drivers/mtd/chips/cfi_cmdset_0001.c: In function 'do_write_buffer':
drivers/mtd/chips/cfi_cmdset_0001.c:1835:1: warning: the frame size of 1240 bytes is larger than 1024 bytes [-Wframe-larger-than=]

This can be avoided if all operations on the map word are done
indirectly and the stack gets reused between the calls. We can
mostly achieve this by selecting MTD_COMPLEX_MAPPINGS whenever
MTD_MAP_BANK_WIDTH_32 is set, but for the case that no other
bank width is enabled, we also need to use a non-constant
map_bankwidth() to convince the compiler to use less stack.

Signed-off-by: Arnd Bergmann &lt;arnd@arndb.de&gt;
[Brian: this patch mostly achieves its goal by forcing
    MTD_COMPLEX_MAPPINGS (and the accompanying indirection) for 256-bit
    mappings; the rest of the change is mostly a wash, though it helps
    reduce stack size slightly. If we really care about supporting
    256-bit mappings though, we should consider rewriting some of this
    code to avoid keeping and assigning so many 256-bit objects on the
    stack.]
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi_cmdset_0001: fixing memory leak and handling failed kmalloc</title>
<updated>2016-01-07T01:23:10Z</updated>
<author>
<name>Insu Yun</name>
<email>wuninsu@gmail.com</email>
</author>
<published>2015-12-29T18:45:09Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=33853ebd746f0e6aa262745376fde5d4995e0a87'/>
<id>urn:sha1:33853ebd746f0e6aa262745376fde5d4995e0a87</id>
<content type='text'>
kmalloc needs to be handled when failing in memory pressure.
Also, it has memory leak in error routine.

Signed-off-by: Insu Yun &lt;wuninsu@gmail.com&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi_cmdset_0002: use swap() in cfi_cmdset_0002()</title>
<updated>2015-12-19T00:55:28Z</updated>
<author>
<name>Fabian Frederick</name>
<email>fabf@skynet.be</email>
</author>
<published>2015-06-10T16:31:32Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=fdd9d27c8a47ea81daeaddfe6c0156ae7cf68096'/>
<id>urn:sha1:fdd9d27c8a47ea81daeaddfe6c0156ae7cf68096</id>
<content type='text'>
Use kernel.h macro definition.

Thanks to Julia Lawall for Coccinelle scripting support.

Signed-off-by: Fabian Frederick &lt;fabf@skynet.be&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi: enforce valid geometry configuration</title>
<updated>2015-11-30T20:36:43Z</updated>
<author>
<name>Arnd Bergmann</name>
<email>arnd@arndb.de</email>
</author>
<published>2015-11-23T13:39:33Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=f5f92b36fbbb8ac7d70ff5fa39ec2637cce3094c'/>
<id>urn:sha1:f5f92b36fbbb8ac7d70ff5fa39ec2637cce3094c</id>
<content type='text'>
MTD allows compile-time configuration of the possible CFI geometry
settings that are allowed by the kernel, but that includes a couple of
invalid configurations, where no bank width or no interleave setting
is allowed. These are then caught with a compile-time warning:

include/linux/mtd/cfi.h:76:2: warning: #warning No CONFIG_MTD_CFI_Ix selected. No NOR chip support can work.
include/linux/mtd/map.h:145:2: warning: #warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx selected. No NOR chip support can work"

This is a bit annoying for randconfig tests, and can be avoided if
we change the Kconfig logic to always select the simplest configuration
when no other one is enabled.

Signed-off-by: Arnd Bergmann &lt;arnd@arndb.de&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: chips: fixup dependencies, to prevent build error</title>
<updated>2015-05-28T18:07:48Z</updated>
<author>
<name>Brian Norris</name>
<email>computersforpeace@gmail.com</email>
</author>
<published>2015-05-28T18:07:48Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=bde90062a38160fdce0d51a4340bb93c1a8f1114'/>
<id>urn:sha1:bde90062a38160fdce0d51a4340bb93c1a8f1114</id>
<content type='text'>
Commit 4612c715a6ea ("mtd: cfi: deinline large functions") moved some
code into the cfi_util library without creating a new dependency. So we
can get build failures like the following, when CONFIG_MTD_JEDECPROBE=y
and CONFIG_MTD_CFI_UTIL=m.

   drivers/built-in.o: In function `jedec_read_id':
&gt;&gt; jedec_probe.c:(.text+0x187ed8): undefined reference to `cfi_build_cmd_addr'
   drivers/built-in.o: In function `jedec_read_mfr':
&gt;&gt; jedec_probe.c:(.text+0x187f4a): undefined reference to `cfi_build_cmd_addr'
   drivers/built-in.o: In function `jedec_reset':
&gt;&gt; jedec_probe.c:(.text+0x187fe0): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x188004): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x18802b): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x18804e): undefined reference to `cfi_send_gen_cmd'
   drivers/built-in.o: In function `jedec_probe_chip':
&gt;&gt; jedec_probe.c:(.text+0x188130): undefined reference to `cfi_build_cmd_addr'
&gt;&gt; jedec_probe.c:(.text+0x18814d): undefined reference to `cfi_build_cmd_addr'
&gt;&gt; jedec_probe.c:(.text+0x1881dc): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x188203): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x18822d): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x1884c0): undefined reference to `cfi_send_gen_cmd'
&gt;&gt; jedec_probe.c:(.text+0x1884e7): undefined reference to `cfi_send_gen_cmd'
   drivers/built-in.o:jedec_probe.c:(.text+0x188511): more undefined references to `cfi_send_gen_cmd' follow
   drivers/built-in.o: In function `jedec_probe_chip':
&gt;&gt; jedec_probe.c:(.text+0x188618): undefined reference to `cfi_build_cmd'

So let's express the dependency properly.

Reported-by: kbuild test robot &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi_cmdset_0002: Initialize datum before calling map_word_load_partial</title>
<updated>2015-05-27T19:47:37Z</updated>
<author>
<name>Christian Riesch</name>
<email>christian.riesch@omicron.at</email>
</author>
<published>2015-03-31T21:29:22Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=636fdbf88efe069f9951d1b7df8d3fd82060dc60'/>
<id>urn:sha1:636fdbf88efe069f9951d1b7df8d3fd82060dc60</id>
<content type='text'>
In do_otp_write we must initialize the variable datum before calling
map_word_load_partial. Otherwise the upper bits of datum may be undefined,
which later causes problems in chip_good called by do_write_oneword.

Signed-off-by: Christian Riesch &lt;christian.riesch@omicron.at&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi: deinline large functions</title>
<updated>2015-05-27T19:42:16Z</updated>
<author>
<name>Denys Vlasenko</name>
<email>dvlasenk@redhat.com</email>
</author>
<published>2015-05-18T10:58:40Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=4612c715a6ea6b3af2aee0163c0721375b2548d7'/>
<id>urn:sha1:4612c715a6ea6b3af2aee0163c0721375b2548d7</id>
<content type='text'>
With this .config: http://busybox.net/~vda/kernel_config,
after uninlining these functions have sizes and callsite counts
as follows:

cfi_udelay(): 74 bytes, 26 callsites
cfi_send_gen_cmd(): 153 bytes, 95 callsites
cfi_build_cmd(): 274 bytes, 123 callsites
cfi_build_cmd_addr(): 49 bytes, 15 callsites
cfi_merge_status(): 230 bytes, 3 callsites

Reduction in code size is about 50,000:

    text     data      bss       dec     hex filename
85842882 22294584 20627456 128764922 7accbfa vmlinux.before
85789648 22294616 20627456 128711720 7abfc28 vmlinux

Signed-off-by: Denys Vlasenko &lt;dvlasenk@redhat.com&gt;
CC: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
CC: Jingoo Han &lt;jg1.han@samsung.com&gt;
CC: Brian Norris &lt;computersforpeace@gmail.com&gt;
CC: Aaron Sierra &lt;asierra@xes-inc.com&gt;
CC: Artem Bityutskiy &lt;Artem.Bityutskiy@linux.intel.com&gt;
CC: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
CC: linux-mtd@lists.infradead.org
CC: linux-kernel@vger.kernel.org
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: cfi: clean up some indenting</title>
<updated>2015-03-31T01:01:04Z</updated>
<author>
<name>Dan Carpenter</name>
<email>dan.carpenter@oracle.com</email>
</author>
<published>2015-02-25T13:15:58Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=35cc3337b6d5bb71ec80daaaf268bf25514fb6a2'/>
<id>urn:sha1:35cc3337b6d5bb71ec80daaaf268bf25514fb6a2</id>
<content type='text'>
These lines were all indented one tab more than they should be.

Signed-off-by: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
<entry>
<title>mtd: map_rom: Support UBI on ROM</title>
<updated>2015-01-10T07:24:27Z</updated>
<author>
<name>Aaron Sierra</name>
<email>asierra@xes-inc.com</email>
</author>
<published>2014-09-25T17:20:24Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=6958024ad5cdd78deae4da47a8722b06317dff45'/>
<id>urn:sha1:6958024ad5cdd78deae4da47a8722b06317dff45</id>
<content type='text'>
UBI needs to know the physical erase block size, even on read-only
devices, since it defines the on-device layout. Use a device-tree
provided value to support previously written UBI on read-only NOR.

UBI also needs a non-zero writebufsize, so we set it to one.

Note: This was implemented because hardware write-protected CFI
      NOR cannot be probed for the physical erase block size.

Signed-off-by: Joe Schultz &lt;jschultz@xes-inc.ccom&gt;
Signed-off-by: Aaron Sierra &lt;asierra@xes-inc.ccom&gt;
[Brian: removed unneeded #ifdef, note 'optional' erase-size property]
Signed-off-by: Brian Norris &lt;computersforpeace@gmail.com&gt;
</content>
</entry>
</feed>
