All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20160408.130737.1379821883201014485.davem@davemloft.net>

diff --git a/a/1.txt b/N1/1.txt
index 813c179..27a36af 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,3 +1,241 @@
+From: Jakub Kicinski <jakub.kicinski@netronome.com>
+Date: Thu,  7 Apr 2016 19:39:33 +0100
+
+> I re-discussed MPLS/MTU internally, dropped it from the patch 1,
+> re-tested everything, found out I forgot about debugfs pointers,
+> fixed that as well.
+> 
+> v5:
+>  - don't reserve space in RX buffers for MPLS label stack
+>    (patch 1);
+>  - fix debugfs pointers to ring structures (patch 5).
+> v4:
+>  - cut down on unrelated patches;
+>  - don't "close" the device on error path.
+> 
+> --- v4 cover letter
+> 
+> Previous series included some not entirely related patches,
+> this one is cut down.  Main issue I'm trying to solve here
+> is that .ndo_change_mtu() in nfpvf driver is doing full
+> close/open to reallocate buffers - which if open fails
+> can result in device being basically closed even though
+> the interface is started.  As suggested by you I try to move
+> towards a paradigm where the resources are allocated first
+> and the MTU change is only done once I'm certain (almost)
+> nothing can fail.  Almost because I need to communicate 
+> with FW and that can always time out.
+> 
+> Patch 1 fixes small issue.  Next 10 patches reorganize things
+> so that I can easily allocate new rings and sets of buffers
+> while the device is running.  Patches 13 and 15 reshape the
+> .ndo_change_mtu() and ethtool's ring-resize operation into
+> desired form.
+
+Looks good, series applied, thanks!
+
+Add a BPF_F_CURRENT_CPU flag to optimize the use-case where user space has
+per-CPU ring buffers and the eBPF program pushes the data into the current
+CPU's ring buffer which saves us an extra helper function call in eBPF.
+Also, make sure to properly reserve the remaining flags which are not used.
+
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+---
+ include/uapi/linux/bpf.h | 4 ++++
+ kernel/trace/bpf_trace.c | 7 ++++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
+index 70eda5a..b7b0fb1 100644
+--- a/include/uapi/linux/bpf.h
++++ b/include/uapi/linux/bpf.h
+@@ -347,6 +347,10 @@ enum bpf_func_id {
+ #define BPF_F_ZERO_CSUM_TX		(1ULL << 1)
+ #define BPF_F_DONT_FRAGMENT		(1ULL << 2)
+ 
++/* BPF_FUNC_perf_event_output flags. */
++#define BPF_F_INDEX_MASK		0xffffffffULL
++#define BPF_F_CURRENT_CPU		BPF_F_INDEX_MASK
++
+ /* user accessible mirror of in-kernel sk_buff.
+  * new fields can only be added to the end of this structure
+  */
+diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
+index 6855878..6bfe55c 100644
+--- a/kernel/trace/bpf_trace.c
++++ b/kernel/trace/bpf_trace.c
+@@ -225,11 +225,12 @@ static const struct bpf_func_proto bpf_perf_event_read_proto = {
+ 	.arg2_type	= ARG_ANYTHING,
+ };
+ 
+-static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)
++static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 flags, u64 r4, u64 size)
+ {
+ 	struct pt_regs *regs = (struct pt_regs *) (long) r1;
+ 	struct bpf_map *map = (struct bpf_map *) (long) r2;
+ 	struct bpf_array *array = container_of(map, struct bpf_array, map);
++	u64 index = flags & BPF_F_INDEX_MASK;
+ 	void *data = (void *) (long) r4;
+ 	struct perf_sample_data sample_data;
+ 	struct perf_event *event;
+@@ -239,6 +240,10 @@ static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)
+ 		.data = data,
+ 	};
+ 
++	if (unlikely(flags & ~(BPF_F_INDEX_MASK)))
++		return -EINVAL;
++	if (index == BPF_F_CURRENT_CPU)
++		index = raw_smp_processor_id();
+ 	if (unlikely(index >= array->map.max_entries))
+ 		return -E2BIG;
+ 
+-- 
+1.9.3
+
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+
+Looking at the backlogs, I am not the only one who missed that the above
+functions do not read u32 from one register, but create a virtual u32
+from reading to adjacent u16 registers (which depending on 'bus_shift'
+can be up to 8 byte apart). Because this driver supports old hardware
+for which we don't have documentation, I first wrongly assumed there was
+a variant which had a few u32 registers. Let's give the functions more
+descriptive names to make it more obvious what is happening.
+
+Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
+---
+ drivers/mmc/host/tmio_mmc.h     |  5 ++---
+ drivers/mmc/host/tmio_mmc_pio.c | 22 +++++++++++-----------
+ 2 files changed, 13 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h
+index 439fdad2bad91d..e75e5ca220bc0a 100644
+--- a/drivers/mmc/host/tmio_mmc.h
++++ b/drivers/mmc/host/tmio_mmc.h
+@@ -232,7 +232,7 @@ static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,
+ 	readsw(host->ctl + (addr << host->bus_shift), buf, count);
+ }
+ 
+-static inline u32 sd_ctrl_read32(struct tmio_mmc_host *host, int addr)
++static inline u32 sd_ctrl_read16_and_16_as_32(struct tmio_mmc_host *host, int addr)
+ {
+ 	return readw(host->ctl + (addr << host->bus_shift)) |
+ 	       readw(host->ctl + ((addr + 2) << host->bus_shift)) << 16;
+@@ -254,11 +254,10 @@ static inline void sd_ctrl_write16_rep(struct tmio_mmc_host *host, int addr,
+ 	writesw(host->ctl + (addr << host->bus_shift), buf, count);
+ }
+ 
+-static inline void sd_ctrl_write32(struct tmio_mmc_host *host, int addr, u32 val)
++static inline void sd_ctrl_write32_as_16_and_16(struct tmio_mmc_host *host, int addr, u32 val)
+ {
+ 	writew(val, host->ctl + (addr << host->bus_shift));
+ 	writew(val >> 16, host->ctl + ((addr + 2) << host->bus_shift));
+ }
+ 
+-
+ #endif
+diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c
+index 15e6f6d5a42337..dad2ebd3dc22b4 100644
+--- a/drivers/mmc/host/tmio_mmc_pio.c
++++ b/drivers/mmc/host/tmio_mmc_pio.c
+@@ -55,18 +55,18 @@
+ void tmio_mmc_enable_mmc_irqs(struct tmio_mmc_host *host, u32 i)
+ {
+ 	host->sdcard_irq_mask &= ~(i & TMIO_MASK_IRQ);
+-	sd_ctrl_write32(host, CTL_IRQ_MASK, host->sdcard_irq_mask);
++	sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask);
+ }
+ 
+ void tmio_mmc_disable_mmc_irqs(struct tmio_mmc_host *host, u32 i)
+ {
+ 	host->sdcard_irq_mask |= (i & TMIO_MASK_IRQ);
+-	sd_ctrl_write32(host, CTL_IRQ_MASK, host->sdcard_irq_mask);
++	sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask);
+ }
+ 
+ static void tmio_mmc_ack_mmc_irqs(struct tmio_mmc_host *host, u32 i)
+ {
+-	sd_ctrl_write32(host, CTL_STATUS, ~i);
++	sd_ctrl_write32_as_16_and_16(host, CTL_STATUS, ~i);
+ }
+ 
+ static void tmio_mmc_init_sg(struct tmio_mmc_host *host, struct mmc_data *data)
+@@ -381,7 +381,7 @@ static int tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command
+ 	tmio_mmc_enable_mmc_irqs(host, irq_mask);
+ 
+ 	/* Fire off the command */
+-	sd_ctrl_write32(host, CTL_ARG_REG, cmd->arg);
++	sd_ctrl_write32_as_16_and_16(host, CTL_ARG_REG, cmd->arg);
+ 	sd_ctrl_write16(host, CTL_SD_CMD, c);
+ 
+ 	return 0;
+@@ -536,7 +536,7 @@ static void tmio_mmc_data_irq(struct tmio_mmc_host *host)
+ 		goto out;
+ 
+ 	if (host->chan_tx && (data->flags & MMC_DATA_WRITE) && !host->force_pio) {
+-		u32 status = sd_ctrl_read32(host, CTL_STATUS);
++		u32 status = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);
+ 		bool done = false;
+ 
+ 		/*
+@@ -591,7 +591,7 @@ static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host,
+ 	 */
+ 
+ 	for (i = 3, addr = CTL_RESPONSE ; i >= 0 ; i--, addr += 4)
+-		cmd->resp[i] = sd_ctrl_read32(host, addr);
++		cmd->resp[i] = sd_ctrl_read16_and_16_as_32(host, addr);
+ 
+ 	if (cmd->flags &  MMC_RSP_136) {
+ 		cmd->resp[0] = (cmd->resp[0] << 8) | (cmd->resp[1] >> 24);
+@@ -708,14 +708,14 @@ irqreturn_t tmio_mmc_irq(int irq, void *devid)
+ 	struct tmio_mmc_host *host = devid;
+ 	unsigned int ireg, status;
+ 
+-	status = sd_ctrl_read32(host, CTL_STATUS);
++	status = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);
+ 	ireg = status & TMIO_MASK_IRQ & ~host->sdcard_irq_mask;
+ 
+ 	pr_debug_status(status);
+ 	pr_debug_status(ireg);
+ 
+ 	/* Clear the status except the interrupt status */
+-	sd_ctrl_write32(host, CTL_STATUS, TMIO_MASK_IRQ);
++	sd_ctrl_write32_as_16_and_16(host, CTL_STATUS, TMIO_MASK_IRQ);
+ 
+ 	if (__tmio_mmc_card_detect_irq(host, ireg, status))
+ 		return IRQ_HANDLED;
+@@ -961,7 +961,7 @@ static int tmio_mmc_get_ro(struct mmc_host *mmc)
+ 
+ 	pm_runtime_get_sync(mmc_dev(mmc));
+ 	ret = !((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||
+-		(sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));
++		(sd_ctrl_read16_and_16_as_32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));
+ 	pm_runtime_mark_last_busy(mmc_dev(mmc));
+ 	pm_runtime_put_autosuspend(mmc_dev(mmc));
+ 
+@@ -983,7 +983,7 @@ static int tmio_mmc_card_busy(struct mmc_host *mmc)
+ {
+ 	struct tmio_mmc_host *host = mmc_priv(mmc);
+ 
+-	return !(sd_ctrl_read32(host, CTL_STATUS2) & TMIO_STATUS2_DAT0);
++	return !(sd_ctrl_read16_and_16_as_32(host, CTL_STATUS2) & TMIO_STATUS2_DAT0);
+ }
+ 
+ static struct mmc_host_ops tmio_mmc_ops = {
+@@ -1132,7 +1132,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,
+ 	tmio_mmc_clk_stop(_host);
+ 	tmio_mmc_reset(_host);
+ 
+-	_host->sdcard_irq_mask = sd_ctrl_read32(_host, CTL_IRQ_MASK);
++	_host->sdcard_irq_mask = sd_ctrl_read16_and_16_as_32(_host, CTL_IRQ_MASK);
+ 	tmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL);
+ 
+ 	/* Unmask the IRQs we want to know about */
+-- 
+2.7.0
+
 From: Jiri Pirko <jiri@resnulli.us>
 Date: Fri, 8 Apr 2016 17:51:55 +0200
 
@@ -18,4 +256,165 @@ Thanks.
 
 > Thanks and sorry, owe you another beer :)
 
-:-)
\ No newline at end of file
+:-)
+
+On Thu, Apr 7, 2016 at 7:32 PM, Alexander Duyck <aduyck@mirantis.com> wrote:
+> This patch adds support for a feature I am calling IP ID mangling.  It is
+> basically just another way of saying the IP IDs that are transmitted by the
+> tunnel may not match up with what would normally be expected.  Specifically
+> what will happen is in the case of TSO the IP IDs on the headers will be a
+> fixed value so a given TSO will repeat the same inner IP ID value gso_segs
+> number of times.
+>
+> Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
+
+If I'm understanding this correctly, enabling IP ID mangling will help
+performance on ixgbe since it will allow it to do GSO partial instead
+of plain GSO but it will hurt performance on i40e since it will drop
+from TSO to plain GSO.
+
+Assuming that's right, it seems like it will make it hard to chose the
+right setting without knowledge of which hardware is in use. I guess
+what we really want is "I care about nicely incrementing IP IDs" vs.
+"I don't care as long as the DF bit is set". That second case is
+really what this flag is trying to say but it seems like it is
+enforcing too much in the i40e case - I don't think anyone wants to go
+out of their way to make IP IDs jump around if incrementing is faster.
+
+On Friday 19 Feb 2016 11:59:40 Marc Zyngier wrote:
+> On 19/02/16 09:18, Linus Walleij wrote:
+> > Top-quoting so everyone on the new To:-line gets the context.
+> > 
+> > I definately need an indication from an irqchip maintainer like tglx or
+> > Marc Z before I merge this. Also, as in reply to the previous letter,
+> > coordinate efforts with Jon Hunters similar problem space.
+> 
+> Seems pretty straightforward to me.
+>
+> Acked-by: Marc Zyngier <marc.zyngier@arm.com>
+
+Too straightforward to be correct :-/
+
+[    6.232681] BUG: sleeping function called from invalid context at /home/laurent/src/iob/renesas/linux/drivers/base/power/runtime.c:955
+[    6.244795] in_atomic(): 1, irqs_disabled(): 128, pid: 658, name: udevd
+[    6.251429] CPU: 3 PID: 658 Comm: udevd Tainted: P                4.6.0-rc3 #756
+[    6.258844] Hardware name: Generic R8A7790 (Flattened Device Tree)
+[    6.265036] Backtrace: 
+[    6.267535] [<c0014c98>] (dump_backtrace) from [<c0014fb0>] (show_stack+0x20/0x24)
+[    6.275124]  r6:00000000 r5:00000000 r4:60000093 r3:00000000
+[    6.280850] [<c0014f90>] (show_stack) from [<c01f614c>] (dump_stack+0x8c/0xac)
+[    6.288105] [<c01f60c0>] (dump_stack) from [<c00510c8>] (___might_sleep+0x100/0x158)
+[    6.295863]  r5:000003bb r4:c06ca340
+[    6.299474] [<c0050fc8>] (___might_sleep) from [<c005118c>] (__might_sleep+0x6c/0xa8)
+[    6.307317]  r4:c05b6a24
+[    6.309880] [<c0051120>] (__might_sleep) from [<c02d971c>] (__pm_runtime_resume+0x98/0xa0)
+[    6.318159]  r6:000000dc r5:00000004 r4:ea280010
+[    6.322831] [<c02d9684>] (__pm_runtime_resume) from [<c02282c8>] (gpio_rcar_irq_request_resources+0x2c/0x34)
+[    6.332674]  r7:00000000 r6:000000dc r5:e95b3c00 r4:e99f3c00
+[    6.338397] [<c022829c>] (gpio_rcar_irq_request_resources) from [<c0077a88>] (__setup_irq+0x24c/0x5dc)
+[    6.347724] [<c007783c>] (__setup_irq) from [<c0077ff4>] (request_threaded_irq+0xdc/0x180)
+[    6.356004]  r10:bf0aabc8 r9:000000dc r8:e9bc3000 r7:c0075be8 r6:e99f3c00 r5:00002003
+[    6.363905]  r4:e95b3c00
+[    6.366466] [<c0077f18>] (request_threaded_irq) from [<c007a758>] (devm_request_threaded_irq+0x6c/0xac)
+[    6.375874]  r10:ea2db810 r9:ea2db810 r8:00000000 r7:bf0aabc8 r6:000000dc r5:e9bc3000
+[    6.383773]  r4:e95b3b50 r3:00002003
+[    6.387410] [<c007a6ec>] (devm_request_threaded_irq) from [<bf0aab9c>] (mmc_gpiod_request_cd_irq+0xa4/0xd0 [mmc_core])
+[    6.398121]  r10:ea2db800 r8:e9bc3000 r7:e9bed598 r6:000000dc r5:e9bed524 r4:e9bc3000
+[    6.406065] [<bf0aaaf8>] (mmc_gpiod_request_cd_irq [mmc_core]) from [<bf09f3bc>] (mmc_start_host+0x70/0x90 [mmc_core])
+[    6.416779]  r6:e9bc3300 r5:00000000 r4:e9bc3000
+[    6.421476] [<bf09f34c>] (mmc_start_host [mmc_core]) from [<bf0a061c>] (mmc_add_host+0x54/0x78 [mmc_core])
+[    6.431146]  r4:e9bc3000 r3:00000001
+[    6.434782] [<bf0a05c8>] (mmc_add_host [mmc_core]) from [<bf134b3c>] (tmio_mmc_host_probe+0x3ac/0x450 [tmio_mmc_core])
+[    6.445498]  r5:ffffffe0 r4:00000000
+[    6.449119] [<bf134790>] (tmio_mmc_host_probe [tmio_mmc_core]) from [<bf1501e8>] (sh_mobile_sdhi_probe+0x198/0x414 [sh_mobile_sdhi])
+[    6.461051]  r10:bf150d04 r9:e9bed598 r8:00000001 r7:ea2db810 r6:ea2db800 r5:e9bc3300
+[    6.468958]  r4:e9bed590
+[    6.471532] [<bf150050>] (sh_mobile_sdhi_probe [sh_mobile_sdhi]) from [<c02cf220>] (platform_drv_probe+0x60/0xc0)
+[    6.481811]  r10:00000011 r9:00000000 r8:bf151464 r7:bf151464 r6:fffffdfb r5:ea2db810
+[    6.489712]  r4:00000000
+[    6.492271] [<c02cf1c0>] (platform_drv_probe) from [<c02ccf80>] (driver_probe_device+0x224/0x440)
+[    6.501156]  r7:c06c45f8 r6:c08e2b44 r5:c08e2b3c r4:ea2db810
+[    6.506878] [<c02ccd5c>] (driver_probe_device) from [<c02cd2a0>] (__driver_attach+0x104/0x128)
+[    6.515508]  r10:00000000 r9:bf1514c0 r8:c06c4520 r7:00000000 r6:bf151464 r5:ea2db810
+[    6.523411]  r4:ea2db844
+[    6.525965] [<c02cd19c>] (__driver_attach) from [<c02cae04>] (bus_for_each_dev+0x64/0x98)
+[    6.534156]  r6:c02cd19c r5:bf151464 r4:00000000 r3:00000000
+[    6.539874] [<c02cada0>] (bus_for_each_dev) from [<c02cc5e4>] (driver_attach+0x2c/0x30)
+[    6.547895]  r6:c06ace08 r5:ea294c80 r4:bf151464
+[    6.552561] [<c02cc5b8>] (driver_attach) from [<c02cc264>] (bus_add_driver+0x18c/0x268)
+[    6.560586] [<c02cc0d8>] (bus_add_driver) from [<c02cdf90>] (driver_register+0x88/0x104)
+[    6.568691]  r8:bf153000 r7:00000001 r6:e9ba7a40 r5:c067cfc8 r4:bf151464
+[    6.575464] [<c02cdf08>] (driver_register) from [<c02cef80>] (__platform_driver_register+0x50/0x54)
+[    6.584523]  r5:c067cfc8 r4:c067cfc8
+[    6.588141] [<c02cef30>] (__platform_driver_register) from [<bf153018>] (sh_mobile_sdhi_driver_init+0x18/0x24 [sh_mobile_sdhi])
+[    6.599654] [<bf153000>] (sh_mobile_sdhi_driver_init [sh_mobile_sdhi]) from [<c000a884>] (do_one_initcall+0xc0/0x200)
+[    6.610292] [<c000a7c4>] (do_one_initcall) from [<c00ccd28>] (do_init_module+0x70/0x1dc)
+[    6.618398]  r10:000005fa r9:bf1514c0 r8:c00a1f28 r7:00000001 r6:e94f3fc0 r5:00000001
+[    6.626299]  r4:bf1514c0
+[    6.628860] [<c00cccb8>] (do_init_module) from [<c00a5368>] (load_module+0x19c8/0x2164)
+[    6.636878]  r7:00000001 r6:e955ec00 r5:00000001 r4:e9b73f3c
+[    6.642603] [<c00a39a0>] (load_module) from [<c00a5d38>] (SyS_finit_module+0xb0/0xe0)
+[    6.650447]  r10:00000000 r9:e9b72000 r8:b6f75330 r7:00000009 r6:00000000 r5:00000000
+[    6.658342]  r4:7fffffff
+[    6.660901] [<c00a5c88>] (SyS_finit_module) from [<c0011940>] (ret_fast_syscall+0x0/0x34)
+[    6.669093]  r8:c0011ae4 r7:0000017b r6:00000000 r5:00000000 r4:00020000
+
+The .irq_request_resources() handler is called with a spinlock held, it thus
+can't call the synchronous version of the PM runtime functions.
+
+-- 
+Regards,
+
+Laurent Pinchart
+
+Enables PWM1 (brightness control) and PWM2 (PMIC switching frequency
+synchronization).
+
+Signed-off-by: Ulrich Hecht <ulrich.hecht+renesas@gmail.com>
+Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
+
+---
+arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts | 23 ++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts
+index 507d6a4..5525637 100644
+--- a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts
++++ b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts
+@@ -189,6 +189,15 @@
+ 	pinctrl-0 = <&scif_clk_pins>;
+ 	pinctrl-names = "default";
+ 
++	pwm1_pins: pwm1 {
++		renesas,groups = "pwm1_a";
++		renesas,function = "pwm1";
++	};
++	pwm2_pins: pwm2 {
++		renesas,groups = "pwm2_a";
++		renesas,function = "pwm2";
++	};
++
+ 	scif1_pins: scif1 {
+ 		renesas,groups = "scif1_data_a", "scif1_ctrl";
+ 		renesas,function = "scif1";
+@@ -299,6 +308,20 @@
+ 	};
+ };
+ 
++&pwm1 {
++	/* brightness control */
++	pinctrl-0 = <&pwm1_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
++&pwm2 {
++	/* PMIC DC/DC switching frequency synchronization */
++	pinctrl-0 = <&pwm2_pins>;
++	pinctrl-names = "default";
++	status = "okay";
++};
++
+ &rcar_sound {
+ 	pinctrl-0 = <&sound_pins &sound_clk_pins>;
+ 	pinctrl-names = "default";
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index be6c56c..d779491 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,21 +1,135 @@
+[
+  "ref\0001460054388-471-1-git-send-email-jakub.kicinski\@netronome.com\0"
+]
+[
+  "ref\0cover.1461005139.git.daniel\@iogearbox.net\0"
+]
+[
+  "ref\0001461689625-3693-1-git-send-email-wsa\@the-dreams.de\0"
+]
 [
   "ref\0001460130325-14931-1-git-send-email-jiri\@resnulli.us\0"
 ]
 [
   "ref\00020160408155155.GC1932\@nanopsycho.orion\0"
 ]
+[
+  "ref\00020160407222211.11142.41024.stgit\@ahduyck-xeon-server\0"
+]
+[
+  "ref\00020160407223237.11142.33072.stgit\@ahduyck-xeon-server\0"
+]
+[
+  "ref\0001455811590-15836-1-git-send-email-geert+renesas\@glider.be\0"
+]
+[
+  "ref\0CACRpkdZ2zzP5u4uJDzsnks7ywrp3ddBt+YfxthJ+5mT-ECYLpg\@mail.gmail.com\0"
+]
+[
+  "ref\00056C703AC.4040803\@arm.com\0"
+]
 [
   "From\0David Miller <davem\@davemloft.net>\0"
 ]
+[
+  "From\0Daniel Borkmann <daniel\@iogearbox.net>\0"
+]
+[
+  "From\0Wolfram Sang <wsa\@the-dreams.de>\0"
+]
+[
+  "From\0David Miller <davem\@davemloft.net>\0"
+]
+[
+  "From\0Jesse Gross <jesse\@kernel.org>\0"
+]
+[
+  "From\0Laurent Pinchart <laurent.pinchart\@ideasonboard.com>\0"
+]
+[
+  "From\0Ulrich Hecht <ulrich.hecht+renesas\@gmail.com>\0"
+]
+[
+  "Subject\0Re: [PATCH v5 net-next 00/15] MTU/buffer reconfig changes\0"
+]
+[
+  "Subject\0[PATCH net-next v2 1/2] bpf, trace: add BPF_F_CURRENT_CPU flag for bpf_perf_event_output\0"
+]
+[
+  "Subject\0[PATCH v2 1/5] mmc: tmio: give read32/write32 functions more descriptive names\0"
+]
 [
   "Subject\0Re: [patch net-next 0/5] mlxsw: small driver update\0"
 ]
+[
+  "Subject\0Re: [RFC PATCH 07/11] GENEVE: Add option to mangle IP IDs on inner headers when using TSO\0"
+]
+[
+  "Subject\0Re: [PATCH/RFC v2] gpio: rcar: Add Runtime PM handling for interrupts\0"
+]
+[
+  "Subject\0[v3,4/6] arm64: dts: salvator-x: enable PWM\0"
+]
+[
+  "Date\0Fri, 08 Apr 2016 15:34:32 -0400 (EDT)\0"
+]
+[
+  "Date\0Mon, 18 Apr 2016 21:01:23 +0200\0"
+]
+[
+  "Date\0Tue, 26 Apr 2016 18:53:41 +0200\0"
+]
 [
   "Date\0Fri, 08 Apr 2016 13:07:37 -0400 (EDT)\0"
 ]
+[
+  "Date\0Thu, 7 Apr 2016 20:22:57 -0300\0"
+]
+[
+  "Date\0Mon, 11 Apr 2016 19:26:09 +0300\0"
+]
+[
+  "Date\0Thu, 31 Mar 2016 13:39:14 +0200\0"
+]
+[
+  "To\0jakub.kicinski\@netronome.com\0"
+]
+[
+  "To\0davem\@davemloft.net\0"
+]
+[
+  "To\0linux-mmc\@vger.kernel.org\0"
+]
 [
   "To\0jiri\@resnulli.us\0"
 ]
+[
+  "To\0Alexander Duyck <aduyck\@mirantis.com>\0"
+]
+[
+  "To\0Marc Zyngier <marc.zyngier\@arm.com>\0"
+]
+[
+  "To\0linux-renesas-soc\@vger.kernel.org",
+  " geert\@linux-m68k.org\0"
+]
+[
+  "Cc\0netdev\@vger.kernel.org\0"
+]
+[
+  "Cc\0alexei.starovoitov\@gmail.com",
+  " tgraf\@suug.ch",
+  " netdev\@vger.kernel.org",
+  " linux-kernel\@vger.kernel.org",
+  " Daniel Borkmann <daniel\@iogearbox.net>",
+  " Alexei Starovoitov <ast\@kernel.org>\0"
+]
+[
+  "Cc\0Wolfram Sang <wsa\@the-dreams.de>",
+  " linux-renesas-soc\@vger.kernel.org",
+  " Ulf Hansson <ulf.hansson\@linaro.org>",
+  " Simon Horman <horms+renesas\@verge.net.au>\0"
+]
 [
   "Cc\0netdev\@vger.kernel.org",
   " idosch\@mellanox.com",
@@ -25,6 +139,33 @@
   " roopa\@cumulusnetworks.com",
   " gospo\@cumulusnetworks.com\0"
 ]
+[
+  "Cc\0herbert\@gondor.apana.org.au",
+  " Tom Herbert <tom\@herbertland.com>",
+  " Alexander Duyck <alexander.duyck\@gmail.com>",
+  " edumazet\@google.com",
+  " Linux Kernel Network Developers <netdev\@vger.kernel.org>",
+  " David Miller <davem\@davemloft.net>\0"
+]
+[
+  "Cc\0Linus Walleij <linus.walleij\@linaro.org>",
+  " Geert Uytterhoeven <geert+renesas\@glider.be>",
+  " Thomas Gleixner <tglx\@linutronix.de>",
+  " Ulf Hansson <ulf.hansson\@linaro.org>",
+  " Alexandre Courbot <gnurou\@gmail.com>",
+  " Jon Hunter <jonathanh\@nvidia.com>",
+  " Wolfram Sang <wsa\@the-dreams.de>",
+  " Grygorii Strashko <grygorii.strashko\@ti.com>",
+  " linux-gpio\@vger.kernel.org <linux-gpio\@vger.kernel.org>",
+  " linux-pm\@vger.kernel.org <linux-pm\@vger.kernel.org>",
+  " linux-renesas-soc\@vger.kernel.org\0"
+]
+[
+  "Cc\0linux-pwm\@vger.kernel.org",
+  " thierry.reding\@gmail.com",
+  " magnus.damm\@gmail.com",
+  " Ulrich Hecht <ulrich.hecht+renesas\@gmail.com>\0"
+]
 [
   "\0000:1\0"
 ]
@@ -32,6 +173,244 @@
   "b\0"
 ]
 [
+  "From: Jakub Kicinski <jakub.kicinski\@netronome.com>\n",
+  "Date: Thu,  7 Apr 2016 19:39:33 +0100\n",
+  "\n",
+  "> I re-discussed MPLS/MTU internally, dropped it from the patch 1,\n",
+  "> re-tested everything, found out I forgot about debugfs pointers,\n",
+  "> fixed that as well.\n",
+  "> \n",
+  "> v5:\n",
+  ">  - don't reserve space in RX buffers for MPLS label stack\n",
+  ">    (patch 1);\n",
+  ">  - fix debugfs pointers to ring structures (patch 5).\n",
+  "> v4:\n",
+  ">  - cut down on unrelated patches;\n",
+  ">  - don't \"close\" the device on error path.\n",
+  "> \n",
+  "> --- v4 cover letter\n",
+  "> \n",
+  "> Previous series included some not entirely related patches,\n",
+  "> this one is cut down.  Main issue I'm trying to solve here\n",
+  "> is that .ndo_change_mtu() in nfpvf driver is doing full\n",
+  "> close/open to reallocate buffers - which if open fails\n",
+  "> can result in device being basically closed even though\n",
+  "> the interface is started.  As suggested by you I try to move\n",
+  "> towards a paradigm where the resources are allocated first\n",
+  "> and the MTU change is only done once I'm certain (almost)\n",
+  "> nothing can fail.  Almost because I need to communicate \n",
+  "> with FW and that can always time out.\n",
+  "> \n",
+  "> Patch 1 fixes small issue.  Next 10 patches reorganize things\n",
+  "> so that I can easily allocate new rings and sets of buffers\n",
+  "> while the device is running.  Patches 13 and 15 reshape the\n",
+  "> .ndo_change_mtu() and ethtool's ring-resize operation into\n",
+  "> desired form.\n",
+  "\n",
+  "Looks good, series applied, thanks!\n",
+  "\n",
+  "Add a BPF_F_CURRENT_CPU flag to optimize the use-case where user space has\n",
+  "per-CPU ring buffers and the eBPF program pushes the data into the current\n",
+  "CPU's ring buffer which saves us an extra helper function call in eBPF.\n",
+  "Also, make sure to properly reserve the remaining flags which are not used.\n",
+  "\n",
+  "Signed-off-by: Daniel Borkmann <daniel\@iogearbox.net>\n",
+  "Signed-off-by: Alexei Starovoitov <ast\@kernel.org>\n",
+  "---\n",
+  " include/uapi/linux/bpf.h | 4 ++++\n",
+  " kernel/trace/bpf_trace.c | 7 ++++++-\n",
+  " 2 files changed, 10 insertions(+), 1 deletion(-)\n",
+  "\n",
+  "diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h\n",
+  "index 70eda5a..b7b0fb1 100644\n",
+  "--- a/include/uapi/linux/bpf.h\n",
+  "+++ b/include/uapi/linux/bpf.h\n",
+  "\@\@ -347,6 +347,10 \@\@ enum bpf_func_id {\n",
+  " #define BPF_F_ZERO_CSUM_TX\t\t(1ULL << 1)\n",
+  " #define BPF_F_DONT_FRAGMENT\t\t(1ULL << 2)\n",
+  " \n",
+  "+/* BPF_FUNC_perf_event_output flags. */\n",
+  "+#define BPF_F_INDEX_MASK\t\t0xffffffffULL\n",
+  "+#define BPF_F_CURRENT_CPU\t\tBPF_F_INDEX_MASK\n",
+  "+\n",
+  " /* user accessible mirror of in-kernel sk_buff.\n",
+  "  * new fields can only be added to the end of this structure\n",
+  "  */\n",
+  "diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c\n",
+  "index 6855878..6bfe55c 100644\n",
+  "--- a/kernel/trace/bpf_trace.c\n",
+  "+++ b/kernel/trace/bpf_trace.c\n",
+  "\@\@ -225,11 +225,12 \@\@ static const struct bpf_func_proto bpf_perf_event_read_proto = {\n",
+  " \t.arg2_type\t= ARG_ANYTHING,\n",
+  " };\n",
+  " \n",
+  "-static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)\n",
+  "+static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 flags, u64 r4, u64 size)\n",
+  " {\n",
+  " \tstruct pt_regs *regs = (struct pt_regs *) (long) r1;\n",
+  " \tstruct bpf_map *map = (struct bpf_map *) (long) r2;\n",
+  " \tstruct bpf_array *array = container_of(map, struct bpf_array, map);\n",
+  "+\tu64 index = flags & BPF_F_INDEX_MASK;\n",
+  " \tvoid *data = (void *) (long) r4;\n",
+  " \tstruct perf_sample_data sample_data;\n",
+  " \tstruct perf_event *event;\n",
+  "\@\@ -239,6 +240,10 \@\@ static u64 bpf_perf_event_output(u64 r1, u64 r2, u64 index, u64 r4, u64 size)\n",
+  " \t\t.data = data,\n",
+  " \t};\n",
+  " \n",
+  "+\tif (unlikely(flags & ~(BPF_F_INDEX_MASK)))\n",
+  "+\t\treturn -EINVAL;\n",
+  "+\tif (index == BPF_F_CURRENT_CPU)\n",
+  "+\t\tindex = raw_smp_processor_id();\n",
+  " \tif (unlikely(index >= array->map.max_entries))\n",
+  " \t\treturn -E2BIG;\n",
+  " \n",
+  "-- \n",
+  "1.9.3\n",
+  "\n",
+  "From: Wolfram Sang <wsa+renesas\@sang-engineering.com>\n",
+  "\n",
+  "Looking at the backlogs, I am not the only one who missed that the above\n",
+  "functions do not read u32 from one register, but create a virtual u32\n",
+  "from reading to adjacent u16 registers (which depending on 'bus_shift'\n",
+  "can be up to 8 byte apart). Because this driver supports old hardware\n",
+  "for which we don't have documentation, I first wrongly assumed there was\n",
+  "a variant which had a few u32 registers. Let's give the functions more\n",
+  "descriptive names to make it more obvious what is happening.\n",
+  "\n",
+  "Signed-off-by: Wolfram Sang <wsa+renesas\@sang-engineering.com>\n",
+  "Reviewed-by: Simon Horman <horms+renesas\@verge.net.au>\n",
+  "---\n",
+  " drivers/mmc/host/tmio_mmc.h     |  5 ++---\n",
+  " drivers/mmc/host/tmio_mmc_pio.c | 22 +++++++++++-----------\n",
+  " 2 files changed, 13 insertions(+), 14 deletions(-)\n",
+  "\n",
+  "diff --git a/drivers/mmc/host/tmio_mmc.h b/drivers/mmc/host/tmio_mmc.h\n",
+  "index 439fdad2bad91d..e75e5ca220bc0a 100644\n",
+  "--- a/drivers/mmc/host/tmio_mmc.h\n",
+  "+++ b/drivers/mmc/host/tmio_mmc.h\n",
+  "\@\@ -232,7 +232,7 \@\@ static inline void sd_ctrl_read16_rep(struct tmio_mmc_host *host, int addr,\n",
+  " \treadsw(host->ctl + (addr << host->bus_shift), buf, count);\n",
+  " }\n",
+  " \n",
+  "-static inline u32 sd_ctrl_read32(struct tmio_mmc_host *host, int addr)\n",
+  "+static inline u32 sd_ctrl_read16_and_16_as_32(struct tmio_mmc_host *host, int addr)\n",
+  " {\n",
+  " \treturn readw(host->ctl + (addr << host->bus_shift)) |\n",
+  " \t       readw(host->ctl + ((addr + 2) << host->bus_shift)) << 16;\n",
+  "\@\@ -254,11 +254,10 \@\@ static inline void sd_ctrl_write16_rep(struct tmio_mmc_host *host, int addr,\n",
+  " \twritesw(host->ctl + (addr << host->bus_shift), buf, count);\n",
+  " }\n",
+  " \n",
+  "-static inline void sd_ctrl_write32(struct tmio_mmc_host *host, int addr, u32 val)\n",
+  "+static inline void sd_ctrl_write32_as_16_and_16(struct tmio_mmc_host *host, int addr, u32 val)\n",
+  " {\n",
+  " \twritew(val, host->ctl + (addr << host->bus_shift));\n",
+  " \twritew(val >> 16, host->ctl + ((addr + 2) << host->bus_shift));\n",
+  " }\n",
+  " \n",
+  "-\n",
+  " #endif\n",
+  "diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c\n",
+  "index 15e6f6d5a42337..dad2ebd3dc22b4 100644\n",
+  "--- a/drivers/mmc/host/tmio_mmc_pio.c\n",
+  "+++ b/drivers/mmc/host/tmio_mmc_pio.c\n",
+  "\@\@ -55,18 +55,18 \@\@\n",
+  " void tmio_mmc_enable_mmc_irqs(struct tmio_mmc_host *host, u32 i)\n",
+  " {\n",
+  " \thost->sdcard_irq_mask &= ~(i & TMIO_MASK_IRQ);\n",
+  "-\tsd_ctrl_write32(host, CTL_IRQ_MASK, host->sdcard_irq_mask);\n",
+  "+\tsd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask);\n",
+  " }\n",
+  " \n",
+  " void tmio_mmc_disable_mmc_irqs(struct tmio_mmc_host *host, u32 i)\n",
+  " {\n",
+  " \thost->sdcard_irq_mask |= (i & TMIO_MASK_IRQ);\n",
+  "-\tsd_ctrl_write32(host, CTL_IRQ_MASK, host->sdcard_irq_mask);\n",
+  "+\tsd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask);\n",
+  " }\n",
+  " \n",
+  " static void tmio_mmc_ack_mmc_irqs(struct tmio_mmc_host *host, u32 i)\n",
+  " {\n",
+  "-\tsd_ctrl_write32(host, CTL_STATUS, ~i);\n",
+  "+\tsd_ctrl_write32_as_16_and_16(host, CTL_STATUS, ~i);\n",
+  " }\n",
+  " \n",
+  " static void tmio_mmc_init_sg(struct tmio_mmc_host *host, struct mmc_data *data)\n",
+  "\@\@ -381,7 +381,7 \@\@ static int tmio_mmc_start_command(struct tmio_mmc_host *host, struct mmc_command\n",
+  " \ttmio_mmc_enable_mmc_irqs(host, irq_mask);\n",
+  " \n",
+  " \t/* Fire off the command */\n",
+  "-\tsd_ctrl_write32(host, CTL_ARG_REG, cmd->arg);\n",
+  "+\tsd_ctrl_write32_as_16_and_16(host, CTL_ARG_REG, cmd->arg);\n",
+  " \tsd_ctrl_write16(host, CTL_SD_CMD, c);\n",
+  " \n",
+  " \treturn 0;\n",
+  "\@\@ -536,7 +536,7 \@\@ static void tmio_mmc_data_irq(struct tmio_mmc_host *host)\n",
+  " \t\tgoto out;\n",
+  " \n",
+  " \tif (host->chan_tx && (data->flags & MMC_DATA_WRITE) && !host->force_pio) {\n",
+  "-\t\tu32 status = sd_ctrl_read32(host, CTL_STATUS);\n",
+  "+\t\tu32 status = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);\n",
+  " \t\tbool done = false;\n",
+  " \n",
+  " \t\t/*\n",
+  "\@\@ -591,7 +591,7 \@\@ static void tmio_mmc_cmd_irq(struct tmio_mmc_host *host,\n",
+  " \t */\n",
+  " \n",
+  " \tfor (i = 3, addr = CTL_RESPONSE ; i >= 0 ; i--, addr += 4)\n",
+  "-\t\tcmd->resp[i] = sd_ctrl_read32(host, addr);\n",
+  "+\t\tcmd->resp[i] = sd_ctrl_read16_and_16_as_32(host, addr);\n",
+  " \n",
+  " \tif (cmd->flags &  MMC_RSP_136) {\n",
+  " \t\tcmd->resp[0] = (cmd->resp[0] << 8) | (cmd->resp[1] >> 24);\n",
+  "\@\@ -708,14 +708,14 \@\@ irqreturn_t tmio_mmc_irq(int irq, void *devid)\n",
+  " \tstruct tmio_mmc_host *host = devid;\n",
+  " \tunsigned int ireg, status;\n",
+  " \n",
+  "-\tstatus = sd_ctrl_read32(host, CTL_STATUS);\n",
+  "+\tstatus = sd_ctrl_read16_and_16_as_32(host, CTL_STATUS);\n",
+  " \tireg = status & TMIO_MASK_IRQ & ~host->sdcard_irq_mask;\n",
+  " \n",
+  " \tpr_debug_status(status);\n",
+  " \tpr_debug_status(ireg);\n",
+  " \n",
+  " \t/* Clear the status except the interrupt status */\n",
+  "-\tsd_ctrl_write32(host, CTL_STATUS, TMIO_MASK_IRQ);\n",
+  "+\tsd_ctrl_write32_as_16_and_16(host, CTL_STATUS, TMIO_MASK_IRQ);\n",
+  " \n",
+  " \tif (__tmio_mmc_card_detect_irq(host, ireg, status))\n",
+  " \t\treturn IRQ_HANDLED;\n",
+  "\@\@ -961,7 +961,7 \@\@ static int tmio_mmc_get_ro(struct mmc_host *mmc)\n",
+  " \n",
+  " \tpm_runtime_get_sync(mmc_dev(mmc));\n",
+  " \tret = !((pdata->flags & TMIO_MMC_WRPROTECT_DISABLE) ||\n",
+  "-\t\t(sd_ctrl_read32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));\n",
+  "+\t\t(sd_ctrl_read16_and_16_as_32(host, CTL_STATUS) & TMIO_STAT_WRPROTECT));\n",
+  " \tpm_runtime_mark_last_busy(mmc_dev(mmc));\n",
+  " \tpm_runtime_put_autosuspend(mmc_dev(mmc));\n",
+  " \n",
+  "\@\@ -983,7 +983,7 \@\@ static int tmio_mmc_card_busy(struct mmc_host *mmc)\n",
+  " {\n",
+  " \tstruct tmio_mmc_host *host = mmc_priv(mmc);\n",
+  " \n",
+  "-\treturn !(sd_ctrl_read32(host, CTL_STATUS2) & TMIO_STATUS2_DAT0);\n",
+  "+\treturn !(sd_ctrl_read16_and_16_as_32(host, CTL_STATUS2) & TMIO_STATUS2_DAT0);\n",
+  " }\n",
+  " \n",
+  " static struct mmc_host_ops tmio_mmc_ops = {\n",
+  "\@\@ -1132,7 +1132,7 \@\@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host,\n",
+  " \ttmio_mmc_clk_stop(_host);\n",
+  " \ttmio_mmc_reset(_host);\n",
+  " \n",
+  "-\t_host->sdcard_irq_mask = sd_ctrl_read32(_host, CTL_IRQ_MASK);\n",
+  "+\t_host->sdcard_irq_mask = sd_ctrl_read16_and_16_as_32(_host, CTL_IRQ_MASK);\n",
+  " \ttmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL);\n",
+  " \n",
+  " \t/* Unmask the IRQs we want to know about */\n",
+  "-- \n",
+  "2.7.0\n",
+  "\n",
   "From: Jiri Pirko <jiri\@resnulli.us>\n",
   "Date: Fri, 8 Apr 2016 17:51:55 +0200\n",
   "\n",
@@ -52,7 +431,168 @@
   "\n",
   "> Thanks and sorry, owe you another beer :)\n",
   "\n",
-  ":-)"
+  ":-)\n",
+  "\n",
+  "On Thu, Apr 7, 2016 at 7:32 PM, Alexander Duyck <aduyck\@mirantis.com> wrote:\n",
+  "> This patch adds support for a feature I am calling IP ID mangling.  It is\n",
+  "> basically just another way of saying the IP IDs that are transmitted by the\n",
+  "> tunnel may not match up with what would normally be expected.  Specifically\n",
+  "> what will happen is in the case of TSO the IP IDs on the headers will be a\n",
+  "> fixed value so a given TSO will repeat the same inner IP ID value gso_segs\n",
+  "> number of times.\n",
+  ">\n",
+  "> Signed-off-by: Alexander Duyck <aduyck\@mirantis.com>\n",
+  "\n",
+  "If I'm understanding this correctly, enabling IP ID mangling will help\n",
+  "performance on ixgbe since it will allow it to do GSO partial instead\n",
+  "of plain GSO but it will hurt performance on i40e since it will drop\n",
+  "from TSO to plain GSO.\n",
+  "\n",
+  "Assuming that's right, it seems like it will make it hard to chose the\n",
+  "right setting without knowledge of which hardware is in use. I guess\n",
+  "what we really want is \"I care about nicely incrementing IP IDs\" vs.\n",
+  "\"I don't care as long as the DF bit is set\". That second case is\n",
+  "really what this flag is trying to say but it seems like it is\n",
+  "enforcing too much in the i40e case - I don't think anyone wants to go\n",
+  "out of their way to make IP IDs jump around if incrementing is faster.\n",
+  "\n",
+  "On Friday 19 Feb 2016 11:59:40 Marc Zyngier wrote:\n",
+  "> On 19/02/16 09:18, Linus Walleij wrote:\n",
+  "> > Top-quoting so everyone on the new To:-line gets the context.\n",
+  "> > \n",
+  "> > I definately need an indication from an irqchip maintainer like tglx or\n",
+  "> > Marc Z before I merge this. Also, as in reply to the previous letter,\n",
+  "> > coordinate efforts with Jon Hunters similar problem space.\n",
+  "> \n",
+  "> Seems pretty straightforward to me.\n",
+  ">\n",
+  "> Acked-by: Marc Zyngier <marc.zyngier\@arm.com>\n",
+  "\n",
+  "Too straightforward to be correct :-/\n",
+  "\n",
+  "[    6.232681] BUG: sleeping function called from invalid context at /home/laurent/src/iob/renesas/linux/drivers/base/power/runtime.c:955\n",
+  "[    6.244795] in_atomic(): 1, irqs_disabled(): 128, pid: 658, name: udevd\n",
+  "[    6.251429] CPU: 3 PID: 658 Comm: udevd Tainted: P                4.6.0-rc3 #756\n",
+  "[    6.258844] Hardware name: Generic R8A7790 (Flattened Device Tree)\n",
+  "[    6.265036] Backtrace: \n",
+  "[    6.267535] [<c0014c98>] (dump_backtrace) from [<c0014fb0>] (show_stack+0x20/0x24)\n",
+  "[    6.275124]  r6:00000000 r5:00000000 r4:60000093 r3:00000000\n",
+  "[    6.280850] [<c0014f90>] (show_stack) from [<c01f614c>] (dump_stack+0x8c/0xac)\n",
+  "[    6.288105] [<c01f60c0>] (dump_stack) from [<c00510c8>] (___might_sleep+0x100/0x158)\n",
+  "[    6.295863]  r5:000003bb r4:c06ca340\n",
+  "[    6.299474] [<c0050fc8>] (___might_sleep) from [<c005118c>] (__might_sleep+0x6c/0xa8)\n",
+  "[    6.307317]  r4:c05b6a24\n",
+  "[    6.309880] [<c0051120>] (__might_sleep) from [<c02d971c>] (__pm_runtime_resume+0x98/0xa0)\n",
+  "[    6.318159]  r6:000000dc r5:00000004 r4:ea280010\n",
+  "[    6.322831] [<c02d9684>] (__pm_runtime_resume) from [<c02282c8>] (gpio_rcar_irq_request_resources+0x2c/0x34)\n",
+  "[    6.332674]  r7:00000000 r6:000000dc r5:e95b3c00 r4:e99f3c00\n",
+  "[    6.338397] [<c022829c>] (gpio_rcar_irq_request_resources) from [<c0077a88>] (__setup_irq+0x24c/0x5dc)\n",
+  "[    6.347724] [<c007783c>] (__setup_irq) from [<c0077ff4>] (request_threaded_irq+0xdc/0x180)\n",
+  "[    6.356004]  r10:bf0aabc8 r9:000000dc r8:e9bc3000 r7:c0075be8 r6:e99f3c00 r5:00002003\n",
+  "[    6.363905]  r4:e95b3c00\n",
+  "[    6.366466] [<c0077f18>] (request_threaded_irq) from [<c007a758>] (devm_request_threaded_irq+0x6c/0xac)\n",
+  "[    6.375874]  r10:ea2db810 r9:ea2db810 r8:00000000 r7:bf0aabc8 r6:000000dc r5:e9bc3000\n",
+  "[    6.383773]  r4:e95b3b50 r3:00002003\n",
+  "[    6.387410] [<c007a6ec>] (devm_request_threaded_irq) from [<bf0aab9c>] (mmc_gpiod_request_cd_irq+0xa4/0xd0 [mmc_core])\n",
+  "[    6.398121]  r10:ea2db800 r8:e9bc3000 r7:e9bed598 r6:000000dc r5:e9bed524 r4:e9bc3000\n",
+  "[    6.406065] [<bf0aaaf8>] (mmc_gpiod_request_cd_irq [mmc_core]) from [<bf09f3bc>] (mmc_start_host+0x70/0x90 [mmc_core])\n",
+  "[    6.416779]  r6:e9bc3300 r5:00000000 r4:e9bc3000\n",
+  "[    6.421476] [<bf09f34c>] (mmc_start_host [mmc_core]) from [<bf0a061c>] (mmc_add_host+0x54/0x78 [mmc_core])\n",
+  "[    6.431146]  r4:e9bc3000 r3:00000001\n",
+  "[    6.434782] [<bf0a05c8>] (mmc_add_host [mmc_core]) from [<bf134b3c>] (tmio_mmc_host_probe+0x3ac/0x450 [tmio_mmc_core])\n",
+  "[    6.445498]  r5:ffffffe0 r4:00000000\n",
+  "[    6.449119] [<bf134790>] (tmio_mmc_host_probe [tmio_mmc_core]) from [<bf1501e8>] (sh_mobile_sdhi_probe+0x198/0x414 [sh_mobile_sdhi])\n",
+  "[    6.461051]  r10:bf150d04 r9:e9bed598 r8:00000001 r7:ea2db810 r6:ea2db800 r5:e9bc3300\n",
+  "[    6.468958]  r4:e9bed590\n",
+  "[    6.471532] [<bf150050>] (sh_mobile_sdhi_probe [sh_mobile_sdhi]) from [<c02cf220>] (platform_drv_probe+0x60/0xc0)\n",
+  "[    6.481811]  r10:00000011 r9:00000000 r8:bf151464 r7:bf151464 r6:fffffdfb r5:ea2db810\n",
+  "[    6.489712]  r4:00000000\n",
+  "[    6.492271] [<c02cf1c0>] (platform_drv_probe) from [<c02ccf80>] (driver_probe_device+0x224/0x440)\n",
+  "[    6.501156]  r7:c06c45f8 r6:c08e2b44 r5:c08e2b3c r4:ea2db810\n",
+  "[    6.506878] [<c02ccd5c>] (driver_probe_device) from [<c02cd2a0>] (__driver_attach+0x104/0x128)\n",
+  "[    6.515508]  r10:00000000 r9:bf1514c0 r8:c06c4520 r7:00000000 r6:bf151464 r5:ea2db810\n",
+  "[    6.523411]  r4:ea2db844\n",
+  "[    6.525965] [<c02cd19c>] (__driver_attach) from [<c02cae04>] (bus_for_each_dev+0x64/0x98)\n",
+  "[    6.534156]  r6:c02cd19c r5:bf151464 r4:00000000 r3:00000000\n",
+  "[    6.539874] [<c02cada0>] (bus_for_each_dev) from [<c02cc5e4>] (driver_attach+0x2c/0x30)\n",
+  "[    6.547895]  r6:c06ace08 r5:ea294c80 r4:bf151464\n",
+  "[    6.552561] [<c02cc5b8>] (driver_attach) from [<c02cc264>] (bus_add_driver+0x18c/0x268)\n",
+  "[    6.560586] [<c02cc0d8>] (bus_add_driver) from [<c02cdf90>] (driver_register+0x88/0x104)\n",
+  "[    6.568691]  r8:bf153000 r7:00000001 r6:e9ba7a40 r5:c067cfc8 r4:bf151464\n",
+  "[    6.575464] [<c02cdf08>] (driver_register) from [<c02cef80>] (__platform_driver_register+0x50/0x54)\n",
+  "[    6.584523]  r5:c067cfc8 r4:c067cfc8\n",
+  "[    6.588141] [<c02cef30>] (__platform_driver_register) from [<bf153018>] (sh_mobile_sdhi_driver_init+0x18/0x24 [sh_mobile_sdhi])\n",
+  "[    6.599654] [<bf153000>] (sh_mobile_sdhi_driver_init [sh_mobile_sdhi]) from [<c000a884>] (do_one_initcall+0xc0/0x200)\n",
+  "[    6.610292] [<c000a7c4>] (do_one_initcall) from [<c00ccd28>] (do_init_module+0x70/0x1dc)\n",
+  "[    6.618398]  r10:000005fa r9:bf1514c0 r8:c00a1f28 r7:00000001 r6:e94f3fc0 r5:00000001\n",
+  "[    6.626299]  r4:bf1514c0\n",
+  "[    6.628860] [<c00cccb8>] (do_init_module) from [<c00a5368>] (load_module+0x19c8/0x2164)\n",
+  "[    6.636878]  r7:00000001 r6:e955ec00 r5:00000001 r4:e9b73f3c\n",
+  "[    6.642603] [<c00a39a0>] (load_module) from [<c00a5d38>] (SyS_finit_module+0xb0/0xe0)\n",
+  "[    6.650447]  r10:00000000 r9:e9b72000 r8:b6f75330 r7:00000009 r6:00000000 r5:00000000\n",
+  "[    6.658342]  r4:7fffffff\n",
+  "[    6.660901] [<c00a5c88>] (SyS_finit_module) from [<c0011940>] (ret_fast_syscall+0x0/0x34)\n",
+  "[    6.669093]  r8:c0011ae4 r7:0000017b r6:00000000 r5:00000000 r4:00020000\n",
+  "\n",
+  "The .irq_request_resources() handler is called with a spinlock held, it thus\n",
+  "can't call the synchronous version of the PM runtime functions.\n",
+  "\n",
+  "-- \n",
+  "Regards,\n",
+  "\n",
+  "Laurent Pinchart\n",
+  "\n",
+  "Enables PWM1 (brightness control) and PWM2 (PMIC switching frequency\n",
+  "synchronization).\n",
+  "\n",
+  "Signed-off-by: Ulrich Hecht <ulrich.hecht+renesas\@gmail.com>\n",
+  "Acked-by: Geert Uytterhoeven <geert+renesas\@glider.be>\n",
+  "\n",
+  "---\n",
+  "arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts | 23 ++++++++++++++++++++++\n",
+  " 1 file changed, 23 insertions(+)\n",
+  "\n",
+  "diff --git a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts\n",
+  "index 507d6a4..5525637 100644\n",
+  "--- a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts\n",
+  "+++ b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts\n",
+  "\@\@ -189,6 +189,15 \@\@\n",
+  " \tpinctrl-0 = <&scif_clk_pins>;\n",
+  " \tpinctrl-names = \"default\";\n",
+  " \n",
+  "+\tpwm1_pins: pwm1 {\n",
+  "+\t\trenesas,groups = \"pwm1_a\";\n",
+  "+\t\trenesas,function = \"pwm1\";\n",
+  "+\t};\n",
+  "+\tpwm2_pins: pwm2 {\n",
+  "+\t\trenesas,groups = \"pwm2_a\";\n",
+  "+\t\trenesas,function = \"pwm2\";\n",
+  "+\t};\n",
+  "+\n",
+  " \tscif1_pins: scif1 {\n",
+  " \t\trenesas,groups = \"scif1_data_a\", \"scif1_ctrl\";\n",
+  " \t\trenesas,function = \"scif1\";\n",
+  "\@\@ -299,6 +308,20 \@\@\n",
+  " \t};\n",
+  " };\n",
+  " \n",
+  "+&pwm1 {\n",
+  "+\t/* brightness control */\n",
+  "+\tpinctrl-0 = <&pwm1_pins>;\n",
+  "+\tpinctrl-names = \"default\";\n",
+  "+\tstatus = \"okay\";\n",
+  "+};\n",
+  "+\n",
+  "+&pwm2 {\n",
+  "+\t/* PMIC DC/DC switching frequency synchronization */\n",
+  "+\tpinctrl-0 = <&pwm2_pins>;\n",
+  "+\tpinctrl-names = \"default\";\n",
+  "+\tstatus = \"okay\";\n",
+  "+};\n",
+  "+\n",
+  " &rcar_sound {\n",
+  " \tpinctrl-0 = <&sound_pins &sound_clk_pins>;\n",
+  " \tpinctrl-names = \"default\";"
 ]
 
-b09cc104aa5be96708ec13fd60a7aee4e24978296ac64286aa69348aba724d11
+baebc9adbfce645ede43a2f2e74464c5a7ab6ae1c06d1c0dbe3290d834e1077d

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.