summaryrefslogtreecommitdiffstats
path: root/drivers
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'next' of ../custodians into nextWolfgang Denk2010-09-217-0/+2768
|\
| * Merge branch 'next' of git://git.denx.de/u-boot-usb into nextWolfgang Denk2010-09-217-0/+2768
| |\
| | * USB-CDC: Fix coding style issuesVitaly Kuzmichev2010-09-205-330/+357
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes most of checkpatch warnings and errors in USB gadget stack. The most frequently encountered problems are: 1) "(foo*)", "foo * bar", "foo* bar" 2) C99 // comments 3) No spaces before/after/around '?', ':', '=', '==', ',', '&', '(' 4) Spaces before '[' 5) Spaces between function names and '(' 6) Block braces in wrong places 7) Spaces before tabs 8) Macros with complex values not enclosed in parenthesis 9) Multiline comments start just after /* Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: called handle_interrupts inside usb_eth_sendStefano Babic2010-09-201-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | The patch removes an endless loop in the usb_eth_send if the tx_complete is not called before going in the loop. The driver interrupt routine is called allowing the driver to check if the TX is completed. Signed-off-by: Stefano Babic <sbabic@denx.de>
| | * USB-CDC: correct wrong alignment in ether.cStefano Babic2010-09-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | The buffer for the status request must be word aligned because it is accessed with 32 bit pointer in the eth_status_complete function. Signed-off-by: Stefano Babic <sbabic@denx.de>
| | * USB-CDC: change simple_strtol to simple_strtoulVitaly Kuzmichev2010-09-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch is based on commit bb9496c6f7e853e5d4edd5397c9d45f1968d623c (done by Julia Lawall <julia@diku.dk>) from linux-2.6.git. Since num is unsigned, it would seem better to use simple_strtoul that simple_strtol. Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: ethernet error path potential oops fixVitaly Kuzmichev2010-09-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix potential oops on rare error path. The patch is based on commit e7b13ec9235b9fded90f826ceeb8c34548631351 (done by David Brownell <david-b@pacbell.net>) from linux-2.6.git. Description of the issue taken from linux kernel bugzilla: (https://bugzilla.kernel.org/show_bug.cgi?id=9594) The potential error can be tracked down as follows: (1) line 807: let the second conjunct on the "if" statment be false meaning "dev->status_ep" is null. This means the "if" evaluates to false. follow thru the code until... (2) line 808: usb_ep_disable(dev->status_ep) passes in a null argument, however "usb_ep_disable" cannot handle that: (from include/linux/usb/gadget.h) 191 static inline int 192 usb_ep_disable (struct usb_ep *ep) 193 { 194 return ep->ops->disable (ep); 195 } -- Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: Correct stat_req initializationVitaly Kuzmichev2010-09-201-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | Fix possible oops on stat_req->buf initialization and fix ep0 and status_ep confusion (last one is just intended for stat_req keeping). Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com> Signed-off-by: Stefano Babic <sbabic@denx.de>
| | * USB-CDC: Replace 'strcpy' by 'strlcpy'Vitaly Kuzmichev2010-09-201-3/+3
| | | | | | | | | | | | | | | | | | Replace 'strcpy' by more safe 'strlcpy' that is implemented in ether.c Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: Correct freeing usb requestsVitaly Kuzmichev2010-09-201-2/+7
| | | | | | | | | | | | | | | | | | | | | Fix in_ep and out_ep confusion (rx_req was allocated from out_ep, not from in_ep) and add lost dev->req freeing. Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: Use native debug printout macrosVitaly Kuzmichev2010-09-201-53/+43
| | | | | | | | | | | | | | | | | | | | | | | | Replace Linux-like debug printout macros by native ones. Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com> Applied after removing dead code like '#define DEBUG/#undef DEBUG'
| | * USB-CDC: Add lost 'qmult' definitionVitaly Kuzmichev2010-09-201-0/+6
| | | | | | | | | | | | | | | | | | | | | Add lost 'qmult' definition for High Speed devices and make it configurable through CONFIG_USB_ETH_QMULT. Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * USB-CDC: Restuct USB gadget MakefileVitaly Kuzmichev2010-09-201-2/+5
| | | | | | | | | | | | | | | | | | | | | Prohibit simultaneous usage of both old and new gadget stacks and allow UDC drivers to be dependent on CONFIG_USB_ETHER. Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
| | * Integrate USB gadget layer and USB CDC driver layerRemy Bohmer2010-09-206-0/+2728
| | | | | | | | | | | | | | | | | | | | | Derived from Linux kernel 2.6.27 Signed-off-by: Thomas Smits <ts.smits@gmail.com> Signed-off-by: Remy Bohmer <linux@bohmer.net>
| | * usb: musb: stub out MUSB_TXCSR_MODE for Blackfin partsMike Frysinger2010-09-201-0/+2
| | | | | | | | | | | | | | | | | | | | | The MUSB_TXCSR_MODE register setting isn't supported on Blackfin musb parts, so stub it out to 0. This matches Linux behavior. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* | | Merge branch 'next' of ../custodians into nextWolfgang Denk2010-09-212-26/+16
|\ \ \ | |/ /
| * | cfi_flash: Remove uneccessary #ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECTStefan Roese2010-09-201-9/+1
| | | | | | | | | | | | | | | | | | | | | Now that the defines are moved to header files we don't need this conditional compilation any more. Remove it. Signed-off-by: Stefan Roese <sr@denx.de>
| * | cfi_flash: Simplify dynamic flash bank number detectionStefan Roese2010-09-201-11/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch simplifies the use of CONFIG_SYS_MAX_FLASH_BANKS_DETECT. By moving these optional variables and defines into the common code, board specific code is minimized. Currently only the following board use this feature: APC405, IDS8247, TQM834x And IDS8247 doesn't seem to really need this feature, since its not updating the bank number variable at all. So this patch removes the definition of CONFIG_SYS_MAX_FLASH_BANKS_DETECT from this board port. This new framework will be used by the upcoming lwmon5 update as well. Signed-off-by: Stefan Roese <sr@denx.de> Acked-by: Heiko Schocher <hs@denx.de> Cc: Matthias Fuchs <matthias.fuchs@esd.eu>
| * | cfi_flash: Add weak default for cfi_flash_bank_addr()Stefan Roese2010-09-201-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | cfi_flash_bank_addr(int bank_nr) returns the base addresses of the requested bank. Introducing this weak default enables boards to override this functions with a board specific version when required. This feature will be used in the lwmon5 board update, supporting runtime detection of 2 board revisions with different flash layouts. Signed-off-by: Stefan Roese <sr@denx.de>
| * | cfi_flash: Simplify flash_get_info()Stefan Roese2010-09-201-2/+2
| |/ | | | | | | | | | | | | | | | | | | This patch removes an unecessary check in the return statement. This is not needed, since "info" is initializes to NULL. And "info" will not be written to again, if the flash address is not found. Additionally "info" is not initialized to "0" but to "NULL". Signed-off-by: Stefan Roese <sr@denx.de>
* | Remove HMI10 board supportWolfgang Denk2010-09-193-163/+17
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recent changes caused that the HMI10 board now is included in the boards built by MAKEALL, which revealed that compilation for this board has been broken for a long time: ps2ser.c: In function 'ps2ser_init': ps2ser.c:155: error: 'UART_LCR' undeclared (first use in this function) ps2ser.c:155: error: (Each undeclared identifier is reported only once ps2ser.c:155: error: for each function it appears in.) ps2ser.c:156: error: 'UART_DLL' undeclared (first use in this function) ps2ser.c:157: error: 'UART_DLM' undeclared (first use in this function) ps2ser.c:159: error: 'UART_IER' undeclared (first use in this function) ps2ser.c:160: error: 'UART_MCR' undeclared (first use in this function) ps2ser.c:161: error: 'UART_FCR' undeclared (first use in this function) ps2ser.c:162: error: 'UART_FCR_ENABLE_FIFO' undeclared (first use in this function) ps2ser.c:166: error: 'UART_LSR' undeclared (first use in this function) ps2ser.c: In function 'ps2ser_putc': ps2ser.c:198: error: 'UART_LSR' undeclared (first use in this function) ps2ser.c:200: error: 'UART_TX' undeclared (first use in this function) ps2ser.c: In function 'ps2ser_getc_hw': ps2ser.c:224: error: 'UART_LSR' undeclared (first use in this function) ps2ser.c:225: error: 'UART_RX' undeclared (first use in this function) ps2ser.c: In function 'ps2ser_interrupt': ps2ser.c:293: error: 'UART_IIR' undeclared (first use in this function) The board is orphaned, and AFAICT has reached EOL. Drop support for it. Signed-off-by: Wolfgang Denk <wd@denx.de>
* i2c, omap24xx: set bus_initialized only after relocation.Heiko Schocher2010-09-191-1/+3
| | | | | | | Portions of this work were supported by funding from the CE Linux Forum. Signed-off-by: Heiko Schocher <hs@denx.de>
* mmc: fix compiler warningsWolfgang Denk2010-09-191-2/+2
| | | | | | | | | | | | | | | | Commit d2bf29e3 caused a number of compiler warnings: mmc.c: In function 'mmc_bwrite': mmc.c:97: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'long unsigned int' mmc.c:97: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'lbaint_t' mmc.c: In function 'mmc_bread': mmc.c:229: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'long unsigned int' mmc.c:229: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'lbaint_t' Fix these. Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Lei Wen <leiwen@marvell.com>
* mmc: add boundary check for mmc operationLei Wen2010-09-181-0/+10
| | | | Signed-off-by: Lei Wen <leiwen@marvell.com>
* nand/davinci: make sure ECC calculation has really startedWolfram Sang2010-09-131-1/+14
| | | | | | | | | | Due to a register glitch (result code <4 might show up right after the start-calculation-bit was set), make sure the ECC has really started. See 1c3275b656045aff9a75bb2c9f3251af1043ebb3 in the kernel. Signed-off-by: Wolfram Sang <w.sang@pengutronix.de> Cc: Sandeep Paulraj <s-paulraj@ti.com>
* usb: musb: set target address for non-multipoint devicesBryan Wu2010-09-111-0/+7
| | | | | | Signed-off-by: Bryan Wu <bryan.wu@analog.com> Signed-off-by: Cliff Cai <cliff.cai@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* usb: musb: setup TXCOUNT for Blackfin musbBryan Wu2010-09-111-0/+5
| | | | | | | | | The Blackfin implementation of musb has a TXCOUNT register that needs to be programmed when transmitting data. Signed-off-by: Bryan Wu <bryan.wu@analog.com> Signed-off-by: Cliff Cai <cliff.cai@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
* Prepare v2010.09-rc1Wolfgang Denk2010-09-102-2/+0
| | | | | | Coding style cleanup. Signed-off-by: Wolfgang Denk <wd@denx.de>
* Merge branch 'master' of git://git.denx.de/u-boot-tiWolfgang Denk2010-09-092-42/+36
|\
| * mtd: nand: supress 'unknown NAND' warning if no nand is foundSteve Sakoman2010-09-081-3/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This printk was added recently and results in ugly output on systems with no NAND: NAND: nand_get_flash_type: unknown NAND device: Manufacturer ID: 0x00, Chip ID: 0x00 0 MiB instead of: NAND: 0 MiB Signed-off-by: Steve Sakoman <steve@sakoman.com> Acked-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
| * ARMV7: OMAP: add convenience function to set TWL4030 regulator voltagesSteve Sakoman2010-09-081-39/+30
| | | | | | | | | | | | | | | | | | | | | | This patch adds a function to allow one to easily set the target voltage for the TWL4030 regulators. It also modifies the existing code to use this new function. Applicable definitions are moved out of the driver file and into the header file so that they are generally accessible Signed-off-by: Steve Sakoman <steve@sakoman.com> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
* | Merge branch 'at91' of git://git.denx.de/u-boot-atmelWolfgang Denk2010-09-086-6/+514
|\ \
| * | AT91/AVR32: atmel_spi.c: flush RDR before next SPI transactionReinhard Meyer2010-09-031-2/+11
| | | | | | | | | | | | Signed-off-by: Reinhard Meyer <u-boot@emk-elektronik.de>
| * | AT91: add RTT and GPBR based RTCReinhard Meyer2010-09-032-0/+101
| | | | | | | | | | | | Signed-off-by: Reinhard Meyer <u-boot@emk-elektronik.de>
| * | AT91: MCI: add SD/MMC driver using mmc frameworkReinhard Meyer2010-09-033-4/+402
| | | | | | | | | | | | Signed-off-by: Reinhard Meyer <u-boot@emk-elektronik.de>
* | | Merge branch 'master' of git://git.denx.de/u-boot-samsungWolfgang Denk2010-09-085-35/+21
|\ \ \
| * | | ARMV7: S5P: separate the peripheral clocksMinkyu Kang2010-08-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because of peripheral devices can select clock sources, separate the peripheral clocks. (pwm, uart and so on) It just return the pclk at s5pc1xx SoC, but s5pc210 SoC must be calculated by own clock register setting. Signed-off-by: Minkyu Kang <mk7.kang@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
| * | | ARMV7: S5P: rename from CONFIG_S5PC1XX to CONFIG_S5PMinkyu Kang2010-08-263-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the same configuration around S5P SoCs. (s5pc100, s5pc110, s5pc210 and so on) Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
| * | | S5P: Use accessor functions instead of SoC specific defines to access the ↵Minkyu Kang2010-08-172-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | base address This patch is intended to prepare the other S5P SoC. (s5pc210) If use SoC specific defines then can't share with other SoC. So, make the accessor functions for access the base address by common way. Signed-off-by: Minkyu Kang <mk7.kang@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
| * | | S5P: mmc: use the standard debug macroMinkyu Kang2010-08-101-18/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the standard debug macro instead of the costom macro Signed-off-by: Minkyu Kang <mk7.kang@samsung.com> Cc: Wolfgang Denk <wd@denx.de>
* | | | Merge branch 'master' of /home/wd/git/u-boot/masterWolfgang Denk2010-09-076-509/+462
|\ \ \ \ | | |_|/ | |/| |
| * | | Merge branch 'master' of git://git.denx.de/u-boot-i2cWolfgang Denk2010-09-074-499/+431
| |\ \ \
| | * | | i2c: rewrite mvtwsi, support orion5x and kirkwoodAlbert Aribaud2010-08-301-409/+341
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This rewrite of the mvtwsi driver is 25% smaller and much faster and simpler than the previous code. Signed-off-by: Albert Aribaud <albert.aribaud@free.fr> Acked-by: Prafulla Wadaskar<prafulla@marvell.com> Acked-by: Heiko Schocher<hs@denx.de>
| | * | | i2c: rename kirkwood_i2c to mvtwsiAlbert Aribaud2010-08-302-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This driver is not kirkwood-specific and can also be used e.g. by orion5x. Rename to a SoC-neutral name. Signed-off-by: Albert Aribaud <albert.aribaud@free.fr> Acked-by: Prafulla Wadaskar<prafulla@marvell.com> Acked-by: Heiko Schocher<hs@denx.de>
| | * | | i2c: omap2+: change header guard to be genericNishanth Menon2010-08-231-2/+2
| | | |/ | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make the header guard to be generic to stop conflicting with omap2 i2c header file arch/arm/include/asm/arch-omap24xx/i2c.h Cc: Steve Sakoman <steve@sakoman.com> Cc: Heiko <hs@denx.de> Cc: Sandeep Paulraj <s-paulraj@ti.com> Cc: Wolfang Denk <wd@denx.de> Signed-off-by: Nishanth Menon <nm@ti.com> Acked-by: Steve Sakoman <steve@sakoman.com>
| * | | powerpc/8xxx: Fix dma for 36bit addressingYork Sun2010-08-311-2/+6
| |/ / | | | | | | | | | | | | | | | | | | Use more bits to support 36-bit addressing Signed-off-by: York Sun <yorksun@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
| * | Work around bug in Numonyx P33/P30 256-Mbit 65nm flash chips.Philippe De Muyter2010-08-181-8/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I have "ported" U-boot to a in house made board with Numonyx Axcell P33/P30 256-Mbit 65nm flash chips. After some time :( searching for bugs in our board or soft, we have discovered that those chips have a small but annoying bug, documented in "Numonyx Axcell P33/P30 256-Mbit Specification Update" It states : When customer uses [...] block unlock, the block lock status might be altered inadvertently. Lock status might be set to either 01h or 03h unexpectedly (00h as expected data), which leads to program/erase failure on certain blocks. A working workaround is given, which I have applied and tested with success : Workaround: If the interval between 60h and its subsequent command can be guaranteed within 20us, Option I is recommended, otherwise Option II (involves hardware) should be selected. Option I: The table below lists the detail command sequences: Command Data bus Address bus Remarks Sequence 1 90h Block Address Read Lock Status 2 Read Block Address + 02h (2)(3) (1) 3 60h Block Address (2)(3) (1) Lock/Unlock/RCR Configuration 4 D0h/01h/03h Block Address Notes: (1) Block Address refers to RCR configuration data only when the 60h command sequence is used to set RCR register combined with 03h subsequent command. (2) For the third and fourth command sequences, the Block Address must be the same. (3) The interval between 60h command and its subsequent D0h/01h/2Fh/03h commands should be less than 20us. And here is a log comparison of a simple (destructive) flash test without and with the workaround. diff without-numonyx-workaround.log with-numonyx-workaround.log -U-Boot 2010.06-00696-g22b002c-dirty (Aug 16 2010 - 15:07:47) +U-Boot 2010.06-00696-g22b002c-dirty (Aug 16 2010 - 15:25:19) CPU: Freescale MCF5484 CPU CLK 200 MHz BUS CLK 100 MHz Board: Macq Electronique ME2060 I2C: ready DRAM: 64 MiB FLASH: 32 MiB In: serial Out: serial Err: serial Net: FEC0, FEC1 -> flinfo Bank # 1: CFI conformant FLASH (16 x 16) Size: 32 MB in 259 Sectors Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x8922 Erase timeout: 4096 ms, write timeout: 1 ms Buffer write timeout: 5 ms, buffer size: 1024 bytes Sector Start Addresses: FE000000 RO FE008000 RO FE010000 RO FE018000 RO FE020000 RO FE040000 RO FE060000 RO FE080000 RO FE0A0000 RO FE0C0000 RO ... FFF80000 RO FFFA0000 RO FFFC0000 RO FFFE0000 RO -> protect off all Un-Protect Flash Bank # 1 ................... done -> erase all Erase Flash Bank # 1 ................... done -> cp.b 1000000 fe000000 2000000 -Copy to Flash... Flash not Erased +Copy to Flash... done -> Signed-off-by: Philippe De Muyter <phdm@macqel.be> Signed-off-by: Stefan Roese <sr@denx.de>
* | | Merge branch 'master' of /home/wd/git/u-boot/masterWolfgang Denk2010-08-186-27/+288
|\ \ \ | |/ /
| * | cfi_flash: Cleanup flash_print_info()Stefan Roese2010-08-181-24/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch does the following: - Extract code to detect if sector is erased into function sector_erased(). - Because of this, we don't have variable declarations inside the sector loop in flash_print_info() - Change "return" to "break" in the "if (ctrlc()) statement: This fixes a problem with the resulting output. Before this patch the output was: Sector Start Addresses: FC000000 FC020000 FC040000 => With this patch it is now: Sector Start Addresses: FC000000 FC020000 FC040000 => Signed-off-by: Stefan Roese <sr@denx.de> Cc: Kim Phillips <kim.phillips@freescale.com> Cc: Wolfgang Denk <wd@denx.de>
| * | Fix printing & reading of 16-bit CFI device identifiersPhilippe De Muyter2010-08-181-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix reading and printing of CFI flashes 16-bit devices identifiers Nowadays CFI flashes have a 16-bit device identifier. U-boot still print them and read them as if they were only 8-bit wide. Fix that. Before: Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x1B After: Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x881B Signed-off-by: Philippe De Muyter <phdm@macqel.be> Signed-off-by: Stefan Roese <sr@denx.de>
OpenPOWER on IntegriCloud