ixp4xx: fix the i2c pld driver for 2.6.37 - i2c uses a rt_mutex instead of a mutex now
[openwrt.git] / target / linux / ubicom32 / patches-2.6.30 / 100-ubicom32_support.patch
1 --- a/drivers/char/hw_random/Kconfig
2 +++ b/drivers/char/hw_random/Kconfig
3 @@ -148,3 +148,16 @@ config HW_RANDOM_VIRTIO
4  
5           To compile this driver as a module, choose M here: the
6           module will be called virtio-rng.  If unsure, say N.
7 +
8 +config HW_RANDOM_UBICOM32
9 +       tristate "Ubicom32 HW Random Number Generator support"
10 +       depends on HW_RANDOM && UBICOM32
11 +       default HW_RANDOM
12 +       ---help---
13 +         This driver provides kernel-side support for the Random Number
14 +         Generator hardware found on Ubicom32 processors.
15 +
16 +         To compile this driver as a module, choose M here: the
17 +         module will be called pasemi-rng.
18 +
19 +         If unsure, say Y.
20 --- a/drivers/char/hw_random/Makefile
21 +++ b/drivers/char/hw_random/Makefile
22 @@ -15,3 +15,4 @@ obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx
23  obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o
24  obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o
25  obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o
26 +obj-$(CONFIG_HW_RANDOM_UBICOM32) += ubicom32-rng.o
27 --- a/drivers/crypto/Kconfig
28 +++ b/drivers/crypto/Kconfig
29 @@ -61,6 +61,40 @@ config CRYPTO_DEV_GEODE
30           To compile this driver as a module, choose M here: the module
31           will be called geode-aes.
32  
33 +config CRYPTO_UBICOM32
34 +        bool "Ubicom32 Security Module"
35 +        depends on UBICOM32
36 +        help
37 +          This is the ubicom32 hardware acceleration common code.
38 +
39 +config CRYPTO_AES_UBICOM32
40 +        tristate "Ubicom32 AES implementation"
41 +        depends on CRYPTO_UBICOM32
42 +        select CRYPTO_ALGAPI
43 +        help
44 +          This is the ubicom32 hardware AES implementation.
45 +
46 +config CRYPTO_DES_UBICOM32
47 +        tristate "Ubicom32 DES implementation"
48 +        depends on CRYPTO_UBICOM32
49 +        select CRYPTO_ALGAPI
50 +        help
51 +          This is the ubicom32 hardware DES and 3DES implementation.
52 +
53 +config CRYPTO_SHA1_UBICOM32
54 +        tristate "Ubicom32 SHA1 implementation"
55 +        depends on CRYPTO_UBICOM32
56 +        select CRYPTO_ALGAPI
57 +        help
58 +          This is the ubicom32 hardware SHA1 implementation.
59 +
60 +config CRYPTO_MD5_UBICOM32
61 +        tristate "Ubicom32 MD5 implementation"
62 +        depends on CRYPTO_UBICOM32
63 +        select CRYPTO_ALGAPI
64 +        help
65 +          This is the ubicom32 hardware MD5 implementation.
66 +
67  config ZCRYPT
68         tristate "Support for PCI-attached cryptographic adapters"
69         depends on S390
70 --- a/drivers/mmc/host/Kconfig
71 +++ b/drivers/mmc/host/Kconfig
72 @@ -266,3 +266,10 @@ config GPIOMMC_CONFIGFS
73         help
74           This option automatically enables configfs support for gpiommc
75           if configfs is available.
76 +
77 +config MMC_UBICOM32
78 +       tristate "Ubicom32 MMC/SD host controller"
79 +       depends on UBICOM32
80 +       help
81 +         This provides support for the SD/MMC hardware found on Ubicom32
82 +         IP7K processors
83 --- a/drivers/mmc/host/Makefile
84 +++ b/drivers/mmc/host/Makefile
85 @@ -30,4 +30,5 @@ obj-$(CONFIG_MMC_S3C)         += s3cmci.o
86  obj-$(CONFIG_MMC_SDRICOH_CS)   += sdricoh_cs.o
87  obj-$(CONFIG_MMC_TMIO)         += tmio_mmc.o
88  obj-$(CONFIG_GPIOMMC)          += gpiommc.o
89 +obj-$(CONFIG_MMC_UBICOM32)     += ubicom32sd.o
90  
91 --- a/drivers/mtd/devices/Kconfig
92 +++ b/drivers/mtd/devices/Kconfig
93 @@ -104,6 +104,31 @@ config M25PXX_USE_FAST_READ
94         help
95           This option enables FAST_READ access supported by ST M25Pxx.
96  
97 +config MTD_UBI32_NAND_SPI_ER
98 +       tristate "UBI32_NAND SPI-ER support"
99 +       help
100 +         This driver supports the Micron MT29F1G01 SPI-ER NAND flash chip
101 +         using the built in flash controller on the Ubicom32 architecture.
102 +         Partial page writes are not supported by this driver.
103 +
104 +config MTD_NAND_SPI_ER
105 +       tristate "NAND SPI-ER support"
106 +       help
107 +         This driver supports the Micron MT29F1G01 SPI-ER NAND flash chip
108 +         using a generic SPI bus.  Partial page writes are supported
109 +         by this driver.
110 +
111 +config MTD_UBI32_M25P80
112 +       tristate "Ubicom processor support for most SPI Flash chips (AT26DF, M25P, W25X, ...)"
113 +       depends on UBICOM32
114 +       default y
115 +       help
116 +         This enables access to most modern SPI flash chips, used for
117 +         program and data storage.   Series supported include Atmel AT26DF,
118 +         Spansion S25SL, SST 25VF, ST M25P, and Winbond W25X.  Other chips
119 +         are supported as well.  See the driver source for the current list,
120 +         or to add other chips.
121 +
122  config MTD_SLRAM
123         tristate "Uncached system RAM"
124         help
125 --- a/drivers/mtd/devices/Makefile
126 +++ b/drivers/mtd/devices/Makefile
127 @@ -16,3 +16,6 @@ obj-$(CONFIG_MTD_LART)                += lart.o
128  obj-$(CONFIG_MTD_BLOCK2MTD)    += block2mtd.o
129  obj-$(CONFIG_MTD_DATAFLASH)    += mtd_dataflash.o
130  obj-$(CONFIG_MTD_M25P80)       += m25p80.o
131 +obj-$(CONFIG_MTD_UBI32_M25P80) += ubi32-m25p80.o
132 +obj-$(CONFIG_MTD_NAND_SPI_ER)  += nand-spi-er.o
133 +obj-$(CONFIG_MTD_UBI32_NAND_SPI_ER)    += ubi32-nand-spi-er.o
134 --- a/drivers/net/Kconfig
135 +++ b/drivers/net/Kconfig
136 @@ -2540,6 +2540,19 @@ config JME
137           To compile this driver as a module, choose M here. The module
138           will be called jme.
139  
140 +config UBICOM32_GMAC
141 +       tristate "Ubicom Gigabit Ethernet support"
142 +       depends on UBICOM32
143 +       help
144 +         Gigabit Ethernet support for ubicom32 processors
145 +
146 +config UBICOM32_OCM_FOR_SKB
147 +        bool  "USE OCM for SKB (EXPERIMENTAL)"
148 +        depends on UBICOM32_GMAC
149 +       default n
150 +        help
151 +          Allocate skb from OCM for Ethernet Receive when possible
152 +
153  endif # NETDEV_1000
154  
155  #
156 --- a/drivers/net/Makefile
157 +++ b/drivers/net/Makefile
158 @@ -272,3 +272,5 @@ obj-$(CONFIG_VIRTIO_NET) += virtio_net.o
159  obj-$(CONFIG_SFC) += sfc/
160  
161  obj-$(CONFIG_WIMAX) += wimax/
162 +
163 +obj-$(CONFIG_UBICOM32_GMAC) += ubi32-eth.o
164 --- a/drivers/net/usb/asix.c
165 +++ b/drivers/net/usb/asix.c
166 @@ -319,14 +319,33 @@ static int asix_rx_fixup(struct usbnet *
167                 /* get the packet length */
168                 size = (u16) (header & 0x0000ffff);
169  
170 -               if ((skb->len) - ((size + 1) & 0xfffe) == 0)
171 +               if ((skb->len) - ((size + 1) & 0xfffe) == 0) {
172 +#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS
173 +                       if (((u32)packet & 0x02) == 0) {
174 +                               memmove(packet - 2, packet, size);
175 +                               skb->data -= 2;
176 +                               skb->tail -= 2;
177 +                       }
178 +#endif
179                         return 2;
180 +               }
181 +
182                 if (size > ETH_FRAME_LEN) {
183                         deverr(dev,"asix_rx_fixup() Bad RX Length %d", size);
184                         return 0;
185                 }
186                 ax_skb = skb_clone(skb, GFP_ATOMIC);
187                 if (ax_skb) {
188 +#ifndef HAVE_EFFICIENT_UNALIGNED_ACCESS
189 +                       if (((u32)packet & 0x02) == 0) {
190 +                               memmove(packet - 2, packet, size);
191 +                               ax_skb->data = packet - 2;
192 +                       } else {
193 +                               ax_skb->data = packet;
194 +                       }
195 +#else
196 +                       ax_skb->data = packet;
197 +#endif
198                         ax_skb->len = size;
199                         ax_skb->data = packet;
200                         skb_set_tail_pointer(ax_skb, size);
201 @@ -1125,13 +1144,19 @@ static int ax88178_link_reset(struct usb
202         mode = AX88178_MEDIUM_DEFAULT;
203  
204         if (ecmd.speed == SPEED_1000)
205 +#ifdef HAVE_EFFICIENT_UNALIGNED_ACCESS
206                 mode |= AX_MEDIUM_GM;
207 +#else
208 +               mode |= AX_MEDIUM_GM | AX_MEDIUM_ENCK;
209 +#endif
210         else if (ecmd.speed == SPEED_100)
211                 mode |= AX_MEDIUM_PS;
212         else
213                 mode &= ~(AX_MEDIUM_PS | AX_MEDIUM_GM);
214  
215 +#ifdef HAVE_EFFICIENT_UNALIGNED_ACCESS
216         mode |= AX_MEDIUM_ENCK;
217 +#endif
218  
219         if (ecmd.duplex == DUPLEX_FULL)
220                 mode |= AX_MEDIUM_FD;
221 --- a/drivers/oprofile/cpu_buffer.c
222 +++ b/drivers/oprofile/cpu_buffer.c
223 @@ -328,10 +328,10 @@ static inline void oprofile_end_trace(st
224  }
225  
226  static inline void
227 -__oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,
228 -                         unsigned long event, int is_kernel)
229 +__oprofile_add_ext_sample_cpu(unsigned long pc, struct pt_regs * const regs,
230 +                             unsigned long event, int is_kernel, int cpu)
231  {
232 -       struct oprofile_cpu_buffer *cpu_buf = &__get_cpu_var(cpu_buffer);
233 +       struct oprofile_cpu_buffer *cpu_buf = &per_cpu(cpu_buffer, cpu);
234         unsigned long backtrace = oprofile_backtrace_depth;
235  
236         /*
237 @@ -353,7 +353,8 @@ __oprofile_add_ext_sample(unsigned long 
238  void oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,
239                              unsigned long event, int is_kernel)
240  {
241 -       __oprofile_add_ext_sample(pc, regs, event, is_kernel);
242 +       __oprofile_add_ext_sample_cpu(pc, regs, event,
243 +                                     is_kernel, smp_processor_id());
244  }
245  
246  void oprofile_add_sample(struct pt_regs * const regs, unsigned long event)
247 @@ -361,7 +362,8 @@ void oprofile_add_sample(struct pt_regs 
248         int is_kernel = !user_mode(regs);
249         unsigned long pc = profile_pc(regs);
250  
251 -       __oprofile_add_ext_sample(pc, regs, event, is_kernel);
252 +       __oprofile_add_ext_sample_cpu(pc, regs, event,
253 +                                     is_kernel, smp_processor_id());
254  }
255  
256  /*
257 --- a/drivers/pci/Makefile
258 +++ b/drivers/pci/Makefile
259 @@ -44,8 +44,8 @@ obj-$(CONFIG_PPC) += setup-bus.o
260  obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
261  obj-$(CONFIG_X86_VISWS) += setup-irq.o
262  obj-$(CONFIG_MN10300) += setup-bus.o
263 +obj-$(CONFIG_UBICOM32) += setup-bus.o setup-irq.o
264  
265 -#
266  # ACPI Related PCI FW Functions
267  #
268  obj-$(CONFIG_ACPI)    += pci-acpi.o
269 --- a/drivers/serial/Kconfig
270 +++ b/drivers/serial/Kconfig
271 @@ -871,6 +871,57 @@ config SERIAL_UARTLITE_CONSOLE
272           console (the system console is the device which receives all kernel
273           messages and warnings and which allows logins in single user mode).
274  
275 +config SERIAL_UBI32_UARTTIO
276 +        tristate "Ubicom UARTTIO support"
277 +        depends on UBICOM32=y
278 +        select SERIAL_CORE
279 +       default y
280 +        help
281 +          Add support for the Ubicom virtual peripherial serial interface.
282 +
283 +config SERIAL_UBI32_UARTTIO_NR_UARTS
284 +       int "Maximum number of UARTTIO virtual serial ports"
285 +       depends on SERIAL_UBI32_UARTTIO
286 +       default "4"
287 +       help
288 +         Set this to the maximum number of serial ports you want the driver to support.
289 +
290 +config SERIAL_UBI32_UARTTIO_CONSOLE
291 +        tristate "Ubicom UARTTIO console support"
292 +        depends on SERIAL_UBI32_UARTTIO=y
293 +        select SERIAL_CORE_CONSOLE
294 +       default y
295 +        help
296 +          Add support for console on the Ubicom virtual peripherial serial interface.
297 +
298 +config SERIAL_UBI32_SERDES
299 +        bool "Ubicom serial port support"
300 +        depends on UBICOM32=y
301 +        select SERIAL_CORE
302 +       default y
303 +        help
304 +          Add support for the Ubicom serial interface.
305 +
306 +config SERIAL_UBI32_SERDES_CONSOLE
307 +        bool "Ubicom serial console support"
308 +        depends on SERIAL_UBI32_SERDES=y
309 +        select SERIAL_CORE_CONSOLE
310 +       default y
311 +
312 +config SERIAL_UBI32_MAILBOX
313 +        bool "Ubicom mailbox support"
314 +        depends on UBICOM32=y
315 +        select SERIAL_CORE
316 +       default n
317 +        help
318 +          Add support for the Ubicom mailbox interface.
319 +
320 +config SERIAL_UBI32_MAILBOX_CONSOLE
321 +        bool "Ubicom mailbox console support"
322 +        depends on SERIAL_UBI32_MAILBOX=y
323 +        select SERIAL_CORE_CONSOLE
324 +       default y
325 +
326  config SERIAL_SUNCORE
327         bool
328         depends on SPARC
329 --- a/drivers/serial/Makefile
330 +++ b/drivers/serial/Makefile
331 @@ -77,3 +77,6 @@ obj-$(CONFIG_SERIAL_OF_PLATFORM_NWPSERIA
332  obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o
333  obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
334  obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
335 +obj-$(CONFIG_SERIAL_UBI32_SERDES) += ubi32_serdes.o
336 +obj-$(CONFIG_SERIAL_UBI32_UARTTIO) += ubi32_uarttio.o
337 +obj-$(CONFIG_SERIAL_UBI32_MAILBOX) += ubi32_mailbox.o
338 --- a/drivers/spi/Kconfig
339 +++ b/drivers/spi/Kconfig
340 @@ -196,6 +196,15 @@ config SPI_S3C24XX
341         help
342           SPI driver for Samsung S3C24XX series ARM SoCs
343  
344 +config SPI_UBICOM32_GPIO
345 +       tristate "Ubicom32 SPI over GPIO"
346 +       depends on SPI_MASTER && UBICOM32 && EXPERIMENTAL
347 +       select SPI_BITBANG
348 +       select HAS_DMA
349 +       help
350 +         SPI driver for the Ubicom32 architecture using
351 +         GPIO lines to provide the SPI bus.
352 +
353  config SPI_S3C24XX_GPIO
354         tristate "Samsung S3C24XX series SPI by GPIO"
355         depends on ARCH_S3C2410 && EXPERIMENTAL
356 --- a/drivers/spi/Makefile
357 +++ b/drivers/spi/Makefile
358 @@ -27,6 +27,7 @@ obj-$(CONFIG_SPI_ORION)                       += orion_spi.o
359  obj-$(CONFIG_SPI_MPC52xx_PSC)          += mpc52xx_psc_spi.o
360  obj-$(CONFIG_SPI_MPC83xx)              += spi_mpc83xx.o
361  obj-$(CONFIG_SPI_S3C24XX_GPIO)         += spi_s3c24xx_gpio.o
362 +obj-$(CONFIG_SPI_UBICOM32_GPIO)                += spi_ubicom32_gpio.o
363  obj-$(CONFIG_SPI_S3C24XX)              += spi_s3c24xx.o
364  obj-$(CONFIG_SPI_TXX9)                 += spi_txx9.o
365  obj-$(CONFIG_SPI_XILINX)               += xilinx_spi.o
366 --- a/drivers/uio/Kconfig
367 +++ b/drivers/uio/Kconfig
368 @@ -89,4 +89,12 @@ config UIO_SERCOS3
369  
370           If you compile this as a module, it will be called uio_sercos3.
371  
372 +config UIO_UBICOM32RING
373 +       tristate "Ubicom32 Ring Buffer driver"
374 +       default n
375 +       help
376 +         Userspace I/O interface for a Ubicom32 Ring Buffer.
377 +
378 +         If you compile this as a module, it will be called uio_ubicom32ring
379 +
380  endif
381 --- a/drivers/uio/Makefile
382 +++ b/drivers/uio/Makefile
383 @@ -5,3 +5,4 @@ obj-$(CONFIG_UIO_PDRV_GENIRQ)   += uio_pdr
384  obj-$(CONFIG_UIO_SMX)  += uio_smx.o
385  obj-$(CONFIG_UIO_AEC)  += uio_aec.o
386  obj-$(CONFIG_UIO_SERCOS3)      += uio_sercos3.o
387 +obj-$(CONFIG_UIO_UBICOM32RING) += uio_ubicom32ring.o
388 --- a/drivers/usb/gadget/epautoconf.c
389 +++ b/drivers/usb/gadget/epautoconf.c
390 @@ -154,6 +154,10 @@ ep_matches (
391                         /* configure your hardware with enough buffering!! */
392                 }
393                 break;
394 +
395 +       case USB_ENDPOINT_XFER_BULK:
396 +               if ((gadget->is_dualspeed) && (ep->maxpacket < 512))
397 +                       return 0;
398         }
399  
400         /* MATCH!! */
401 --- a/drivers/usb/Kconfig
402 +++ b/drivers/usb/Kconfig
403 @@ -22,6 +22,7 @@ config USB_ARCH_HAS_HCD
404         default y if PCMCIA && !M32R                    # sl811_cs
405         default y if ARM                                # SL-811
406         default y if SUPERH                             # r8a66597-hcd
407 +       default y if UBICOM32                           # Ubicom's onchip USB Duial role controller
408         default PCI
409  
410  # many non-PCI SOC chips embed OHCI
411 --- a/drivers/usb/musb/Kconfig
412 +++ b/drivers/usb/musb/Kconfig
413 @@ -12,7 +12,7 @@ config USB_MUSB_HDRC
414         depends on !SUPERH
415         select TWL4030_USB if MACH_OMAP_3430SDP
416         select USB_OTG_UTILS
417 -       tristate 'Inventra Highspeed Dual Role Controller (TI, ADI, ...)'
418 +       tristate 'Inventra Highspeed Dual Role Controller (TI, ADI, Ubicom, ...)'
419         help
420           Say Y here if your system has a dual role high speed USB
421           controller based on the Mentor Graphics silicon IP.  Then
422 --- a/drivers/usb/musb/Makefile
423 +++ b/drivers/usb/musb/Makefile
424 @@ -30,6 +30,10 @@ ifeq ($(CONFIG_BF52x),y)
425         musb_hdrc-objs  += blackfin.o
426  endif
427  
428 +ifeq ($(CONFIG_UBICOM32), y)
429 +        musb_hdrc-objs  += ubi32_usb.o
430 +endif
431 +
432  ifeq ($(CONFIG_USB_GADGET_MUSB_HDRC),y)
433         musb_hdrc-objs          += musb_gadget_ep0.o musb_gadget.o
434  endif
435 --- a/drivers/usb/musb/musb_core.c
436 +++ b/drivers/usb/musb/musb_core.c
437 @@ -105,6 +105,13 @@
438  #include <asm/mach-types.h>
439  #endif
440  
441 +#ifdef CONFIG_UBICOM32
442 +#include <asm/ip5000.h>
443 +#include <asm/ubicom32-tio.h>
444 +extern void ubi32_usb_init(void);
445 +extern void ubi32_usb_int_clr(void);
446 +#endif
447 +
448  #include "musb_core.h"
449  
450  
451 @@ -147,8 +154,37 @@ static inline struct musb *dev_to_musb(s
452  }
453  
454  /*-------------------------------------------------------------------------*/
455 +#if defined(CONFIG_UBICOM32)
456 +
457 +/*
458 + * Load an endpoint's FIFO
459 + */
460 +void musb_write_fifo(struct musb_hw_ep *hw_ep, u16 wCount, const u8 *pSource)
461 +{
462 +       void __iomem *fifo = hw_ep->fifo;
463 +
464 +       prefetch((u8 *)pSource);
465 +
466 +       DBG(4, "%cX ep%d fifo %p count %d buf %p\n",
467 +                       'T', hw_ep->epnum, fifo, wCount, pSource);
468 +
469 +       usb_tio_write_fifo((u32)fifo, (u32)pSource, wCount);
470 +
471 +}
472 +
473 +/*
474 + * Unload an endpoint's FIFO
475 + */
476 +void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 wCount, u8 *pDest)
477 +{
478 +
479 +       void __iomem *fifo = hw_ep->fifo;
480 +       DBG(4, "%cX ep%d fifo %p count %d buf %p\n",
481 +                       'R', hw_ep->epnum, fifo, wCount, pDest);
482 +       usb_tio_read_fifo((u32)fifo, (u32)pDest, wCount);
483 +}
484  
485 -#if !defined(CONFIG_USB_TUSB6010) && !defined(CONFIG_BLACKFIN)
486 +#elif !defined(CONFIG_USB_TUSB6010) && !defined(CONFIG_BLACKFIN)
487  
488  /*
489   * Load an endpoint's FIFO
490 @@ -227,8 +263,7 @@ void musb_read_fifo(struct musb_hw_ep *h
491                 readsb(fifo, dst, len);
492         }
493  }
494 -
495 -#endif /* normal PIO */
496 +#endif /* !T6010 && !BLACKFIN */
497  
498  
499  /*-------------------------------------------------------------------------*/
500 @@ -874,12 +909,19 @@ void musb_start(struct musb *musb)
501         musb_writeb(regs, MUSB_TESTMODE, 0);
502  
503         /* put into basic highspeed mode and start session */
504 +#ifndef CONFIG_UBICOM32
505         musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE
506                                                 | MUSB_POWER_SOFTCONN
507                                                 | MUSB_POWER_HSENAB
508                                                 /* ENSUSPEND wedges tusb */
509                                                 /* | MUSB_POWER_ENSUSPEND */
510                                                 );
511 +#else
512 +       musb_writeb(regs, MUSB_POWER,  MUSB_POWER_HSENAB
513 +                                               /* ENSUSPEND wedges tusb */
514 +                                               /* | MUSB_POWER_ENSUSPEND */
515 +                                               );
516 +#endif
517  
518         musb->is_active = 0;
519         devctl = musb_readb(regs, MUSB_DEVCTL);
520 @@ -1081,6 +1123,7 @@ static struct fifo_cfg __initdata mode_4
521  };
522  
523  
524 +#ifndef CONFIG_UBICOM32
525  /*
526   * configure a fifo; for non-shared endpoints, this may be called
527   * once for a tx fifo and once for an rx fifo.
528 @@ -1240,7 +1283,7 @@ static int __init ep_config_from_table(s
529  
530         return 0;
531  }
532 -
533 +#endif /* CONFIG_UBICOM32 */
534  
535  /*
536   * ep_config_from_hw - when MUSB_C_DYNFIFO_DEF is false
537 @@ -1256,6 +1299,11 @@ static int __init ep_config_from_hw(stru
538         DBG(2, "<== static silicon ep config\n");
539  
540         /* FIXME pick up ep0 maxpacket size */
541 +#ifdef CONFIG_UBICOM32
542 +       /* set ep0 to shared_fifo, otherwise urb will be put to out_qh but ep0_irq try to get the urb from in_qh*/
543 +       hw_ep = musb->endpoints;
544 +       hw_ep->is_shared_fifo = true;
545 +#endif
546  
547         for (epnum = 1; epnum < musb->config->num_eps; epnum++) {
548                 musb_ep_select(mbase, epnum);
549 @@ -1276,14 +1324,27 @@ static int __init ep_config_from_hw(stru
550                 /* REVISIT:  this algorithm is lazy, we should at least
551                  * try to pick a double buffered endpoint.
552                  */
553 +#ifndef CONFIG_UBICOM32
554                 if (musb->bulk_ep)
555                         continue;
556                 musb->bulk_ep = hw_ep;
557 +#else
558 +               if ((musb->bulk_ep_in) && (musb->bulk_ep_out))
559 +                       continue;
560 +               /* Save theEP with 1024 Bytes FIFO for ISO */
561 +               if(hw_ep->max_packet_sz_tx == 512) {
562 +                       if (!musb->bulk_ep_in) {
563 +                               musb->bulk_ep_in = hw_ep;
564 +                       } else if (!musb->bulk_ep_out) {
565 +                               musb->bulk_ep_out = hw_ep;
566 +                       }
567 +               }
568 +#endif /* CONFIG_UBICOM32 */
569  #endif
570         }
571  
572  #ifdef CONFIG_USB_MUSB_HDRC_HCD
573 -       if (!musb->bulk_ep) {
574 +       if ((!musb->bulk_ep_in) || (!musb->bulk_ep_out)) {
575                 pr_debug("%s: missing bulk\n", musb_driver_name);
576                 return -EINVAL;
577         }
578 @@ -1393,12 +1454,16 @@ static int __init musb_core_init(u16 mus
579         musb->epmask = 1;
580  
581         if (reg & MUSB_CONFIGDATA_DYNFIFO) {
582 +#ifndef CONFIG_UBICOM32
583                 if (musb->config->dyn_fifo)
584                         status = ep_config_from_table(musb);
585 -               else {
586 +               else
587 +#endif
588 +               {
589                         ERR("reconfigure software for Dynamic FIFOs\n");
590                         status = -ENODEV;
591                 }
592 +
593         } else {
594                 if (!musb->config->dyn_fifo)
595                         status = ep_config_from_hw(musb);
596 @@ -1462,8 +1527,8 @@ static int __init musb_core_init(u16 mus
597  
598  /*-------------------------------------------------------------------------*/
599  
600 -#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430)
601 -
602 +#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) || defined(CONFIG_UBICOM32)
603 +static u32_t musb_int_count = 0;
604  static irqreturn_t generic_interrupt(int irq, void *__hci)
605  {
606         unsigned long   flags;
607 @@ -1472,10 +1537,17 @@ static irqreturn_t generic_interrupt(int
608  
609         spin_lock_irqsave(&musb->lock, flags);
610  
611 +#ifndef CONFIG_UBICOM32
612         musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB);
613         musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX);
614         musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX);
615 +#else
616 +       musb_read_int_status(&musb->int_usb, &musb->int_tx, &musb->int_rx);
617 +       //ubi32_usb_int_clr();
618 +       musb_int_count++;
619 +#endif
620  
621 +       DBG(4, "usb %x, tx %x, rx %x", musb->int_usb, musb->int_tx, musb->int_rx);
622         if (musb->int_usb || musb->int_tx || musb->int_rx)
623                 retval = musb_interrupt(musb);
624  
625 @@ -2210,6 +2282,10 @@ static struct platform_driver musb_drive
626  
627  static int __init musb_init(void)
628  {
629 +#ifdef CONFIG_UBICOM32
630 +       ubi32_usb_init();
631 +#endif
632 +
633  #ifdef CONFIG_USB_MUSB_HDRC_HCD
634         if (usb_disabled())
635                 return 0;
636 --- a/drivers/usb/musb/musb_core.h
637 +++ b/drivers/usb/musb/musb_core.h
638 @@ -326,7 +326,12 @@ struct musb {
639          * queue until it completes or NAKs too much; then we try the next
640          * endpoint.
641          */
642 +#ifdef CONFIG_UBICOM32
643 +       struct musb_hw_ep       *bulk_ep_in;
644 +       struct musb_hw_ep       *bulk_ep_out;
645 +#else
646         struct musb_hw_ep       *bulk_ep;
647 +#endif
648  
649         struct list_head        control;        /* of musb_qh */
650         struct list_head        in_bulk;        /* of musb_qh */
651 --- a/drivers/usb/musb/musb_gadget.c
652 +++ b/drivers/usb/musb/musb_gadget.c
653 @@ -432,7 +432,7 @@ void musb_g_tx(struct musb *musb, u8 epn
654                  * probably rates reporting as a host error
655                  */
656                 if (csr & MUSB_TXCSR_P_SENTSTALL) {
657 -                       csr |= MUSB_TXCSR_P_WZC_BITS;
658 +                       csr &= ~(MUSB_TXCSR_P_WZC_BITS);
659                         csr &= ~MUSB_TXCSR_P_SENTSTALL;
660                         musb_writew(epio, MUSB_TXCSR, csr);
661                         if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
662 @@ -448,7 +448,7 @@ void musb_g_tx(struct musb *musb, u8 epn
663  
664                 if (csr & MUSB_TXCSR_P_UNDERRUN) {
665                         /* we NAKed, no big deal ... little reason to care */
666 -                       csr |= MUSB_TXCSR_P_WZC_BITS;
667 +                       csr &= ~(MUSB_TXCSR_P_WZC_BITS);
668                         csr &= ~(MUSB_TXCSR_P_UNDERRUN
669                                         | MUSB_TXCSR_TXPKTRDY);
670                         musb_writew(epio, MUSB_TXCSR, csr);
671 @@ -584,10 +584,16 @@ static void rxstate(struct musb *musb, s
672         u16                     csr = 0;
673         const u8                epnum = req->epnum;
674         struct usb_request      *request = &req->request;
675 -       struct musb_ep          *musb_ep = &musb->endpoints[epnum].ep_out;
676 +       struct musb_ep          *musb_ep = NULL;
677         void __iomem            *epio = musb->endpoints[epnum].regs;
678 -       unsigned                fifo_count = 0;
679 -       u16                     len = musb_ep->packet_sz;
680 +       u16                     fifo_count = 0;
681 +       u16                     len = 0;
682 +
683 +       if (musb->endpoints[epnum].is_shared_fifo)
684 +               musb_ep = &musb->endpoints[epnum].ep_in;
685 +       else
686 +               musb_ep = &musb->endpoints[epnum].ep_out;
687 +       len =  musb_ep->packet_sz;
688  
689         csr = musb_readw(epio, MUSB_RXCSR);
690  
691 @@ -726,7 +732,7 @@ static void rxstate(struct musb *musb, s
692                          */
693  
694                         /* ack the read! */
695 -                       csr |= MUSB_RXCSR_P_WZC_BITS;
696 +                       csr &= ~MUSB_RXCSR_P_WZC_BITS;
697                         csr &= ~MUSB_RXCSR_RXPKTRDY;
698                         musb_writew(epio, MUSB_RXCSR, csr);
699                 }
700 @@ -745,10 +751,15 @@ void musb_g_rx(struct musb *musb, u8 epn
701         u16                     csr;
702         struct usb_request      *request;
703         void __iomem            *mbase = musb->mregs;
704 -       struct musb_ep          *musb_ep = &musb->endpoints[epnum].ep_out;
705 +       struct musb_ep          *musb_ep = NULL;
706         void __iomem            *epio = musb->endpoints[epnum].regs;
707         struct dma_channel      *dma;
708  
709 +       if (musb->endpoints[epnum].is_shared_fifo)
710 +               musb_ep = &musb->endpoints[epnum].ep_in;
711 +       else
712 +               musb_ep = &musb->endpoints[epnum].ep_out;
713 +
714         musb_ep_select(mbase, epnum);
715  
716         request = next_request(musb_ep);
717 @@ -1769,7 +1780,9 @@ int usb_gadget_register_driver(struct us
718                         }
719                 }
720         }
721 -
722 +#ifndef CONFIG_USB_MUSB_OTG
723 +       musb_pullup(musb, 1);
724 +#endif
725         return retval;
726  }
727  EXPORT_SYMBOL(usb_gadget_register_driver);
728 --- a/drivers/usb/musb/musb_gadget_ep0.c
729 +++ b/drivers/usb/musb/musb_gadget_ep0.c
730 @@ -240,14 +240,14 @@ __acquires(musb->lock)
731                 case USB_REQ_SET_ADDRESS:
732                         /* change it after the status stage */
733                         musb->set_address = true;
734 -                       musb->address = (u8) (ctrlrequest->wValue & 0x7f);
735 +                       musb->address = (u8) (le16_to_cpu(ctrlrequest->wValue) & 0x7f);
736                         handled = 1;
737                         break;
738  
739                 case USB_REQ_CLEAR_FEATURE:
740                         switch (recip) {
741                         case USB_RECIP_DEVICE:
742 -                               if (ctrlrequest->wValue
743 +                               if (le16_to_cpu(ctrlrequest->wValue)
744                                                 != USB_DEVICE_REMOTE_WAKEUP)
745                                         break;
746                                 musb->may_wakeup = 0;
747 @@ -261,8 +261,8 @@ __acquires(musb->lock)
748  
749                                 if (num == 0
750                                                 || num >= MUSB_C_NUM_EPS
751 -                                               || ctrlrequest->wValue
752 -                                                       != USB_ENDPOINT_HALT)
753 +                                               || le16_to_cpu(ctrlrequest->wValue
754 +                                                       != USB_ENDPOINT_HALT))
755                                         break;
756  
757                                 if (ctrlrequest->wIndex & USB_DIR_IN)
758 @@ -292,7 +292,7 @@ __acquires(musb->lock)
759                         switch (recip) {
760                         case USB_RECIP_DEVICE:
761                                 handled = 1;
762 -                               switch (ctrlrequest->wValue) {
763 +                               switch (le16_to_cpu(ctrlrequest->wValue)) {
764                                 case USB_DEVICE_REMOTE_WAKEUP:
765                                         musb->may_wakeup = 1;
766                                         break;
767 @@ -374,8 +374,8 @@ stall:
768  
769                                 if (epnum == 0
770                                                 || epnum >= MUSB_C_NUM_EPS
771 -                                               || ctrlrequest->wValue
772 -                                                       != USB_ENDPOINT_HALT)
773 +                                               || le16_to_cpu(ctrlrequest->wValue
774 +                                                       != USB_ENDPOINT_HALT))
775                                         break;
776  
777                                 ep = musb->endpoints + epnum;
778 --- a/drivers/usb/musb/musb_host.c
779 +++ b/drivers/usb/musb/musb_host.c
780 @@ -160,7 +160,11 @@ static inline void musb_h_tx_start(struc
781         /* NOTE: no locks here; caller should lock and select EP */
782         if (ep->epnum) {
783                 txcsr = musb_readw(ep->regs, MUSB_TXCSR);
784 +#ifndef CONFIG_UBICOM32
785                 txcsr |= MUSB_TXCSR_TXPKTRDY | MUSB_TXCSR_H_WZC_BITS;
786 +#else
787 +               txcsr |= (MUSB_TXCSR_TXPKTRDY & (~MUSB_TXCSR_H_WZC_BITS));
788 +#endif
789                 musb_writew(ep->regs, MUSB_TXCSR, txcsr);
790         } else {
791                 txcsr = MUSB_CSR0_H_SETUPPKT | MUSB_CSR0_TXPKTRDY;
792 @@ -223,6 +227,8 @@ musb_start_urb(struct musb *musb, int is
793                 break;
794         default:                /* bulk, interrupt */
795                 /* actual_length may be nonzero on retry paths */
796 +               if (urb->actual_length)
797 +                       DBG(3 ,"musb_start_urb: URB %p retried, len: %d\n", urb, urb->actual_length);
798                 buf = urb->transfer_buffer + urb->actual_length;
799                 len = urb->transfer_buffer_length - urb->actual_length;
800         }
801 @@ -342,13 +348,13 @@ musb_save_toggle(struct musb_hw_ep *ep, 
802         if (!is_in) {
803                 csr = musb_readw(epio, MUSB_TXCSR);
804                 usb_settoggle(udev, qh->epnum, 1,
805 -                       (csr & MUSB_TXCSR_H_DATATOGGLE)
806 -                               ? 1 : 0);
807 +                       ((csr & MUSB_TXCSR_H_DATATOGGLE)
808 +                               ? 1 : 0));
809         } else {
810                 csr = musb_readw(epio, MUSB_RXCSR);
811                 usb_settoggle(udev, qh->epnum, 0,
812 -                       (csr & MUSB_RXCSR_H_DATATOGGLE)
813 -                               ? 1 : 0);
814 +                       ((csr & MUSB_RXCSR_H_DATATOGGLE)
815 +                               ? 1 : 0));
816         }
817  }
818  
819 @@ -556,7 +562,11 @@ musb_host_packet_rx(struct musb *musb, s
820         musb_read_fifo(hw_ep, length, buf);
821  
822         csr = musb_readw(epio, MUSB_RXCSR);
823 +#ifndef CONFIG_UBICOM32
824         csr |= MUSB_RXCSR_H_WZC_BITS;
825 +#else
826 +       csr &= ~MUSB_RXCSR_H_WZC_BITS;
827 +#endif
828         if (unlikely(do_flush))
829                 musb_h_flush_rxfifo(hw_ep, csr);
830         else {
831 @@ -590,6 +600,7 @@ musb_rx_reinit(struct musb *musb, struct
832  
833         /* if programmed for Tx, put it in RX mode */
834         if (ep->is_shared_fifo) {
835 +#ifndef  CONFIG_UBICOM32
836                 csr = musb_readw(ep->regs, MUSB_TXCSR);
837                 if (csr & MUSB_TXCSR_MODE) {
838                         musb_h_tx_flush_fifo(ep);
839 @@ -604,7 +615,18 @@ musb_rx_reinit(struct musb *musb, struct
840                  */
841                 if (csr & MUSB_TXCSR_DMAMODE)
842                         musb_writew(ep->regs, MUSB_TXCSR, MUSB_TXCSR_DMAMODE);
843 +
844 +#else
845 +               /* clear mode (and everything else) to enable Rx */
846                 musb_writew(ep->regs, MUSB_TXCSR, 0);
847 +               /* scrub all previous state, clearing toggle */
848 +               csr = musb_readw(ep->regs, MUSB_RXCSR);
849 +               if (csr & MUSB_RXCSR_RXPKTRDY)
850 +                       WARNING("rx%d, packet/%d ready?\n", ep->epnum,
851 +                               musb_readw(ep->regs, MUSB_RXCOUNT));
852 +
853 +               musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG);
854 +#endif
855  
856         /* scrub all previous state, clearing toggle */
857         } else {
858 @@ -1138,8 +1160,18 @@ void musb_host_tx(struct musb *musb, u8 
859         void __iomem            *mbase = musb->mregs;
860         struct dma_channel      *dma;
861  
862 +#ifdef CONFIG_UBICOM32
863 +       if (hw_ep->is_shared_fifo) {
864 +               qh = hw_ep->in_qh;
865 +       }
866 +#ifdef CONFIG_USB_SERIAL_SIERRAWIRELESS
867 +       printk(KERN_DEBUG "OUT/TX%d end, csr %04x%s\n", epnum, tx_csr,
868 +                       dma ? ", dma" : "");
869 +#endif
870 +#endif
871         urb = next_urb(qh);
872  
873 +
874         musb_ep_select(mbase, epnum);
875         tx_csr = musb_readw(epio, MUSB_TXCSR);
876  
877 @@ -1180,9 +1212,14 @@ void musb_host_tx(struct musb *musb, u8 
878                  * we have a candidate... NAKing is *NOT* an error
879                  */
880                 musb_ep_select(mbase, epnum);
881 +#ifndef CONFIG_UBICOM32
882                 musb_writew(epio, MUSB_TXCSR,
883                                 MUSB_TXCSR_H_WZC_BITS
884                                 | MUSB_TXCSR_TXPKTRDY);
885 +#else
886 +               musb_writew(epio, MUSB_TXCSR,
887 +                                MUSB_TXCSR_TXPKTRDY);
888 +#endif
889                 return;
890         }
891  
892 @@ -1353,8 +1390,14 @@ void musb_host_tx(struct musb *musb, u8 
893         qh->segsize = length;
894  
895         musb_ep_select(mbase, epnum);
896 +#ifndef CONFIG_UBICOM32
897 +       musb_writew(epio, MUSB_TXCSR,
898 +                   MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY);
899 +#else
900         musb_writew(epio, MUSB_TXCSR,
901 -                       MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY);
902 +                   MUSB_TXCSR_MODE | MUSB_TXCSR_TXPKTRDY);
903 +#endif
904 +
905  }
906  
907  
908 @@ -1414,7 +1457,11 @@ static void musb_bulk_rx_nak_timeout(str
909  
910         /* clear nak timeout bit */
911         rx_csr = musb_readw(epio, MUSB_RXCSR);
912 +#ifndef CONFIG_UBICOM32
913         rx_csr |= MUSB_RXCSR_H_WZC_BITS;
914 +#else
915 +       rx_csr &= ~MUSB_RXCSR_H_WZC_BITS;
916 +#endif
917         rx_csr &= ~MUSB_RXCSR_DATAERROR;
918         musb_writew(epio, MUSB_RXCSR, rx_csr);
919  
920 @@ -1483,6 +1530,13 @@ void musb_host_rx(struct musb *musb, u8 
921  
922         pipe = urb->pipe;
923  
924 +#ifdef CONFIG_UBICOM32
925 +#ifdef CONFIG_USB_SERIAL_SIERRAWIRELESS
926 +               printk(KERN_DEBUG  "RXCSR%d %04x, reqpkt, len %zu%s\n", epnum, rx_csr,
927 +                               xfer_len, dma ? ", dma" : "");
928 +#endif
929 +#endif
930 +
931         DBG(5, "<== hw %d rxcsr %04x, urb actual %d (+dma %zu)\n",
932                 epnum, rx_csr, urb->actual_length,
933                 dma ? dma->actual_len : 0);
934 @@ -1521,8 +1575,15 @@ void musb_host_rx(struct musb *musb, u8 
935                                 return;
936                         }
937                         musb_ep_select(mbase, epnum);
938 +#ifndef CONFIG_UBICOM32
939                         rx_csr |= MUSB_RXCSR_H_WZC_BITS;
940                         rx_csr &= ~MUSB_RXCSR_DATAERROR;
941 +#else
942 +                       /* NEED TO EVALUATE CHANGE */
943 +                       rx_csr &= ~MUSB_RXCSR_H_WZC_BITS;
944 +                       rx_csr &= ~MUSB_RXCSR_DATAERROR;
945 +//                     musb_writew(epio, MUSB_RXCSR, (~(MUSB_RXCSR_H_WZC_BITS))| MUSB_RXCSR_H_REQPKT);
946 +#endif
947                         musb_writew(epio, MUSB_RXCSR, rx_csr);
948  
949                         goto finish;
950 @@ -1579,8 +1640,13 @@ void musb_host_rx(struct musb *musb, u8 
951                 rx_csr &= ~MUSB_RXCSR_H_REQPKT;
952  
953                 musb_ep_select(mbase, epnum);
954 +#ifndef CONFIG_UBICOM32
955                 musb_writew(epio, MUSB_RXCSR,
956                                 MUSB_RXCSR_H_WZC_BITS | rx_csr);
957 +#else
958 +               musb_writew(epio, MUSB_RXCSR,
959 +                               (~MUSB_RXCSR_H_WZC_BITS) & rx_csr);
960 +#endif
961         }
962  #endif
963         if (dma && (rx_csr & MUSB_RXCSR_DMAENAB)) {
964 @@ -1610,7 +1676,7 @@ void musb_host_rx(struct musb *musb, u8 
965                         else
966                                 done = false;
967  
968 -               } else  {
969 +               } else {
970                 /* done if urb buffer is full or short packet is recd */
971                 done = (urb->actual_length + xfer_len >=
972                                 urb->transfer_buffer_length
973 @@ -1823,7 +1889,11 @@ static int musb_schedule(
974                 } else  if (hw_ep->out_qh != NULL)
975                         continue;
976  
977 +#ifndef CONFIG_UBICOM32
978                 if (hw_ep == musb->bulk_ep)
979 +#else
980 +               if ((hw_ep == musb->bulk_ep_in) || (hw_ep == musb->bulk_ep_out)) /* Ubicom */
981 +#endif
982                         continue;
983  
984                 if (is_in)
985 @@ -1836,7 +1906,14 @@ static int musb_schedule(
986                         best_end = epnum;
987                 }
988         }
989 +
990 +#ifdef CONFIG_UBICOM32
991 +       if (((best_diff >= qh->maxpacket)) && ((qh->type == USB_ENDPOINT_XFER_BULK) && (!is_in)))
992 +               best_end = -1;
993 +#endif
994 +
995         /* use bulk reserved ep1 if no other ep is free */
996 +#ifndef CONFIG_UBICOM32
997         if (best_end < 0 && qh->type == USB_ENDPOINT_XFER_BULK) {
998                 hw_ep = musb->bulk_ep;
999                 if (is_in)
1000 @@ -1858,6 +1935,22 @@ static int musb_schedule(
1001         } else if (best_end < 0) {
1002                 return -ENOSPC;
1003         }
1004 +#else
1005 +       if (best_end < 0 && qh->type == USB_ENDPOINT_XFER_BULK) {
1006 +               /* hw_ep = musb->bulk_ep; */
1007 +               if (is_in) {
1008 +                       head = &musb->in_bulk;
1009 +                       hw_ep = musb->bulk_ep_in; /* UBICOM */
1010 +               }
1011 +               else {
1012 +                       head = &musb->out_bulk;
1013 +                       hw_ep = musb->bulk_ep_out; /* UBICOM */
1014 +               }
1015 +               goto success;
1016 +       } else if (best_end < 0) {
1017 +               return -ENOSPC;
1018 +       }
1019 +#endif
1020  
1021         idle = 1;
1022         qh->mux = 0;
1023 @@ -1869,6 +1962,13 @@ success:
1024                 list_add_tail(&qh->ring, head);
1025                 qh->mux = 1;
1026         }
1027 +       /*
1028 +        * It's not make sense to set NAK timeout when qh->mux = 0,
1029 +        * There is nothing else to schedule
1030 +        */
1031 +       if ((qh->type == USB_ENDPOINT_XFER_BULK) && (qh->mux == 0))
1032 +               qh->intv_reg = 0;
1033 +
1034         qh->hw_ep = hw_ep;
1035         qh->hep->hcpriv = qh;
1036         if (idle)
1037 @@ -1975,6 +2075,15 @@ static int musb_urb_enqueue(
1038                 /* ISO always uses logarithmic encoding */
1039                 interval = min_t(u8, epd->bInterval, 16);
1040                 break;
1041 +#ifdef COMFIG_UBICOM32
1042 +       case USB_ENDPOINT_XFER_BULK:
1043 +                if (epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
1044 +                       interval = (USB_SPEED_HIGH == urb->dev->speed) ? 16: 2;
1045 +                else
1046 +                       interval = 0;
1047 +                break;
1048 +#endif
1049 +
1050         default:
1051                 /* REVISIT we actually want to use NAK limits, hinting to the
1052                  * transfer scheduling logic to try some other qh, e.g. try
1053 --- a/drivers/usb/musb/musb_io.h
1054 +++ b/drivers/usb/musb/musb_io.h
1055 @@ -58,6 +58,7 @@ static inline void writesb(const void __
1056  
1057  #ifndef CONFIG_BLACKFIN
1058  
1059 +#ifndef CONFIG_UBICOM32
1060  /* NOTE:  these offsets are all in bytes */
1061  
1062  static inline u16 musb_readw(const void __iomem *addr, unsigned offset)
1063 @@ -72,7 +73,37 @@ static inline void musb_writew(void __io
1064  
1065  static inline void musb_writel(void __iomem *addr, unsigned offset, u32 data)
1066         { __raw_writel(data, addr + offset); }
1067 +#else
1068 +#include <asm/ubicom32-tio.h>
1069 +static inline u16 musb_readw(const void __iomem *addr, unsigned offset)
1070 +{
1071 +        u16 data;
1072 +        usb_tio_read_u16((u32)(addr + offset), &data);
1073 +        return data;
1074 +}
1075  
1076 +static inline u8 musb_readb(const void __iomem *addr, unsigned offset)
1077 +{
1078 +        u8 data;
1079 +        usb_tio_read_u8((u32)(addr + offset), &data);
1080 +        return data;
1081 +}
1082 +
1083 +static inline void musb_writew(void __iomem *addr, unsigned offset, u16 data)
1084 +{
1085 +        usb_tio_write_u16((u32)(addr + offset), data);
1086 +}
1087 +
1088 +static inline void musb_writeb(void __iomem *addr, unsigned offset, u8 data)
1089 +{
1090 +        usb_tio_write_u8((u32)(addr + offset), data);
1091 +}
1092 +
1093 +static inline void  musb_read_int_status(u8_t *int_usb, u16_t *int_tx, u16_t *int_rx)
1094 +{
1095 +       return usb_tio_read_int_status(int_usb, int_tx, int_rx);
1096 +}
1097 +#endif /* CONFIG_UBICOM32 */
1098  
1099  #ifdef CONFIG_USB_TUSB6010
1100  
1101 @@ -106,7 +137,7 @@ static inline void musb_writeb(void __io
1102         __raw_writew(tmp, addr + (offset & ~1));
1103  }
1104  
1105 -#else
1106 +#elif !defined(CONFIG_UBICOM32)
1107  
1108  static inline u8 musb_readb(const void __iomem *addr, unsigned offset)
1109         { return __raw_readb(addr + offset); }
1110 --- a/drivers/usb/musb/musb_regs.h
1111 +++ b/drivers/usb/musb/musb_regs.h
1112 @@ -167,6 +167,7 @@
1113         (MUSB_TXCSR_H_NAKTIMEOUT | MUSB_TXCSR_H_RXSTALL \
1114         | MUSB_TXCSR_H_ERROR | MUSB_TXCSR_FIFONOTEMPTY)
1115  
1116 +
1117  /* RXCSR in Peripheral and Host mode */
1118  #define MUSB_RXCSR_AUTOCLEAR           0x8000
1119  #define MUSB_RXCSR_DMAENAB             0x2000
1120 --- a/drivers/video/backlight/Kconfig
1121 +++ b/drivers/video/backlight/Kconfig
1122 @@ -93,6 +93,63 @@ config LCD_HP700
1123           If you have an HP Jornada 700 series handheld (710/720/728)
1124           say Y to enable LCD control driver.
1125  
1126 +config LCD_UBICOM32POWER
1127 +       tristate "Ubicom LCD power Driver"
1128 +       depends on LCD_CLASS_DEVICE && UBICOM32
1129 +       default n
1130 +       help
1131 +         If you have a Ubicom32 based system with an LCD panel that requires
1132 +         power control, say Y to enable the power control driver for it.
1133 +
1134 +config LCD_UBICOM32
1135 +       tristate "Ubicom Backlight Driver"
1136 +       depends on LCD_CLASS_DEVICE && UBICOM32
1137 +       default n
1138 +       help
1139 +         This driver takes care of initialization of LCD panels with
1140 +         built in controllers.
1141 +
1142 +menu "Ubicom32 LCD Panel Support"
1143 +       depends on UBICOM32 && LCD_UBICOM32
1144 +
1145 +config LCD_UBICOM32_TFT2N0369E_P
1146 +       bool "TFT2N0369E (Portrait)"
1147 +       default n
1148 +       help
1149 +         Support for TFT2N0369 in portrait mode
1150 +
1151 +config LCD_UBICOM32_TFT2N0369E_L
1152 +       bool "TFT2N0369E (Landscape)"
1153 +       default n
1154 +       help
1155 +         Support for TFT2N0369 in landscape mode
1156 +
1157 +config LCD_UBICOM32_CFAF240320KTTS
1158 +       bool "CFAF240320KTTS"
1159 +       default n
1160 +       help
1161 +         Support for CFAF240320KTTS
1162 +
1163 +config LCD_UBICOM32_CFAF240320KTTS_180
1164 +       bool "CFAF240320KTTS (180 rotation)"
1165 +       default n
1166 +       help
1167 +         Support for CFAF240320KTTS rotated 180 degrees
1168 +
1169 +config LCD_UBICOM32_CFAF240320D
1170 +       bool "CFAF240320D"
1171 +       default n
1172 +       help
1173 +         Support for CFAF240320D
1174 +
1175 +config LCD_UBICOM32_CFAF320240F
1176 +       bool "CFAF320240F"
1177 +       default n
1178 +       help
1179 +         Support for CFAF320240F
1180 +
1181 +endmenu
1182 +
1183  #
1184  # Backlight
1185  #
1186 @@ -229,3 +286,11 @@ config BACKLIGHT_SAHARA
1187         help
1188           If you have a Tabletkiosk Sahara Touch-iT, say y to enable the
1189           backlight driver.
1190 +
1191 +config BACKLIGHT_UBICOM32
1192 +       tristate "Ubicom Backlight Driver"
1193 +       depends on BACKLIGHT_CLASS_DEVICE && UBICOM32
1194 +       default n
1195 +       help
1196 +         If you have a Ubicom32 based system with a backlight say Y to enable the
1197 +         backlight driver.
1198 --- a/drivers/video/backlight/Makefile
1199 +++ b/drivers/video/backlight/Makefile
1200 @@ -9,6 +9,9 @@ obj-$(CONFIG_LCD_PLATFORM)         += platfor
1201  obj-$(CONFIG_LCD_VGG2432A4)       += vgg2432a4.o
1202  obj-$(CONFIG_LCD_TDO24M)          += tdo24m.o
1203  obj-$(CONFIG_LCD_TOSA)            += tosa_lcd.o
1204 +obj-$(CONFIG_LCD_LTV350QV)        += ltv350qv.o
1205 +obj-$(CONFIG_LCD_UBICOM32POWER)           += ubicom32lcdpower.o
1206 +obj-$(CONFIG_LCD_UBICOM32)        += ubicom32lcd.o
1207  
1208  obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
1209  obj-$(CONFIG_BACKLIGHT_ATMEL_PWM)    += atmel-pwm-bl.o
1210 @@ -24,4 +27,4 @@ obj-$(CONFIG_BACKLIGHT_DA903X)        += da903x
1211  obj-$(CONFIG_BACKLIGHT_MBP_NVIDIA) += mbp_nvidia_bl.o
1212  obj-$(CONFIG_BACKLIGHT_TOSA)   += tosa_bl.o
1213  obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o
1214 -
1215 +obj-$(CONFIG_BACKLIGHT_UBICOM32) += ubicom32bl.o
1216 --- a/drivers/video/Kconfig
1217 +++ b/drivers/video/Kconfig
1218 @@ -609,6 +609,50 @@ config FB_BFIN_T350MCQB
1219          This display is a QVGA 320x240 24-bit RGB display interfaced by an 8-bit wide PPI
1220          It uses PPI[0..7] PPI_FS1, PPI_FS2 and PPI_CLK.
1221  
1222 +config FB_UBICOM32
1223 +       tristate "Ubicom32 Frame Buffer driver"
1224 +       depends on FB && UBICOM32
1225 +       select FB_CFB_FILLRECT
1226 +       select FB_CFB_COPYAREA
1227 +       select FB_CFB_IMAGEBLIT
1228 +       select FONT_6x11 if FRAMEBUFFER_CONSOLE
1229 +       help
1230 +        This is the framebuffer device driver for the Ubicom32 architecture.
1231 +        You can configure video memory by using kernel command line parameters, for example:
1232 +               video=ubicomfb:vram_size=512,init_value=0xffff
1233 +
1234 +config FB_UBICOM32_PLIO80
1235 +       tristate "Ubicom32 80 Bus PLIO Frame Buffer driver"
1236 +       depends on FB && UBICOM32
1237 +       select FB_CFB_FILLRECT
1238 +       select FB_CFB_COPYAREA
1239 +       select FB_CFB_IMAGEBLIT
1240 +       select FONT_6x11 if FRAMEBUFFER_CONSOLE
1241 +       select UBICOM32_PLIO
1242 +       help
1243 +        This is a framebuffer device driver for the Ubicom32 architecture.
1244 +        You can configure the xres, yres and vram size (in kilobytes) by using
1245 +        kernel command line parameters, for example:
1246 +               video=ubicom32vfb:xres=320,yres=240,vram_size=512
1247 +
1248 +config FB_UBICOM32_VIRTUAL
1249 +       tristate "Ubicom32 Virtual Frame Buffer driver"
1250 +       depends on FB && UBICOM32
1251 +       select FB_CFB_FILLRECT
1252 +       select FB_CFB_COPYAREA
1253 +       select FB_CFB_IMAGEBLIT
1254 +       select FONT_6x11 if FRAMEBUFFER_CONSOLE
1255 +       help
1256 +        This is a virtual framebuffer device driver for the Ubicom32 architecture.
1257 +        You can configure the xres, yres and vram size (in kilobytes) by using
1258 +        kernel command line parameters, for example:
1259 +               video=ubicom32vfb:xres=320,yres=240,vram_size=512
1260 +
1261 +config FB_UBICOM32_VIRTUAL_NOAUTO
1262 +       bool "Do not automatically load"
1263 +       depends on FB_UBICOM32_VIRTUAL
1264 +       help
1265 +        Select this option to prevent the VFB from automatically loading at boot.
1266  
1267  config FB_STI
1268         tristate "HP STI frame buffer device support"
1269 --- a/drivers/video/Makefile
1270 +++ b/drivers/video/Makefile
1271 @@ -136,6 +136,10 @@ obj-$(CONFIG_FB_BF54X_LQ043)         += bf54x-
1272  obj-$(CONFIG_FB_BFIN_T350MCQB)   += bfin-t350mcqb-fb.o
1273  obj-$(CONFIG_FB_MX3)             += mx3fb.o
1274  
1275 +obj-$(CONFIG_FB_UBICOM32)         += ubicom32fb.o
1276 +obj-$(CONFIG_FB_UBICOM32_PLIO80)  += ubicom32plio80.o
1277 +obj-$(CONFIG_FB_UBICOM32_VIRTUAL) += ubicom32vfb.o
1278 +
1279  # the test framebuffer is last
1280  obj-$(CONFIG_FB_VIRTUAL)          += vfb.o
1281  
1282 --- a/drivers/watchdog/Kconfig
1283 +++ b/drivers/watchdog/Kconfig
1284 @@ -887,6 +887,19 @@ config WATCHDOG_RIO
1285           machines.  The watchdog timeout period is normally one minute but
1286           can be changed with a boot-time parameter.
1287  
1288 +# Ubicom32
1289 +
1290 +config UBI32_WDT
1291 +       tristate "Ubicom32 Hardware Watchdog support"
1292 +       depends on UBICOM32
1293 +       ---help---
1294 +         If you say yes here you will get support for the Ubicom32 On-Chip
1295 +         Watchdog Timer. If you have one of these processors and wish to
1296 +         have watchdog support enabled, say Y, otherwise say N.
1297 +
1298 +         To compile this driver as a module, choose M here: the
1299 +         module will be called ubi32_wdt.
1300 +
1301  # XTENSA Architecture
1302  
1303  #
1304 --- a/drivers/watchdog/Makefile
1305 +++ b/drivers/watchdog/Makefile
1306 @@ -131,6 +131,9 @@ obj-$(CONFIG_SH_WDT) += shwdt.o
1307  obj-$(CONFIG_WATCHDOG_RIO)             += riowd.o
1308  obj-$(CONFIG_WATCHDOG_CP1XXX)          += cpwd.o
1309  
1310 +# Ubicom32 Architecture
1311 +obj-$(CONFIG_UBI32_WDT)                        += ubi32_wdt.o
1312 +
1313  # XTENSA Architecture
1314  
1315  # Architecture Independant
1316 --- a/fs/binfmt_flat.c
1317 +++ b/fs/binfmt_flat.c
1318 @@ -67,6 +67,11 @@
1319  #define FLAT_DATA_ALIGN        (sizeof(void *))
1320  #endif
1321  
1322 +#ifndef ARCH_FLAT_ALIGN
1323 +#undef FLAT_DATA_ALIGN
1324 +#define FLAT_DATA_ALIGN        ARCH_FLAT_ALIGN
1325 +#endif
1326 +
1327  #define RELOC_FAILED 0xff00ff01                /* Relocation incorrect somewhere */
1328  #define UNLOADED_LIB 0x7ff000ff                /* Placeholder for unused library */
1329  
1330 @@ -436,6 +441,7 @@ static int load_flat_file(struct linux_b
1331         loff_t fpos;
1332         unsigned long start_code, end_code;
1333         int ret;
1334 +       int flush_happened = 0;
1335  
1336         hdr = ((struct flat_hdr *) bprm->buf);          /* exec-header */
1337         inode = bprm->file->f_path.dentry->d_inode;
1338 @@ -521,6 +527,7 @@ static int load_flat_file(struct linux_b
1339  
1340                 /* OK, This is the point of no return */
1341                 set_personality(PER_LINUX_32BIT);
1342 +               flush_happened = 1;
1343         }
1344  
1345         /*
1346 @@ -535,6 +542,12 @@ static int load_flat_file(struct linux_b
1347          * it all together.
1348          */
1349         if ((flags & (FLAT_FLAG_RAM|FLAT_FLAG_GZIP)) == 0) {
1350 +
1351 +#ifdef ARCH_FLAT_ALIGN_TEXT
1352 +               printk("Unable to mmap rom with ARCH alignment requirements\n");
1353 +               ret = -ENOEXEC;
1354 +               goto err;
1355 +#endif
1356                 /*
1357                  * this should give us a ROM ptr,  but if it doesn't we don't
1358                  * really care
1359 @@ -553,7 +566,7 @@ static int load_flat_file(struct linux_b
1360                         goto err;
1361                 }
1362  
1363 -               len = data_len + extra + MAX_SHARED_LIBS * sizeof(unsigned long);
1364 +               len = data_len + extra + ALIGN(MAX_SHARED_LIBS * sizeof(unsigned long), FLAT_DATA_ALIGN);
1365                 len = PAGE_ALIGN(len);
1366                 down_write(&current->mm->mmap_sem);
1367                 realdatastart = do_mmap(0, 0, len,
1368 @@ -572,6 +585,7 @@ static int load_flat_file(struct linux_b
1369                 datapos = ALIGN(realdatastart +
1370                                 MAX_SHARED_LIBS * sizeof(unsigned long),
1371                                 FLAT_DATA_ALIGN);
1372 +               //datapos = realdatastart + ALIGN(MAX_SHARED_LIBS * sizeof(unsigned long), ARCH_FLAT_ALIGN);
1373  
1374                 DBG_FLT("BINFMT_FLAT: Allocated data+bss+stack (%d bytes): %x\n",
1375                                 (int)(data_len + bss_len + stack_len), (int)datapos);
1376 @@ -600,7 +614,11 @@ static int load_flat_file(struct linux_b
1377                 memp_size = len;
1378         } else {
1379  
1380 -               len = text_len + data_len + extra + MAX_SHARED_LIBS * sizeof(unsigned long);
1381 +               len = text_len + data_len + extra + ALIGN(MAX_SHARED_LIBS * sizeof(unsigned long), FLAT_DATA_ALIGN);
1382 +#ifdef ARCH_FLAT_ALIGN_TEXT
1383 +               /* Reserve space for the text alignment. */
1384 +               len += FLAT_DATA_ALIGN;
1385 +#endif
1386                 len = PAGE_ALIGN(len);
1387                 down_write(&current->mm->mmap_sem);
1388                 textpos = do_mmap(0, 0, len,
1389 @@ -616,10 +634,17 @@ static int load_flat_file(struct linux_b
1390                         goto err;
1391                 }
1392  
1393 +               memp = textpos;
1394 +#ifdef ARCH_FLAT_ALIGN_TEXT
1395 +               textpos = ALIGN(textpos + sizeof(struct flat_hdr), FLAT_DATA_ALIGN) - sizeof(struct flat_hdr);
1396 +#endif
1397                 realdatastart = textpos + ntohl(hdr->data_start);
1398                 datapos = ALIGN(realdatastart +
1399                                 MAX_SHARED_LIBS * sizeof(unsigned long),
1400                                 FLAT_DATA_ALIGN);
1401 +//             datapos = realdatastart + ALIGN(MAX_SHARED_LIBS * sizeof(unsigned long), ARCH_FLAT_ALIGN);
1402 +//             reloc = (unsigned long *) (textpos + ntohl(hdr->reloc_start) +
1403 +//                                        ALIGN(MAX_SHARED_LIBS * sizeof(unsigned long), ARCH_FLAT_ALIGN));
1404  
1405                 reloc = (unsigned long *)
1406                         (datapos + (ntohl(hdr->reloc_start) - text_len));
1407 @@ -659,7 +684,7 @@ static int load_flat_file(struct linux_b
1408                 }
1409                 if (result >= (unsigned long)-4096) {
1410                         printk("Unable to read code+data+bss, errno %d\n",(int)-result);
1411 -                       do_munmap(current->mm, textpos, text_len + data_len + extra +
1412 +                       do_munmap(current->mm, memp, text_len + data_len + extra +
1413                                 MAX_SHARED_LIBS * sizeof(unsigned long));
1414                         ret = result;
1415                         goto err;
1416 @@ -672,6 +697,9 @@ static int load_flat_file(struct linux_b
1417  
1418         /* The main program needs a little extra setup in the task structure */
1419         start_code = textpos + sizeof (struct flat_hdr);
1420 +#ifdef ARCH_FLAT_ALIGN_TEXT
1421 +       BUG_ON(ALIGN(start_code, FLAT_DATA_ALIGN) != start_code);
1422 +#endif
1423         end_code = textpos + text_len;
1424         if (id == 0) {
1425                 current->mm->start_code = start_code;
1426 @@ -800,6 +828,13 @@ static int load_flat_file(struct linux_b
1427  
1428         return 0;
1429  err:
1430 +       if (flush_happened) {
1431 +               /*
1432 +                * The parent process has already started running. We cannot allow the child to return back to user space
1433 +                * as this child is still uning the parent stack and 2 will clobber each other. We are going to kill this child.
1434 +                */
1435 +               do_exit(SIGTERM);
1436 +       }
1437         return ret;
1438  }
1439  
1440 --- a/fs/Kconfig.binfmt
1441 +++ b/fs/Kconfig.binfmt
1442 @@ -30,7 +30,7 @@ config COMPAT_BINFMT_ELF
1443  config BINFMT_ELF_FDPIC
1444         bool "Kernel support for FDPIC ELF binaries"
1445         default y
1446 -       depends on (FRV || BLACKFIN || (SUPERH32 && !MMU))
1447 +       depends on (FRV || BLACKFIN || (SUPERH32 && !MMU) || UBICOM32)
1448         help
1449           ELF FDPIC binaries are based on ELF, but allow the individual load
1450           segments of a binary to be located in memory independently of each
1451 --- a/include/asm-generic/resource.h
1452 +++ b/include/asm-generic/resource.h
1453 @@ -69,13 +69,16 @@
1454  /*
1455   * boot-time rlimit defaults for the init task:
1456   */
1457 +#ifndef        CONFIG_ELF_CORE
1458 +#define        CONFIG_USER_ELF_CORE_SIZE       0
1459 +#endif
1460  #define INIT_RLIMITS                                                   \
1461  {                                                                      \
1462         [RLIMIT_CPU]            = {  RLIM_INFINITY,  RLIM_INFINITY },   \
1463         [RLIMIT_FSIZE]          = {  RLIM_INFINITY,  RLIM_INFINITY },   \
1464         [RLIMIT_DATA]           = {  RLIM_INFINITY,  RLIM_INFINITY },   \
1465         [RLIMIT_STACK]          = {       _STK_LIM,   _STK_LIM_MAX },   \
1466 -       [RLIMIT_CORE]           = {              0,  RLIM_INFINITY },   \
1467 +       [RLIMIT_CORE]           = { CONFIG_USER_ELF_CORE_SIZE,  RLIM_INFINITY },        \
1468         [RLIMIT_RSS]            = {  RLIM_INFINITY,  RLIM_INFINITY },   \
1469         [RLIMIT_NPROC]          = {              0,              0 },   \
1470         [RLIMIT_NOFILE]         = {       INR_OPEN,       INR_OPEN },   \
1471 --- a/include/linux/elf-em.h
1472 +++ b/include/linux/elf-em.h
1473 @@ -41,6 +41,7 @@
1474   * up with a final number.
1475   */
1476  #define EM_ALPHA       0x9026
1477 +#define EM_UBICOM32            0xde3d  /* Ubicom32; no ABI */
1478  
1479  /* Bogus old v850 magic number, used by old tools. */
1480  #define EM_CYGNUS_V850 0x9080
1481 --- a/include/linux/fb.h
1482 +++ b/include/linux/fb.h
1483 @@ -151,6 +151,10 @@ struct dentry;
1484  #define FB_ACCEL_PROSAVAGE_DDR  0x8d   /* S3 ProSavage DDR             */
1485  #define FB_ACCEL_PROSAVAGE_DDRK 0x8e   /* S3 ProSavage DDR-K           */
1486  
1487 +#define FB_ACCEL_UBICOM32              0x0100  /* Ubicom32                     */
1488 +#define FB_ACCEL_UBICOM32_VFB          0x0101  /* Ubicom32 VFB                 */
1489 +#define FB_ACCEL_UBICOM32_PLIO80       0x0102  /* Ubicom32 PLIO80              */
1490 +
1491  struct fb_fix_screeninfo {
1492         char id[16];                    /* identification string eg "TT Builtin" */
1493         unsigned long smem_start;       /* Start of frame buffer mem */
1494 --- a/include/linux/if_ppp.h
1495 +++ b/include/linux/if_ppp.h
1496 @@ -114,14 +114,14 @@ struct pppol2tp_ioc_stats {
1497         __u16           tunnel_id;      /* redundant */
1498         __u16           session_id;     /* if zero, get tunnel stats */
1499         __u32           using_ipsec:1;  /* valid only for session_id == 0 */
1500 -       aligned_u64     tx_packets;
1501 -       aligned_u64     tx_bytes;
1502 -       aligned_u64     tx_errors;
1503 -       aligned_u64     rx_packets;
1504 -       aligned_u64     rx_bytes;
1505 -       aligned_u64     rx_seq_discards;
1506 -       aligned_u64     rx_oos_packets;
1507 -       aligned_u64     rx_errors;
1508 +       __u64   tx_packets;
1509 +       __u64   tx_bytes;
1510 +       __u64   tx_errors;
1511 +       __u64   rx_packets;
1512 +       __u64   rx_bytes;
1513 +       __u64   rx_seq_discards;
1514 +       __u64   rx_oos_packets;
1515 +       __u64   rx_errors;
1516  };
1517  
1518  #define ifr__name       b.ifr_ifrn.ifrn_name
1519 --- a/include/linux/oprofile.h
1520 +++ b/include/linux/oprofile.h
1521 @@ -99,6 +99,8 @@ void oprofile_add_sample(struct pt_regs 
1522   */
1523  void oprofile_add_ext_sample(unsigned long pc, struct pt_regs * const regs,
1524                                 unsigned long event, int is_kernel);
1525 +void oprofile_add_ext_sample_cpu(unsigned long pc, struct pt_regs * const regs,
1526 +                               unsigned long event, int is_kernel, int cpu);
1527  
1528  /* Use this instead when the PC value is not from the regs. Doesn't
1529   * backtrace. */
1530 --- a/include/linux/serial_core.h
1531 +++ b/include/linux/serial_core.h
1532 @@ -167,6 +167,9 @@
1533  /* MAX3100 */
1534  #define PORT_MAX3100    86
1535  
1536 +/* Ubicom32 */
1537 +#define PORT_UBI32_UARTTIO     87
1538 +
1539  #ifdef __KERNEL__
1540  
1541  #include <linux/compiler.h>
1542 --- a/include/linux/slab.h
1543 +++ b/include/linux/slab.h
1544 @@ -317,4 +317,14 @@ static inline void *kzalloc_node(size_t 
1545         return kmalloc_node(size, flags | __GFP_ZERO, node);
1546  }
1547  
1548 +struct kmem_cache_size_info {
1549 +       unsigned short page;
1550 +       unsigned short order;
1551 +};
1552 +
1553 +/*
1554 + * get info on all the memory allocated by slab for this named cache
1555 + */
1556 +extern int kmem_cache_block_info(char *name, struct kmem_cache_size_info *data, int max_data);
1557 +
1558  #endif /* _LINUX_SLAB_H */
1559 --- a/init/Kconfig
1560 +++ b/init/Kconfig
1561 @@ -865,6 +865,12 @@ config ELF_CORE
1562         help
1563           Enable support for generating core dumps. Disabling saves about 4k.
1564  
1565 +config USER_ELF_CORE_SIZE
1566 +       int "user core dump size (10MB to 32MB)"
1567 +       range 10485760 33554432
1568 +       default 16777216
1569 +       depends on ELF_CORE
1570 +
1571  config PCSPKR_PLATFORM
1572         bool "Enable PC-Speaker support" if EMBEDDED
1573         depends on ALPHA || X86 || MIPS || PPC_PREP || PPC_CHRP || PPC_PSERIES
1574 --- a/kernel/module.c
1575 +++ b/kernel/module.c
1576 @@ -2688,6 +2688,9 @@ static int m_show(struct seq_file *m, vo
1577         /* Used by oprofile and other similar tools. */
1578         seq_printf(m, " 0x%p", mod->module_core);
1579  
1580 +#ifdef ARCH_PROC_MODULES_EXTRA
1581 +       ARCH_PROC_MODULES_EXTRA(m, mod);
1582 +#endif
1583         /* Taints info */
1584         if (mod->taints)
1585                 seq_printf(m, " %s", module_flags(mod, buf));
1586 @@ -2840,8 +2843,12 @@ void print_modules(void)
1587         printk("Modules linked in:");
1588         /* Most callers should already have preempt disabled, but make sure */
1589         preempt_disable();
1590 -       list_for_each_entry_rcu(mod, &modules, list)
1591 +       list_for_each_entry_rcu(mod, &modules, list) {
1592                 printk(" %s%s", mod->name, module_flags(mod, buf));
1593 +#ifdef ARCH_OOPS_MODULE_EXTRA
1594 +               ARCH_OOPS_MODULE_EXTRA(mod);
1595 +#endif
1596 +       }
1597         preempt_enable();
1598         if (last_unloaded_module[0])
1599                 printk(" [last unloaded: %s]", last_unloaded_module);
1600 --- a/kernel/sched_clock.c
1601 +++ b/kernel/sched_clock.c
1602 @@ -38,8 +38,7 @@
1603   */
1604  unsigned long long __attribute__((weak)) sched_clock(void)
1605  {
1606 -       return (unsigned long long)(jiffies - INITIAL_JIFFIES)
1607 -                                       * (NSEC_PER_SEC / HZ);
1608 +       return (get_jiffies_64() - INITIAL_JIFFIES) * (NSEC_PER_SEC / HZ);
1609  }
1610  
1611  static __read_mostly int sched_clock_running;
1612 --- a/lib/Kconfig.debug
1613 +++ b/lib/Kconfig.debug
1614 @@ -621,7 +621,7 @@ config FRAME_POINTER
1615         bool "Compile the kernel with frame pointers"
1616         depends on DEBUG_KERNEL && \
1617                 (CRIS || M68K || M68KNOMMU || FRV || UML || \
1618 -                AVR32 || SUPERH || BLACKFIN || MN10300) || \
1619 +                AVR32 || SUPERH || BLACKFIN || MN10300 || UBICOM32) || \
1620                 ARCH_WANT_FRAME_POINTERS
1621         default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS
1622         help
1623 --- a/mm/Makefile
1624 +++ b/mm/Makefile
1625 @@ -38,3 +38,5 @@ obj-$(CONFIG_SMP) += allocpercpu.o
1626  endif
1627  obj-$(CONFIG_QUICKLIST) += quicklist.o
1628  obj-$(CONFIG_CGROUP_MEM_RES_CTLR) += memcontrol.o page_cgroup.o
1629 +
1630 +CFLAGS_slab.o := $(PROFILING) -O2
1631 --- a/mm/slab.c
1632 +++ b/mm/slab.c
1633 @@ -4100,6 +4100,68 @@ out:
1634  
1635  #ifdef CONFIG_SLABINFO
1636  
1637 +
1638 +/*
1639 + * get info on all the memory allocated by slab for this named cache
1640 + */
1641 +int kmem_cache_block_info(char *name, struct kmem_cache_size_info *data, int max_data)
1642 +{
1643 +       int res = 0;
1644 +       int found = 0;
1645 +       int node;
1646 +       struct kmem_cache *cachep;
1647 +       struct kmem_list3 *l3;
1648 +       struct slab *slabp;
1649 +
1650 +       /* Find the cache in the chain of caches. */
1651 +       mutex_lock(&cache_chain_mutex);
1652 +       list_for_each_entry(cachep, &cache_chain, next) {
1653 +               if (strcmp(cachep->name, name) == 0) {
1654 +                       found = 1;
1655 +                       break;
1656 +               }
1657 +       }
1658 +       mutex_unlock(&cache_chain_mutex);
1659 +       if (!found) {
1660 +               return 0;
1661 +       }
1662 +       for_each_online_node(node) {
1663 +               l3 = cachep->nodelists[node];
1664 +               if (!l3)
1665 +                       continue;
1666 +               if (res >= max_data)
1667 +                       break;
1668 +               check_irq_on();
1669 +               spin_lock_irq(&l3->list_lock);
1670 +
1671 +               list_for_each_entry(slabp, &l3->slabs_full, list) {
1672 +                       if (res >= max_data)
1673 +                               break;
1674 +                       data[res].page = ((unsigned int)slabp->s_mem >> PAGE_SHIFT) & 0xffff;
1675 +                       data[res].order = cachep->gfporder;
1676 +                       res++;
1677 +               }
1678 +               list_for_each_entry(slabp, &l3->slabs_partial, list) {
1679 +                       if (res >= max_data)
1680 +                               break;
1681 +                       data[res].page = ((unsigned int)slabp->s_mem >> PAGE_SHIFT) & 0xffff;
1682 +                       data[res].order = cachep->gfporder;
1683 +                       res++;
1684 +               }
1685 +               list_for_each_entry(slabp, &l3->slabs_free, list) {
1686 +                       if (res >= max_data)
1687 +                               break;
1688 +                       data[res].page = ((unsigned int)slabp->s_mem >> PAGE_SHIFT) & 0xffff;
1689 +                       data[res].order = cachep->gfporder;
1690 +                       res++;
1691 +               }
1692 +
1693 +               spin_unlock_irq(&l3->list_lock);
1694 +       }
1695 +
1696 +       return res;
1697 +}
1698 +
1699  static void print_slabinfo_header(struct seq_file *m)
1700  {
1701         /*
1702 --- a/scripts/mod/file2alias.c
1703 +++ b/scripts/mod/file2alias.c
1704 @@ -774,6 +774,15 @@ void handle_moddevtable(struct module *m
1705                         + sym->st_value;
1706         }
1707  
1708 +       /*
1709 +        * somehow our gcc is not generating st_size correctly and set 0 for some symbols.
1710 +        * and 0 size will break do_table since it adjust size to (size - id_size)
1711 +        * this is to make sure st_size fall in range.
1712 +        */
1713 +       if (sym->st_size == 0 || sym->st_size > info->sechdrs[sym->st_shndx].sh_size) {
1714 +               sym->st_size = info->sechdrs[sym->st_shndx].sh_size;
1715 +       }
1716 +
1717         if (sym_is(symname, "__mod_pci_device_table"))
1718                 do_table(symval, sym->st_size,
1719                          sizeof(struct pci_device_id), "pci",
1720 --- a/sound/Kconfig
1721 +++ b/sound/Kconfig
1722 @@ -82,6 +82,8 @@ source "sound/parisc/Kconfig"
1723  
1724  source "sound/soc/Kconfig"
1725  
1726 +source "sound/ubicom32/Kconfig"
1727 +
1728  endif # SND
1729  
1730  menuconfig SOUND_PRIME
1731 --- a/sound/Makefile
1732 +++ b/sound/Makefile
1733 @@ -6,7 +6,7 @@ obj-$(CONFIG_SOUND_PRIME) += sound_firmw
1734  obj-$(CONFIG_SOUND_PRIME) += oss/
1735  obj-$(CONFIG_DMASOUND) += oss/
1736  obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ sh/ synth/ usb/ \
1737 -       sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/
1738 +       sparc/ spi/ parisc/ pcmcia/ mips/ soc/ atmel/ ubicom32/
1739  obj-$(CONFIG_SND_AOA) += aoa/
1740  
1741  # This one must be compilable even if sound is configured out