[oe-commits] org.oe.dev linux 2.6.21: add gumstix support

koen commit openembedded-commits at lists.openembedded.org
Tue Aug 21 16:42:51 UTC 2007


linux 2.6.21: add gumstix support

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 46c332d75867264582f9986b58128a4b701b207a
ViewMTN: http://monotone.openembedded.org/revision.psp?id=46c332d75867264582f9986b58128a4b701b207a
Files:
1
packages/linux/linux-2.6.21
packages/linux/linux-2.6.21/gumstix
packages/linux/linux-2.6.21/270-usb-gadget-udc.patch
packages/linux/linux-2.6.21/arch-config.patch
packages/linux/linux-2.6.21/bkpxa-pxa-cpu.patch
packages/linux/linux-2.6.21/bkpxa-pxa-cpufreq.patch
packages/linux/linux-2.6.21/board-init.patch
packages/linux/linux-2.6.21/bugfix-i2c-include.patch
packages/linux/linux-2.6.21/bugfix-mmc-clock.patch
packages/linux/linux-2.6.21/bugfix-pxa-cpufreq.patch
packages/linux/linux-2.6.21/bugfix-serial-interrupt.patch
packages/linux/linux-2.6.21/bugfix-serial-register-status.patch
packages/linux/linux-2.6.21/compact-flash.patch
packages/linux/linux-2.6.21/compile-fix-pxa_cpufreq.patch
packages/linux/linux-2.6.21/cpufreq-better-freqs.patch
packages/linux/linux-2.6.21/cpufreq-fixup.patch
packages/linux/linux-2.6.21/cpufreq-ondemand-by-default.patch
packages/linux/linux-2.6.21/defconfig.patch
packages/linux/linux-2.6.21/disable-uncompress-message.patch
packages/linux/linux-2.6.21/ethernet-config.patch
packages/linux/linux-2.6.21/flash.patch
packages/linux/linux-2.6.21/gumstix/defconfig
packages/linux/linux-2.6.21/gumstix-asoc.patch
packages/linux/linux-2.6.21/gumstix-fb-logo.patch
packages/linux/linux-2.6.21/gumstix-pxa270-usb-host.patch
packages/linux/linux-2.6.21/header.patch
packages/linux/linux-2.6.21/mach-types-fix.patch
packages/linux/linux-2.6.21/misalignment-handling.patch
packages/linux/linux-2.6.21/mmc-card-detect.patch
packages/linux/linux-2.6.21/modular-init-bluetooth.patch
packages/linux/linux-2.6.21/modular-init-smc91x.patch
packages/linux/linux-2.6.21/modular-init-usb-gadget.patch
packages/linux/linux-2.6.21/pcm-gcc-411-bugfix.patch
packages/linux/linux-2.6.21/proc-gpio.patch
packages/linux/linux-2.6.21/pxa-regs-additions.patch
packages/linux/linux-2.6.21/pxa-regs-fixup.patch
packages/linux/linux-2.6.21/pxa2xx_udc.patch
packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch
packages/linux/linux-2.6.21/pxafb-definition.patch
packages/linux/linux-2.6.21/ramfs-mode-support.patch
packages/linux/linux-2.6.21/serial-divisor.patch
packages/linux/linux-2.6.21/serial-ether-addr.patch
packages/linux/linux-2.6.21/smc-ether-addr.patch
packages/linux/linux-2.6.21/uImage-in-own-partition.patch
packages/linux/linux-2.6.21/ucb1400-ac97-audio.patch
packages/linux/linux_2.6.21.bb
Diffs:

#
# mt diff -ra65d192be1ce4202dcc0e3a9bb8d657210921ffe -r46c332d75867264582f9986b58128a4b701b207a
#
# 
# 
# add_dir "packages/linux/linux-2.6.21"
# 
# add_dir "packages/linux/linux-2.6.21/gumstix"
# 
# add_file "packages/linux/linux-2.6.21/270-usb-gadget-udc.patch"
#  content [46d1e25ee8c6b2057ad12fef37ecff405ac5e046]
# 
# add_file "packages/linux/linux-2.6.21/arch-config.patch"
#  content [77e962d186fbf986a7150fcf92fc7e9a2f2e3c6c]
# 
# add_file "packages/linux/linux-2.6.21/bkpxa-pxa-cpu.patch"
#  content [61c42220d83235a7ed992b29a5be2b15f23c0022]
# 
# add_file "packages/linux/linux-2.6.21/bkpxa-pxa-cpufreq.patch"
#  content [189b51b1ebd33e9e49934cc272a151dd27314737]
# 
# add_file "packages/linux/linux-2.6.21/board-init.patch"
#  content [d713b018e314e882ff245ce9fb326a9614bee226]
# 
# add_file "packages/linux/linux-2.6.21/bugfix-i2c-include.patch"
#  content [2cc5db320546c0c376dc4ce82183109232b4a4a7]
# 
# add_file "packages/linux/linux-2.6.21/bugfix-mmc-clock.patch"
#  content [453917381c5760514750f165957c49b478ffc65c]
# 
# add_file "packages/linux/linux-2.6.21/bugfix-pxa-cpufreq.patch"
#  content [7107883474ca1adbd13644873540c034005a19ed]
# 
# add_file "packages/linux/linux-2.6.21/bugfix-serial-interrupt.patch"
#  content [61a140ba63e9d2a85c0a659d7db18f46f661fddd]
# 
# add_file "packages/linux/linux-2.6.21/bugfix-serial-register-status.patch"
#  content [5947e11a809c8053638b1e70b3f5f544fa60af64]
# 
# add_file "packages/linux/linux-2.6.21/compact-flash.patch"
#  content [4097907bb3d341271ccf00ade8a0d937ab2e70d4]
# 
# add_file "packages/linux/linux-2.6.21/compile-fix-pxa_cpufreq.patch"
#  content [922480ad3b67a47f4da75e43d52f036c56074b4e]
# 
# add_file "packages/linux/linux-2.6.21/cpufreq-better-freqs.patch"
#  content [8c8edc8e89041dd1b031e376970c2c3f594b215f]
# 
# add_file "packages/linux/linux-2.6.21/cpufreq-fixup.patch"
#  content [2db68113b34b6973ceae2dfdec52a59c3d1e558a]
# 
# add_file "packages/linux/linux-2.6.21/cpufreq-ondemand-by-default.patch"
#  content [44a99a89c462703ccc42e071e63960a550d025c0]
# 
# add_file "packages/linux/linux-2.6.21/defconfig.patch"
#  content [36b01c2f21608396fe7da5c8aba9aad2810a6939]
# 
# add_file "packages/linux/linux-2.6.21/disable-uncompress-message.patch"
#  content [db4d24d8f7d6449fc24795635b90d0df15c97bc1]
# 
# add_file "packages/linux/linux-2.6.21/ethernet-config.patch"
#  content [0debcec19adacd79ffaab0baea1f8bee70fcb16c]
# 
# add_file "packages/linux/linux-2.6.21/flash.patch"
#  content [028683f763c8358b0f1c076926660440cc783c3d]
# 
# add_file "packages/linux/linux-2.6.21/gumstix/defconfig"
#  content [4172539dc7818fd5645dddbdff3076dbbbda0593]
# 
# add_file "packages/linux/linux-2.6.21/gumstix-asoc.patch"
#  content [672e82d740da0eefc64b737ada85c935d289999c]
# 
# add_file "packages/linux/linux-2.6.21/gumstix-fb-logo.patch"
#  content [a28f1499776f44a83ad92ed1ad935d24910ed98b]
# 
# add_file "packages/linux/linux-2.6.21/gumstix-pxa270-usb-host.patch"
#  content [89cb49be5d3e523794982ddbd2908bf141174bc1]
# 
# add_file "packages/linux/linux-2.6.21/header.patch"
#  content [1a15dda271c62ef51928e06d14a61bd20f7fc32c]
# 
# add_file "packages/linux/linux-2.6.21/mach-types-fix.patch"
#  content [18d504ef0214d52e33d2b8a577e0c2dfb8aa0663]
# 
# add_file "packages/linux/linux-2.6.21/misalignment-handling.patch"
#  content [27f8266aa43f862763f684ed8d6ef944d5883850]
# 
# add_file "packages/linux/linux-2.6.21/mmc-card-detect.patch"
#  content [02f4c903d4cd18a0a7f1f6b3dbbb2268d96d09de]
# 
# add_file "packages/linux/linux-2.6.21/modular-init-bluetooth.patch"
#  content [7121c06e9b7abb1bead874386960934fc97e824b]
# 
# add_file "packages/linux/linux-2.6.21/modular-init-smc91x.patch"
#  content [95c46437bdc083831d12dfbc91ddc43a092fe687]
# 
# add_file "packages/linux/linux-2.6.21/modular-init-usb-gadget.patch"
#  content [e2c91ef570684c54b0ff393820b15d0fcd5812dd]
# 
# add_file "packages/linux/linux-2.6.21/pcm-gcc-411-bugfix.patch"
#  content [8c06dbae7910651bbcd8731d6851454f1c47d459]
# 
# add_file "packages/linux/linux-2.6.21/proc-gpio.patch"
#  content [5e31326fd32827afc39c0edb84d13f4384cf232b]
# 
# add_file "packages/linux/linux-2.6.21/pxa-regs-additions.patch"
#  content [ee3725192f4fc6fcad730b0bbbe7374351e551f9]
# 
# add_file "packages/linux/linux-2.6.21/pxa-regs-fixup.patch"
#  content [c0c412734d4bc015112b1d6eb7b6a56359b772fc]
# 
# add_file "packages/linux/linux-2.6.21/pxa2xx_udc.patch"
#  content [16ea985d508ff9f01b790060b0dd95a8ad2b7969]
# 
# add_file "packages/linux/linux-2.6.21/pxafb-18bpp-mode.patch"
#  content [e2975bb2f4a9275bce85a586e82e13259c28fec6]
# 
# add_file "packages/linux/linux-2.6.21/pxafb-definition.patch"
#  content [e5b26a71fa9b5f9747529b0c2e4511ba69a62863]
# 
# add_file "packages/linux/linux-2.6.21/ramfs-mode-support.patch"
#  content [fbd5e754e2c544fd036504b685f88f3aa963189c]
# 
# add_file "packages/linux/linux-2.6.21/serial-divisor.patch"
#  content [75684ee587587dacdb2a0ccfeeb394be85cdee49]
# 
# add_file "packages/linux/linux-2.6.21/serial-ether-addr.patch"
#  content [e93b779ef26803beb9c01abaf035039df4dfdb11]
# 
# add_file "packages/linux/linux-2.6.21/smc-ether-addr.patch"
#  content [3e7823c1cf361019e3536add7917cb5f60278370]
# 
# add_file "packages/linux/linux-2.6.21/uImage-in-own-partition.patch"
#  content [440fe8c2946d0f307271094a940cdcd50526f92d]
# 
# add_file "packages/linux/linux-2.6.21/ucb1400-ac97-audio.patch"
#  content [07aab28f12b91f580ecb82ec23cb5431185dff7c]
# 
# patch "packages/linux/linux_2.6.21.bb"
#  from [d6e50b673f16999146443b578b809addead0109d]
#    to [654f207ad59b9947a0628500c0ca4779600942c7]
# 
============================================================
--- packages/linux/linux-2.6.21/270-usb-gadget-udc.patch	46d1e25ee8c6b2057ad12fef37ecff405ac5e046
+++ packages/linux/linux-2.6.21/270-usb-gadget-udc.patch	46d1e25ee8c6b2057ad12fef37ecff405ac5e046
@@ -0,0 +1,2739 @@
+Index: linux-2.6.21gum/drivers/usb/gadget/Kconfig
+===================================================================
+--- linux-2.6.21gum.orig/drivers/usb/gadget/Kconfig
++++ linux-2.6.21gum/drivers/usb/gadget/Kconfig
+@@ -129,6 +129,28 @@ config USB_PXA2XX_SMALL
+ 	default y if USB_ETH
+ 	default y if USB_G_SERIAL
+ 
++config USB_GADGET_PXA27X
++        boolean "PXA 27x"
++        depends on ARCH_PXA && PXA27x
++        help
++           Intel's PXA 27x series XScale ARM-5TE processors include
++           an integrated full speed USB 1.1 device controller.  
++
++           Say "y" to link the driver statically, or "m" to build a
++           dynamically linked module called "pxa27x_udc" and force all
++           gadget drivers to also be dynamically linked.
++
++config USB_PXA27X
++        tristate
++        depends on USB_GADGET_PXA27X
++        default USB_GADGET
++        select USB_GADGET_SELECTED
++
++config USB_PXA27X_DMA
++        bool # "Use DMA support"
++        depends on USB_GADGET_PXA27X
++        default n
++
+ config USB_GADGET_GOKU
+ 	boolean "Toshiba TC86C001 'Goku-S'"
+ 	depends on PCI
+Index: linux-2.6.21gum/drivers/usb/gadget/Makefile
+===================================================================
+--- linux-2.6.21gum.orig/drivers/usb/gadget/Makefile
++++ linux-2.6.21gum/drivers/usb/gadget/Makefile
+@@ -7,6 +7,7 @@ obj-$(CONFIG_USB_PXA2XX)	+= pxa2xx_udc.o
+ obj-$(CONFIG_USB_GOKU)		+= goku_udc.o
+ obj-$(CONFIG_USB_OMAP)		+= omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X)	+= lh7a40x_udc.o
++obj-$(CONFIG_USB_PXA27X)	+= pxa27x_udc.o
+ obj-$(CONFIG_USB_AT91)		+= at91_udc.o
+ obj-$(CONFIG_USB_GADGET_GUMSTIX)	+= gumstix_gadget.o
+ 
+Index: linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.c
+===================================================================
+--- /dev/null
++++ linux-2.6.21gum/drivers/usb/gadget/pxa27x_udc.c
+@@ -0,0 +1,2352 @@
++/*
++ * linux/drivers/usb/gadget/pxa27x_udc.c
++ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers
++ *
++ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
++ * Copyright (C) 2003 Robert Schwebel, Pengutronix
++ * Copyright (C) 2003 Benedikt Spranger, Pengutronix
++ * Copyright (C) 2003 David Brownell
++ * Copyright (C) 2003 Joshua Wise
++ * Copyright (C) 2004 Intel Corporation
++ * Copyright (C) 2005 SDG Systems, LLC  (Aric Blumer)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ *
++ */
++
++#undef	DEBUG
++ // #define DEBUG 1
++ //#define	VERBOSE	DBG_VERBOSE
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/types.h>
++#include <linux/version.h>
++#include <linux/errno.h>
++#include <linux/delay.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/proc_fs.h>
++#include <linux/mm.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++#include <linux/irq.h>
++
++#include <asm/byteorder.h>
++#include <asm/dma.h>
++#include <asm/io.h>
++#include <asm/system.h>
++#include <asm/mach-types.h>
++#include <asm/unaligned.h>
++#include <asm/hardware.h>
++#include <asm/mach/irq.h>
++#include <asm/arch/pxa-regs.h>
++
++#include <linux/usb/ch9.h>
++#include <linux/usb_gadget.h>
++
++#include <asm/arch/udc.h>
++
++
++/*
++ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27777777x
++ * series processors.
++ * Such controller drivers work with a gadget driver.  The gadget driver
++ * returns descriptors, implements configuration and data protocols used
++ * by the host to interact with this device, and allocates endpoints to
++ * the different protocol interfaces.  The controller driver virtualizes
++ * usb hardware so that the gadget drivers will be more portable.
++ *
++ * This UDC hardware wants to implement a bit too much USB protocol, so
++ * it constrains the sorts of USB configuration change events that work.
++ * The errata for these chips are misleading; some "fixed" bugs from
++ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there.
++ */
++
++#define	DRIVER_VERSION	"21-Jul-2005"
++#define	DRIVER_DESC	"PXA 27x USB Device Controller driver"
++
++
++static const char driver_name [] = "pxa27x_udc";
++
++static const char ep0name [] = "ep0";
++
++
++#define	USE_DMA
++//#define	DISABLE_TEST_MODE
++
++#ifdef CONFIG_PROC_FS
++#define	UDC_PROC_FILE
++#endif
++
++#include "pxa27x_udc.h"
++
++#if 0
++#ifdef CONFIG_EMBEDDED
++/* few strings, and little code to use them */
++#undef	DEBUG
++#undef	UDC_PROC_FILE
++#endif
++#endif
++
++#ifdef	USE_DMA
++static int use_dma = 1;
++module_param(use_dma, bool, 0);
++MODULE_PARM_DESC (use_dma, "true to use dma");
++
++static void dma_nodesc_handler (int dmach, void *_ep);
++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req);
++
++#define	DMASTR " (dma support)"
++
++#else	/* !USE_DMA */
++#define	DMASTR " (pio only)"
++#endif
++
++#ifdef	CONFIG_USB_PXA27X_SMALL
++#define SIZE_STR	" (small)"
++#else
++#define SIZE_STR	""
++#endif
++
++#ifdef DISABLE_TEST_MODE
++/* (mode == 0) == no undocumented chip tweaks
++ * (mode & 1)  == double buffer bulk IN
++ * (mode & 2)  == double buffer bulk OUT
++ * ... so mode = 3 (or 7, 15, etc) does it for both
++ */
++static ushort fifo_mode = 0;
++module_param(fifo_mode, ushort, 0);
++MODULE_PARM_DESC (fifo_mode, "pxa27x udc fifo mode");
++#endif
++
++#define UDCISR0_IR0	 0x3
++#define UDCISR_INT_MASK	 (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP)
++#define UDCICR_INT_MASK	 UDCISR_INT_MASK
++
++#define UDCCSR_MASK	(UDCCSR_FST | UDCCSR_DME)
++/* ---------------------------------------------------------------------------
++ * 	endpoint related parts of the api to the usb controller hardware,
++ *	used by gadget driver; and the inner talker-to-hardware core.
++ * ---------------------------------------------------------------------------
++ */
++
++static void pxa27x_ep_fifo_flush (struct usb_ep *ep);
++static void nuke (struct pxa27x_ep *, int status);
++
++static void pio_irq_enable(int ep_num)
++{
++        if (ep_num < 16)
++                UDCICR0 |= 3 << (ep_num * 2);
++        else {
++                ep_num -= 16;
++                UDCICR1 |= 3 << (ep_num * 2);
++	}
++}
++
++static void pio_irq_disable(int ep_num)
++{
++        ep_num &= 0xf;
++        if (ep_num < 16)
++                UDCICR0 &= ~(3 << (ep_num * 2));
++        else {
++                ep_num -= 16;
++                UDCICR1 &= ~(3 << (ep_num * 2));
++        }
++}
++
++/* The UDCCR reg contains mask and interrupt status bits,
++ * so using '|=' isn't safe as it may ack an interrupt.
++ */
++#define UDCCR_MASK_BITS         (UDCCR_OEN | UDCCR_UDE)
++
++static inline void udc_set_mask_UDCCR(int mask)
++{
++	UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_clear_mask_UDCCR(int mask)
++{
++	UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_ack_int_UDCCR(int mask)
++{
++	/* udccr contains the bits we dont want to change */
++	__u32 udccr = UDCCR & UDCCR_MASK_BITS;
++
++	UDCCR = udccr | (mask & ~UDCCR_MASK_BITS);
++}
++
++/*
++ * endpoint enable/disable
++ *
++ * we need to verify the descriptors used to enable endpoints.  since pxa27x
++ * endpoint configurations are fixed, and are pretty much always enabled,
++ * there's not a lot to manage here.
++ *
++ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints,
++ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except
++ * for a single interface (with only the default altsetting) and for gadget
++ * drivers that don't halt endpoints (not reset by set_interface).  that also
++ * means that if you use ISO, you must violate the USB spec rule that all
++ * iso endpoints must be in non-default altsettings.
++ */
++static int pxa27x_ep_enable (struct usb_ep *_ep,
++		const struct usb_endpoint_descriptor *desc)
++{
++	struct pxa27x_ep        *ep;
++	struct pxa27x_udc       *dev;
++
++	ep = container_of (_ep, struct pxa27x_ep, ep);
++	if (!_ep || !desc || _ep->name == ep0name
++			|| desc->bDescriptorType != USB_DT_ENDPOINT
++			|| ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) {
++		DMSG("%s, bad ep or descriptor\n", __FUNCTION__);
++		return -EINVAL;
++	}
++
++	/* xfer types must match, except that interrupt ~= bulk */
++	if( ep->ep_type != USB_ENDPOINT_XFER_BULK
++			&& desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
++		DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name);
++		return -EINVAL;
++	}
++
++	/* hardware _could_ do smaller, but driver doesn't */
++	if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK
++				&& le16_to_cpu (desc->wMaxPacketSize)
++						!= BULK_FIFO_SIZE)
++			|| !desc->wMaxPacketSize) {
++		DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name);
++		return -ERANGE;
++	}
++
++	dev = ep->dev;
++	if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) {
++		DMSG("%s, bogus device state\n", __FUNCTION__);
++		return -ESHUTDOWN;
++	}
++
++	ep->desc = desc;
++	ep->dma = -1;
++	ep->stopped = 0;
++	ep->pio_irqs = ep->dma_irqs = 0;
++	ep->ep.maxpacket = le16_to_cpu (desc->wMaxPacketSize);
++
++	/* flush fifo (mostly for OUT buffers) */
++	pxa27x_ep_fifo_flush (_ep);
++
++	/* ... reset halt state too, if we could ... */
++
++#ifdef USE_DMA
++	/* for (some) bulk and ISO endpoints, try to get a DMA channel and
++	 * bind it to the endpoint.  otherwise use PIO.
++	 */
++	DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type);
++	switch (ep->ep_type) {
++	case USB_ENDPOINT_XFER_ISOC:
++		if (le16_to_cpu(desc->wMaxPacketSize) % 32)
++			break;
++		// fall through
++	case USB_ENDPOINT_XFER_BULK:
++		if (!use_dma || !ep->reg_drcmr)
++			break;
++		ep->dma = pxa_request_dma ((char *)_ep->name,
++ 				(le16_to_cpu (desc->wMaxPacketSize) > 64)
++					? DMA_PRIO_MEDIUM /* some iso */
++					: DMA_PRIO_LOW,
++				dma_no%s
>>> DIFF TRUNCATED @ 16K






More information about the Openembedded-commits mailing list