1. 07 Jan, 2014 1 commit
    • Tony Lindgren's avatar
      ARM: dts: Add omap specific pinctrl defines to use padconf addresses · 43a348ea
      Tony Lindgren authored
      As we have one to three pinctrl-single instances for each SoC it is
      a bit confusing to configure the padconf register offset from the
      base of the padconf register base.
      
      Let's add macros that allow using the physical address of the
      padconf register directly, or in most cases, just the last 16-bits
      of the address as they are shown in the documentation.
      
      Note that most documentation shows two padconf registers for each
      32-bit address, so adding 2 to the documentation address is needed for
      the second padconf register as we treat them as 16-bit registers
      for omap3+.
      
      For example, omap36xx documentation shows sdmmc2_clk at 0x48002158,
      so we can just use the last 16-bits of that value:
      
      	pinctrl-single,pins = <
      		OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0)
      		...
      	>;
      
      And we don't need to separately calculate the offset from the 0x2030
      base:
      
      	pinctrl-single,pins = <
      		0x128 (PIN_INPUT_PULLUP | MUX_MODE0)
      		...
      	>;
      
      Naturally both ways of defining the registers can be used, and I'm
      not saying we should replace all the existing defines. But it may
      be handy to use these macros for new entries and when doing other
      related .dts file clean-up.
      Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      [tony@atomide.com: updated for 3430 vs 3630 core2 range]
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      43a348ea
  2. 18 Dec, 2013 1 commit
  3. 08 Dec, 2013 4 commits
    • Tony Lindgren's avatar
      ARM: dts: Add basic devices on am3517-evm · adfe9361
      Tony Lindgren authored
      Let's add the Ethernet so NFSroot works and the first MMC card
      so people can patch in more support easily.
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      adfe9361
    • Tony Lindgren's avatar
      ARM: OMAP2+: Use pdata quirks for emac on am3517 · 71900314
      Tony Lindgren authored
      As the emac uses the system control module registers for
      reset and interrupts, we need to pass those in the platform
      data until we have a separate system control module driver.
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      71900314
    • Tony Lindgren's avatar
      ARM: OMAP2+: Add support for legacy auxdata for twl · dad12d11
      Tony Lindgren authored
      As we currently need to support a mix of legacy platform data and
      device tree intialized data, let's make sure things keep working
      for the TWL GPIOs.
      
      Mostly the issue is caused by the fact that DSS does not yet have
      device tree bindings, so we need to rely on the TWL GPIO callback
      for setting up things like LCD backlight for some boards.
      
      As of_platform_populate() for the TWL GPIO is called by twl-core
      after the I2C bus has been initialized, we cannot pass the auxdata
      table from the board init code to twl-core like we used to with
      just legacy platform data.
      
      So let's use the omap_device bus hook to patch in the platform
      data for TWL GPIO until we have sorted out the issues with the
      TWL GPIOs and device tree bindings.
      
      The other option was be to initialize twl core using legacy
      platform data, which seems like a step backwards as we're moving
      to device tree only initialization.  And we really don't want to
      add custom configuration functions to the TWL GPIO driver either
      for this.
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      dad12d11
    • Tony Lindgren's avatar
  4. 06 Dec, 2013 15 commits
    • Tony Lindgren's avatar
      ARM: dts: Fix booting for secure omaps · f2e2c9d9
      Tony Lindgren authored
      Commit 7ce93f31 (ARM: OMAP2+: Fix more missing data for omap3.dtsi file)
      fixed missing device tree data for omaps, but did not account for some of the
      hardware modules being inaccessible for secure omaps. This causes the
      following error on secure omaps:
      
      Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa0c5048
      SMP ARM
      Modules linked in:
      CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W    3.13.0-rc2+ #446
      task: ce057b40 ti: ce058000 task.ti: ce058000
      PC is at omap_aes_dma_stop+0x24/0x3c
      LR is at omap_aes_probe+0x1cc/0x584
         psr: 60000113
      sp : ce059e20  ip : ce0b4ee0  fp : 00000000
      r10: c0573ae8  r9 : c0749508  r8 : 00000000
      r7 : ce0b4e00  r6 : 00000000  r5 : ce0b4e10  r4 : ce274890
      r3 : fa0c5048  r2 : 00000048  r1 : 0000002c  r0 : ce274890
      Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      Control: 10c5387d  Table: 80004019  DAC: 00000015
      Process swapper/0 (pid: 1, stack limit = 0xce058248)
      Stack: (0xce059e20 to 0xce05a000)
      9e20: c0749508 0000a1ff 00000000 c016cd8c c06b5a06 ce2a45f0 ce2a4570 ce0b5fb0
      9e40: 00000000 480c5000 480c504f c0abe4e4 00000200 00000000 00000000 00000000
      9e60: ce0b4e10 ce0b4e10 c082da3c c082da3c c02b8c70 c077c610 c0749508 00000000
      9e80: 00000000 c02b9e7c c02b9e64 ce0b4e10 00000000 c02b8b20 ce0b4e10 ce0b4e44
      9ea0: c082da3c c02b8cd8 00000000 ce059eb8 c082da3c c02b7408 ce079edc ce0b1a34
      9ec0: c082da3c c082da3c ce2a0280 00000000 c08158d8 c02b8358 c0663405 c0663405
      9ee0: 00000073 c082da3c c079e4e8 c07ab3bc c0844340 c02b9334 00000000 00000006
      9f00: c079e4e8 c0008920 c067f6bf c0ac7c6b 00000000 c0712e28 00000000 00000000
      9f20: c0712e38 ce059f38 00000093 c0ac7c82 00000000 c0058994 00000000 c07130e8
      9f40: c07127b8 00000093 00000006 00000006 00000001 00000006 00000006 c079e4e8
      9f60: c07ab3bc c0844340 00000093 c0749508 c079e4f4 c0749c64 00000006 00000006
      9f80: c0749508 00000000 00000000 c0517e2c 00000000 00000000 00000000 00000000
      9fa0: 00000000 c0517e34 00000000 c000dfb8 00000000 00000000 00000000 00000000
      9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ffffffff ffffffff
      (omap_aes_probe+0x1cc/0x584)
      (platform_drv_probe+0x18/0x48)
      (driver_probe_device+0xb0/0x200)
      (__driver_attach+0x68/0x8c)
      (bus_for_each_dev+0x50/0x88)
      (bus_add_driver+0xcc/0x1c8)
      (driver_register+0x9c/0xe0)
      (do_one_initcall+0x98/0x140)
      (kernel_init_freeable+0x16c/0x23c)
      (kernel_init+0x8/0x100)
      (ret_from_fork+0x14/0x3c)
      Code: e1811002 e5932020 e590300c e0833002 (e593c000)
      
      Let's fix the issue by adding omap34xx-hs.dtsi and omap36xx-hs.dtsi and make
      n900, n9 and n950 to use them. This way we have the aes, sham and timer12
      disabled for secure devices the same way legacy booting does based on the
      omap34xx_gp_hwmod_ocp_ifs and omap36xx_gp_hwmod_ocp_ifs arrays in
      omap_hwmod_3xxx_data.c.
      Reported-by: default avatarSebastian Reichel <sre@debian.org>
      Acked-By: default avatarSebastian Reichel <sre@debian.org>
      Tested-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      f2e2c9d9
    • Nishanth Menon's avatar
      ARM: OMAP2+: Fix the machine entry for am3517 · caef4ee8
      Nishanth Menon authored
      The am3517 is wrongly booting as omap3 which means that the am3517
      specific devices like Ethernet won't work when booted with device
      tree. Now with the new devices defined in am3517.dtsi, let's use
      that instead of the omap3.dtsi, and add a separate machine entry
      for am3517 so am3517-evm can use it.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      [tony@atomide.com: updated comments and fixed build without omap3]
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      caef4ee8
    • Tony Lindgren's avatar
      ARM: dts: Fix missing entries for am3517 · a0158185
      Tony Lindgren authored
      On am3517 there are some extra devices compared to omap3.dtsi that
      we currently have not defined. Let's fix that by adding am3517.dtsi
      file.
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      a0158185
    • Tony Lindgren's avatar
      ARM: OMAP2+: Fix overwriting hwmod data with data from device tree · 5e863c56
      Tony Lindgren authored
      We have some device tree properties where the ti,hwmod have multiple
      values:
      
      am33xx.dtsi:	ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
      am4372.dtsi:	ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
      dra7.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2";
      omap3.dtsi:	ti,hwmods = "mcbsp2", "mcbsp2_sidetone";
      omap3.dtsi:	ti,hwmods = "mcbsp3", "mcbsp3_sidetone";
      omap4.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
      omap5.dtsi:	ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
      
      That's not correct way of doing things in this case because these are
      separate devices with their own address space, interrupts, SYSCONFIG
      registers and can set their PM states independently.
      
      So they should all be fixed up to be separate devices in the .dts files.
      
      We also have the related data removed for at least omap4 in commit
      3b9b1015 (ARM: OMAP4: hwmod data: Clean up the data file), so
      that data is wrongly initialized as null data.
      
      So we need to fix two bugs:
      
      1. We are only checking the first entry of the ti,hwmods property
      
         This means that we're only initializing the first hwmods entry
         instead of the ones listed in the ti,hwmods property.
      
      2. We are only checking the child nodes, not the nodes themselves
      
         This means that anything listed at OCP level is currently just
         ignored and unitialized and at least the omap4 case, with the
         legacy data missing from the hwmod.
      
      Fix both of the issues by using an index to the ti,hwmods property
      and changing the hwmod lookup function to also check the current node
      for ti,hwmods property instead of just the children.
      
      While at it, let's also add some warnings for the bad data so it's
      easier to fix.
      
      Cc: "Benoît Cousson" <bcousson@baylibre.com>
      Acked-by: default avatarPaul Walmsley <paul@pwsan.com>
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      5e863c56
    • Linus Torvalds's avatar
      Linux 3.13-rc3 · 374b1057
      Linus Torvalds authored
      374b1057
    • Linus Torvalds's avatar
      Merge tag 'trace-fixes-3.13-rc2' of... · 843f4f4b
      Linus Torvalds authored
      Merge tag 'trace-fixes-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
      
      Pull tracing fix from Steven Rostedt:
       "A regression showed up that there's a large delay when enabling all
        events.  This was prevalent when FTRACE_SELFTEST was enabled which
        enables all events several times, and caused the system bootup to
        pause for over a minute.
      
        This was tracked down to an addition of a synchronize_sched()
        performed when system call tracepoints are unregistered.
      
        The synchronize_sched() is needed between the unregistering of the
        system call tracepoint and a deletion of a tracing instance buffer.
        But placing the synchronize_sched() in the unreg of *every* system
        call tracepoint is a bit overboard.  A single synchronize_sched()
        before the deletion of the instance is sufficient"
      
      * tag 'trace-fixes-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
        tracing: Only run synchronize_sched() at instance deletion time
      843f4f4b
    • Linus Torvalds's avatar
      Merge git://git.kvack.org/~bcrl/aio-next · c537aba0
      Linus Torvalds authored
      Pull aio fix from Benjamin LaHaise:
       "AIO fix from Gu Zheng that fixes a GPF that Dave Jones uncovered with
        trinity"
      
      * git://git.kvack.org/~bcrl/aio-next:
        aio: clean up aio ring in the fail path
      c537aba0
    • Linus Torvalds's avatar
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · 7adfff58
      Linus Torvalds authored
      Pull SCSI fixes from James Bottomley:
       "This is a set of nine fixes (and one author update).
      
        The libsas one should fix discovery in eSATA devices, the WRITE_SAME
        one is the largest, but it should fix a lot of problems we've been
        getting with the emulated RAID devices (they've been effectively lying
        about support and then firmware has been choking on the commands).
      
        The rest are various crash, hang or warn driver fixes"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        [SCSI] bfa: Fix crash when symb name set for offline vport
        [SCSI] enclosure: fix WARN_ON in dual path device removing
        [SCSI] pm80xx: Tasklets synchronization fix.
        [SCSI] pm80xx: Resetting the phy state.
        [SCSI] pm80xx: Fix for direct attached device.
        [SCSI] pm80xx: Module author addition
        [SCSI] hpsa: return 0 from driver probe function on success, not 1
        [SCSI] hpsa: do not discard scsi status on aborted commands
        [SCSI] Disable WRITE SAME for RAID and virtual host adapter drivers
        [SCSI] libsas: fix usage of ata_tf_to_fis
      7adfff58
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security · 470abdcf
      Linus Torvalds authored
      Pull IMA fixes from James Morris:
       "Here are two more fixes for IMA"
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
        ima: properly free ima_template_entry structures
        ima: Do not free 'entry' before it is initialized
      470abdcf
    • Linus Torvalds's avatar
      Merge tag 'dt-fixes-for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux · 24cb4120
      Linus Torvalds authored
      Pull devicetree fixes from Rob Herring:
       - Various DT binding documentation updates
       - Add Kumar Gala and remove Stephen Warren as DT binding maintainers
      
      * tag 'dt-fixes-for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
        dt: binding: reword PowerPC 8xxx GPIO documentation
        ARM: tegra: delete nvidia,tegra20-spi.txt binding
        hwmon: ntc_thermistor: Fix typo (pullup-uV -> pullup-uv)
        of: add vendor prefix for GMT
        clk: exynos: Fix typos in DT bindings documentation
        of: Add vendor prefix for LG Corporation
        Documentation: net: fsl-fec.txt: Add phy-supply entry
        ARM: dts: doc: Document missing binding for omap5-mpu
        dt-bindings: add ARMv8 PMU binding
        MAINTAINERS: remove swarren from DT bindings
        MAINTAINERS: Add Kumar to Device Tree Binding maintainers group
      24cb4120
    • Gu Zheng's avatar
      aio: clean up aio ring in the fail path · d1b94327
      Gu Zheng authored
      Clean up the aio ring file in the fail path of aio_setup_ring
      and ioctx_alloc. And maybe it can fix the GPF issue reported by
      Dave Jones:
      https://lkml.org/lkml/2013/11/25/898Signed-off-by: default avatarGu Zheng <guz.fnst@cn.fujitsu.com>
      Signed-off-by: default avatarBenjamin LaHaise <bcrl@kvack.org>
      d1b94327
    • James Morris's avatar
      Merge branch 'free-memory' of... · bfb26328
      James Morris authored
      Merge branch 'free-memory' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity into for-linus
      bfb26328
    • Linus Torvalds's avatar
      Merge tag 'pm-3.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 002acf1f
      Linus Torvalds authored
      Pull power management fixes from Rafael Wysocki:
      
       - cpufreq regression fix from Bjørn Mork restoring the pre-3.12
         behavior of the framework during system suspend/hibernation to avoid
         garbage sysfs files from being left behind in case of a suspend error
      
       - PNP regression fix to restore the correct states of devices after
         resume from hibernation broken in 3.12.  From Dmitry Torokhov.
      
       - cpuidle fix to prevent cpuidle device unregistration from crashing
         due to a NULL pointer dereference if cpuidle has been disabled from
         the kernel command line.  From Konrad Rzeszutek Wilk.
      
       - intel_idle fix for the C6 state definition on Intel Avoton/Rangeley
         processors from Arne Bockholdt.
      
       - Power capping framework fix to make the energy_uj sysfs attribute
         work in accordance with the documentation.  From Srinivas Pandruvada.
      
       - epoll fix to make it ignore the EPOLLWAKEUP flag if the kernel has
         been compiled with CONFIG_PM_SLEEP unset (in which case that flag
         should not have any effect).  From Amit Pundir.
      
       - cpufreq fix to prevent governor sysfs files from being lost over
         system suspend/resume in some (arguably unusual) situations.  From
         Viresh Kumar.
      
      * tag 'pm-3.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        PowerCap: Fix mode for energy counter
        PNP: fix restoring devices after hibernation
        cpuidle: Check for dev before deregistering it.
        epoll: drop EPOLLWAKEUP if PM_SLEEP is disabled
        cpufreq: fix garbage kobjects on errors during suspend/resume
        cpufreq: suspend governors on system suspend/hibernate
        intel_idle: Fixed C6 state on Avoton/Rangeley processors
      002acf1f
    • Rafael J. Wysocki's avatar
      Merge branches 'pm-epoll', 'pnp' and 'powercap' · 8e703009
      Rafael J. Wysocki authored
      * pm-epoll:
        epoll: drop EPOLLWAKEUP if PM_SLEEP is disabled
      
      * pnp:
        PNP: fix restoring devices after hibernation
      
      * powercap:
        PowerCap: Fix mode for energy counter
      8e703009
    • Rafael J. Wysocki's avatar
      Merge branches 'pm-cpuidle' and 'pm-cpufreq' · 7cdcec99
      Rafael J. Wysocki authored
      * pm-cpuidle:
        cpuidle: Check for dev before deregistering it.
        intel_idle: Fixed C6 state on Avoton/Rangeley processors
      
      * pm-cpufreq:
        cpufreq: fix garbage kobjects on errors during suspend/resume
        cpufreq: suspend governors on system suspend/hibernate
      7cdcec99
  5. 05 Dec, 2013 14 commits
  6. 04 Dec, 2013 5 commits
    • H. Peter Anvin's avatar
      x86, bitops: Correct the assembly constraints to testing bitops · e0f6dec3
      H. Peter Anvin authored
      In checkin:
      
      0c44c2d0 x86: Use asm goto to implement better modify_and_test() functions
      
      the various functions which do modify and test were unified and
      optimized using "asm goto".  However, this change missed the detail
      that the bitops require an "Ir" constraint rather than an "er"
      constraint ("I" = integer constant from 0-31, "e" = signed 32-bit
      integer constant).  This would cause code to miscompile if these
      functions were used on constant bit positions 32-255 and the build to
      fail if used on constant bit positions above 255.
      
      Add the constraints as a parameter to the GEN_BINARY_RMWcc() macro to
      avoid this problem.
      Reported-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/529E8719.4070202@zytor.com
      e0f6dec3
    • Helge Deller's avatar
      nfs: fix do_div() warning by instead using sector_div() · 3873d064
      Helge Deller authored
      When compiling a 32bit kernel with CONFIG_LBDAF=n the compiler complains like
      shown below.  Fix this warning by instead using sector_div() which is provided
      by the kernel.h header file.
      
      fs/nfs/blocklayout/extents.c: In function ‘normalize’:
      include/asm-generic/div64.h:43:28: warning: comparison of distinct pointer types lacks a cast [enabled by default]
      fs/nfs/blocklayout/extents.c:47:13: note: in expansion of macro ‘do_div’
      nfs/blocklayout/extents.c:47:2: warning: right shift count >= width of type [enabled by default]
      fs/nfs/blocklayout/extents.c:47:2: warning: passing argument 1 of ‘__div64_32’ from incompatible pointer type [enabled by default]
      include/asm-generic/div64.h:35:17: note: expected ‘uint64_t *’ but argument is of type ‘sector_t *’
       extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      3873d064
    • Trond Myklebust's avatar
    • Trond Myklebust's avatar
      NFSv4.1: Prevent a 3-way deadlock between layoutreturn, open and state recovery · f22e5edd
      Trond Myklebust authored
      Andy Adamson reports:
      
      The state manager is recovering expired state and recovery OPENs are being
      processed. If kswapd is pruning inodes at the same time, a deadlock can occur
      when kswapd calls evict_inode on an NFSv4.1 inode with a layout, and the
      resultant layoutreturn gets an error that the state mangager is to handle,
      causing the layoutreturn to wait on the (NFS client) cl_rpcwaitq.
      
      At the same time an open is waiting for the inode deletion to complete in
      __wait_on_freeing_inode.
      
      If the open is either the open called by the state manager, or an open from
      the same open owner that is holding the NFSv4 sequence id which causes the
      OPEN from the state manager to wait for the sequence id on the Seqid_waitqueue,
      then the state is deadlocked with kswapd.
      
      The fix is simply to have layoutreturn ignore all errors except NFS4ERR_DELAY.
      We already know that layouts are dropped on all server reboots, and that
      it has to be coded to deal with the "forgetful client model" that doesn't
      send layoutreturns.
      Reported-by: default avatarAndy Adamson <andros@netapp.com>
      Link: http://lkml.kernel.org/r/1385402270-14284-1-git-send-email-andros@netapp.comSigned-off-by: default avatarTrond Myklebust <Trond.Myklebust@primarydata.com>
      f22e5edd
    • Linus Torvalds's avatar
      Merge tag 'gpio-v3.13-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio · 8ecffd79
      Linus Torvalds authored
      Pull GPIO fixes from Linus Walleij:
       "Here are a few more GPIO patches, we're a bit noisy for being the GPIO
        subsystem, mostly due to the new descriptor API, but all is getting
        into shape.
      
         - Fix compile warnings
      
         - Fix overly talkative diagnostic messages from usual use cases wrt
           GPIO descriptors
      
         - Add a documentation 00-INDEX
      
         - Use platform GPIOs as fallback when ACPI or device tree is used as
           the primary means to get GPIO lines
      
         - A bug fix for the MPC8572/MPC8536 fixing erroneous input data"
      
      * tag 'gpio-v3.13-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
        gpiolib: change a warning to debug message when failing to get gpio
        powerpc/gpio: Fix the wrong GPIO input data on MPC8572/MPC8536
        gpiolib: use platform GPIO mappings as fallback
        Documentation: gpiolib: add 00-INDEX file
        gpiolib: fix lookup of platform-mapped GPIOs
        gpiolib: add missing declarations
      8ecffd79