[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