You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge commit 'v2.6.37-rc7' into perf/core
Merge reason: Pick up the latest -rc. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -173,12 +173,13 @@ prototypes:
|
|||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
int (*launder_page) (struct page *);
|
int (*launder_page) (struct page *);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All except set_page_dirty may block
|
All except set_page_dirty and freepage may block
|
||||||
|
|
||||||
BKL PageLocked(page) i_mutex
|
BKL PageLocked(page) i_mutex
|
||||||
writepage: no yes, unlocks (see below)
|
writepage: no yes, unlocks (see below)
|
||||||
@@ -193,6 +194,7 @@ perform_write: no n/a yes
|
|||||||
bmap: no
|
bmap: no
|
||||||
invalidatepage: no yes
|
invalidatepage: no yes
|
||||||
releasepage: no yes
|
releasepage: no yes
|
||||||
|
freepage: no yes
|
||||||
direct_IO: no
|
direct_IO: no
|
||||||
launder_page: no yes
|
launder_page: no yes
|
||||||
|
|
||||||
@@ -288,6 +290,9 @@ buffers from the page in preparation for freeing it. It returns zero to
|
|||||||
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
||||||
the kernel assumes that the fs has no private interest in the buffers.
|
the kernel assumes that the fs has no private interest in the buffers.
|
||||||
|
|
||||||
|
->freepage() is called when the kernel is done dropping the page
|
||||||
|
from the page cache.
|
||||||
|
|
||||||
->launder_page() may be called prior to releasing a page if
|
->launder_page() may be called prior to releasing a page if
|
||||||
it is still found to be dirty. It returns zero if the page was successfully
|
it is still found to be dirty. It returns zero if the page was successfully
|
||||||
cleaned, or an error value if not. Note that in order to prevent the page
|
cleaned, or an error value if not. Note that in order to prevent the page
|
||||||
|
|||||||
@@ -534,6 +534,7 @@ struct address_space_operations {
|
|||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
||||||
@@ -678,6 +679,12 @@ struct address_space_operations {
|
|||||||
need to ensure this. Possibly it can clear the PageUptodate
|
need to ensure this. Possibly it can clear the PageUptodate
|
||||||
bit if it cannot free private data yet.
|
bit if it cannot free private data yet.
|
||||||
|
|
||||||
|
freepage: freepage is called once the page is no longer visible in
|
||||||
|
the page cache in order to allow the cleanup of any private
|
||||||
|
data. Since it may be called by the memory reclaimer, it
|
||||||
|
should not assume that the original address_space mapping still
|
||||||
|
exists, and it should not block.
|
||||||
|
|
||||||
direct_IO: called by the generic read/write routines to perform
|
direct_IO: called by the generic read/write routines to perform
|
||||||
direct_IO - that is IO requests which bypass the page cache
|
direct_IO - that is IO requests which bypass the page cache
|
||||||
and transfer data directly between the storage and the
|
and transfer data directly between the storage and the
|
||||||
|
|||||||
@@ -2167,11 +2167,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
reset_devices [KNL] Force drivers to reset the underlying device
|
reset_devices [KNL] Force drivers to reset the underlying device
|
||||||
during initialization.
|
during initialization.
|
||||||
|
|
||||||
resource_alloc_from_bottom
|
|
||||||
Allocate new resources from the beginning of available
|
|
||||||
space, not the end. If you need to use this, please
|
|
||||||
report a bug.
|
|
||||||
|
|
||||||
resume= [SWSUSP]
|
resume= [SWSUSP]
|
||||||
Specify the partition device for software suspend
|
Specify the partition device for software suspend
|
||||||
|
|
||||||
|
|||||||
@@ -379,8 +379,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||||||
zero)
|
zero)
|
||||||
|
|
||||||
bool pm_runtime_suspended(struct device *dev);
|
bool pm_runtime_suspended(struct device *dev);
|
||||||
- return true if the device's runtime PM status is 'suspended', or false
|
- return true if the device's runtime PM status is 'suspended' and its
|
||||||
otherwise
|
'power.disable_depth' field is equal to zero, or false otherwise
|
||||||
|
|
||||||
void pm_runtime_allow(struct device *dev);
|
void pm_runtime_allow(struct device *dev);
|
||||||
- set the power.runtime_auto flag for the device and decrease its usage
|
- set the power.runtime_auto flag for the device and decrease its usage
|
||||||
|
|||||||
+12
-4
@@ -559,14 +559,14 @@ W: http://maxim.org.za/at91_26.html
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/BCMRING ARM ARCHITECTURE
|
ARM/BCMRING ARM ARCHITECTURE
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-bcmring
|
F: arch/arm/mach-bcmring
|
||||||
|
|
||||||
ARM/BCMRING MTD NAND DRIVER
|
ARM/BCMRING MTD NAND DRIVER
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-mtd@lists.infradead.org
|
L: linux-mtd@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -815,7 +815,7 @@ F: drivers/mmc/host/msm_sdcc.c
|
|||||||
F: drivers/mmc/host/msm_sdcc.h
|
F: drivers/mmc/host/msm_sdcc.h
|
||||||
F: drivers/serial/msm_serial.h
|
F: drivers/serial/msm_serial.h
|
||||||
F: drivers/serial/msm_serial.c
|
F: drivers/serial/msm_serial.c
|
||||||
T: git git://codeaurora.org/quic/kernel/dwalker/linux-msm.git
|
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
@@ -5932,7 +5932,6 @@ F: include/linux/tty.h
|
|||||||
|
|
||||||
TULIP NETWORK DRIVERS
|
TULIP NETWORK DRIVERS
|
||||||
M: Grant Grundler <grundler@parisc-linux.org>
|
M: Grant Grundler <grundler@parisc-linux.org>
|
||||||
M: Kyle McMartin <kyle@mcmartin.ca>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/tulip/
|
F: drivers/net/tulip/
|
||||||
@@ -6584,6 +6583,15 @@ F: include/linux/mfd/wm8400*
|
|||||||
F: include/sound/wm????.h
|
F: include/sound/wm????.h
|
||||||
F: sound/soc/codecs/wm*
|
F: sound/soc/codecs/wm*
|
||||||
|
|
||||||
|
WORKQUEUE
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/workqueue.h
|
||||||
|
F: kernel/workqueue.c
|
||||||
|
F: Documentation/workqueue.txt
|
||||||
|
|
||||||
X.25 NETWORK LAYER
|
X.25 NETWORK LAYER
|
||||||
M: Andrew Hendry <andrew.hendry@gmail.com>
|
M: Andrew Hendry <andrew.hendry@gmail.com>
|
||||||
L: linux-x25@vger.kernel.org
|
L: linux-x25@vger.kernel.org
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 37
|
SUBLEVEL = 37
|
||||||
EXTRAVERSION = -rc5
|
EXTRAVERSION = -rc7
|
||||||
NAME = Flesh-Eating Bats with Fangs
|
NAME = Flesh-Eating Bats with Fangs
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|||||||
+2
-2
@@ -1311,7 +1311,7 @@ config HZ
|
|||||||
|
|
||||||
config THUMB2_KERNEL
|
config THUMB2_KERNEL
|
||||||
bool "Compile the kernel in Thumb-2 mode"
|
bool "Compile the kernel in Thumb-2 mode"
|
||||||
depends on CPU_V7 && EXPERIMENTAL
|
depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL
|
||||||
select AEABI
|
select AEABI
|
||||||
select ARM_ASM_UNIFIED
|
select ARM_ASM_UNIFIED
|
||||||
help
|
help
|
||||||
@@ -1759,7 +1759,7 @@ comment "At least one emulation must be selected"
|
|||||||
|
|
||||||
config FPE_NWFPE
|
config FPE_NWFPE
|
||||||
bool "NWFPE math emulation"
|
bool "NWFPE math emulation"
|
||||||
depends on !AEABI || OABI_COMPAT
|
depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
|
||||||
---help---
|
---help---
|
||||||
Say Y to include the NWFPE floating point emulator in the kernel.
|
Say Y to include the NWFPE floating point emulator in the kernel.
|
||||||
This is necessary to run most binaries. Linux does not currently
|
This is necessary to run most binaries. Linux does not currently
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o
|
|||||||
obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o
|
obj-$(CONFIG_MACH_CPU9G20) += board-cpu9krea.o
|
||||||
obj-$(CONFIG_MACH_STAMP9G20) += board-stamp9g20.o
|
obj-$(CONFIG_MACH_STAMP9G20) += board-stamp9g20.o
|
||||||
obj-$(CONFIG_MACH_PORTUXG20) += board-stamp9g20.o
|
obj-$(CONFIG_MACH_PORTUXG20) += board-stamp9g20.o
|
||||||
obj-$(CONFIG_MACH_PCONTROL_G20) += board-pcontrol-g20.o
|
obj-$(CONFIG_MACH_PCONTROL_G20) += board-pcontrol-g20.o board-stamp9g20.o
|
||||||
|
|
||||||
# AT91SAM9260/AT91SAM9G20 board-specific support
|
# AT91SAM9260/AT91SAM9G20 board-specific support
|
||||||
obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o
|
obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#include <mach/board.h>
|
#include <mach/board.h>
|
||||||
#include <mach/at91sam9_smc.h>
|
#include <mach/at91sam9_smc.h>
|
||||||
|
#include <mach/stamp9g20.h>
|
||||||
|
|
||||||
#include "sam9_smc.h"
|
#include "sam9_smc.h"
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
@@ -38,11 +39,7 @@
|
|||||||
|
|
||||||
static void __init pcontrol_g20_map_io(void)
|
static void __init pcontrol_g20_map_io(void)
|
||||||
{
|
{
|
||||||
/* Initialize processor: 18.432 MHz crystal */
|
stamp9g20_map_io();
|
||||||
at91sam9260_initialize(18432000);
|
|
||||||
|
|
||||||
/* DGBU on ttyS0. (Rx, Tx) only TTL -> JTAG connector X7 17,19 ) */
|
|
||||||
at91_register_uart(0, 0, 0);
|
|
||||||
|
|
||||||
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback A2 */
|
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback A2 */
|
||||||
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS
|
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS
|
||||||
@@ -54,9 +51,6 @@ static void __init pcontrol_g20_map_io(void)
|
|||||||
|
|
||||||
/* USART2 on ttyS3. (Rx, Tx) 9bit-Bus Multidrop-mode X4 */
|
/* USART2 on ttyS3. (Rx, Tx) 9bit-Bus Multidrop-mode X4 */
|
||||||
at91_register_uart(AT91SAM9260_ID_US4, 3, 0);
|
at91_register_uart(AT91SAM9260_ID_US4, 3, 0);
|
||||||
|
|
||||||
/* set serial console to ttyS0 (ie, DBGU) */
|
|
||||||
at91_set_serial_console(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -66,38 +60,6 @@ static void __init init_irq(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* NAND flash 512MiB 1,8V 8-bit, sector size 128 KiB
|
|
||||||
*/
|
|
||||||
static struct atmel_nand_data __initdata nand_data = {
|
|
||||||
.ale = 21,
|
|
||||||
.cle = 22,
|
|
||||||
.rdy_pin = AT91_PIN_PC13,
|
|
||||||
.enable_pin = AT91_PIN_PC14,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bus timings; unit = 7.57ns
|
|
||||||
*/
|
|
||||||
static struct sam9_smc_config __initdata nand_smc_config = {
|
|
||||||
.ncs_read_setup = 0,
|
|
||||||
.nrd_setup = 2,
|
|
||||||
.ncs_write_setup = 0,
|
|
||||||
.nwe_setup = 2,
|
|
||||||
|
|
||||||
.ncs_read_pulse = 4,
|
|
||||||
.nrd_pulse = 4,
|
|
||||||
.ncs_write_pulse = 4,
|
|
||||||
.nwe_pulse = 4,
|
|
||||||
|
|
||||||
.read_cycle = 7,
|
|
||||||
.write_cycle = 7,
|
|
||||||
|
|
||||||
.mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE
|
|
||||||
| AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
|
|
||||||
.tdf_cycles = 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
|
static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
|
||||||
.ncs_read_setup = 16,
|
.ncs_read_setup = 16,
|
||||||
.nrd_setup = 18,
|
.nrd_setup = 18,
|
||||||
@@ -138,14 +100,6 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
|
|||||||
.tdf_cycles = 1,
|
.tdf_cycles = 1,
|
||||||
} };
|
} };
|
||||||
|
|
||||||
static void __init add_device_nand(void)
|
|
||||||
{
|
|
||||||
/* configure chip-select 3 (NAND) */
|
|
||||||
sam9_smc_configure(3, &nand_smc_config);
|
|
||||||
at91_add_device_nand(&nand_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void __init add_device_pcontrol(void)
|
static void __init add_device_pcontrol(void)
|
||||||
{
|
{
|
||||||
/* configure chip-select 4 (IO compatible to 8051 X4 ) */
|
/* configure chip-select 4 (IO compatible to 8051 X4 ) */
|
||||||
@@ -155,23 +109,6 @@ static void __init add_device_pcontrol(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* MCI (SD/MMC)
|
|
||||||
* det_pin, wp_pin and vcc_pin are not connected
|
|
||||||
*/
|
|
||||||
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
|
|
||||||
static struct mci_platform_data __initdata mmc_data = {
|
|
||||||
.slot[0] = {
|
|
||||||
.bus_width = 4,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
static struct at91_mmc_data __initdata mmc_data = {
|
|
||||||
.wire4 = 1,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB Host port
|
* USB Host port
|
||||||
*/
|
*/
|
||||||
@@ -265,42 +202,13 @@ static struct spi_board_info pcontrol_g20_spi_devices[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Dallas 1-Wire DS2431
|
|
||||||
*/
|
|
||||||
static struct w1_gpio_platform_data w1_gpio_pdata = {
|
|
||||||
.pin = AT91_PIN_PA29,
|
|
||||||
.is_open_drain = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device w1_device = {
|
|
||||||
.name = "w1-gpio",
|
|
||||||
.id = -1,
|
|
||||||
.dev.platform_data = &w1_gpio_pdata,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void add_wire1(void)
|
|
||||||
{
|
|
||||||
at91_set_GPIO_periph(w1_gpio_pdata.pin, 1);
|
|
||||||
at91_set_multi_drive(w1_gpio_pdata.pin, 1);
|
|
||||||
platform_device_register(&w1_device);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void __init pcontrol_g20_board_init(void)
|
static void __init pcontrol_g20_board_init(void)
|
||||||
{
|
{
|
||||||
at91_add_device_serial();
|
stamp9g20_board_init();
|
||||||
add_device_nand();
|
|
||||||
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
|
|
||||||
at91_add_device_mci(0, &mmc_data);
|
|
||||||
#else
|
|
||||||
at91_add_device_mmc(0, &mmc_data);
|
|
||||||
#endif
|
|
||||||
at91_add_device_usbh(&usbh_data);
|
at91_add_device_usbh(&usbh_data);
|
||||||
at91_add_device_eth(&macb_data);
|
at91_add_device_eth(&macb_data);
|
||||||
at91_add_device_i2c(pcontrol_g20_i2c_devices,
|
at91_add_device_i2c(pcontrol_g20_i2c_devices,
|
||||||
ARRAY_SIZE(pcontrol_g20_i2c_devices));
|
ARRAY_SIZE(pcontrol_g20_i2c_devices));
|
||||||
add_wire1();
|
|
||||||
add_device_pcontrol();
|
add_device_pcontrol();
|
||||||
at91_add_device_spi(pcontrol_g20_spi_devices,
|
at91_add_device_spi(pcontrol_g20_spi_devices,
|
||||||
ARRAY_SIZE(pcontrol_g20_spi_devices));
|
ARRAY_SIZE(pcontrol_g20_spi_devices));
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
|
|
||||||
|
|
||||||
static void __init portuxg20_map_io(void)
|
void __init stamp9g20_map_io(void)
|
||||||
{
|
{
|
||||||
/* Initialize processor: 18.432 MHz crystal */
|
/* Initialize processor: 18.432 MHz crystal */
|
||||||
at91sam9260_initialize(18432000);
|
at91sam9260_initialize(18432000);
|
||||||
@@ -40,6 +40,24 @@ static void __init portuxg20_map_io(void)
|
|||||||
/* DGBU on ttyS0. (Rx & Tx only) */
|
/* DGBU on ttyS0. (Rx & Tx only) */
|
||||||
at91_register_uart(0, 0, 0);
|
at91_register_uart(0, 0, 0);
|
||||||
|
|
||||||
|
/* set serial console to ttyS0 (ie, DBGU) */
|
||||||
|
at91_set_serial_console(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init stamp9g20evb_map_io(void)
|
||||||
|
{
|
||||||
|
stamp9g20_map_io();
|
||||||
|
|
||||||
|
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
|
||||||
|
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
|
||||||
|
| ATMEL_UART_DTR | ATMEL_UART_DSR
|
||||||
|
| ATMEL_UART_DCD | ATMEL_UART_RI);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init portuxg20_map_io(void)
|
||||||
|
{
|
||||||
|
stamp9g20_map_io();
|
||||||
|
|
||||||
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
|
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
|
||||||
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
|
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
|
||||||
| ATMEL_UART_DTR | ATMEL_UART_DSR
|
| ATMEL_UART_DTR | ATMEL_UART_DSR
|
||||||
@@ -56,26 +74,6 @@ static void __init portuxg20_map_io(void)
|
|||||||
|
|
||||||
/* USART5 on ttyS6. (Rx, Tx only) */
|
/* USART5 on ttyS6. (Rx, Tx only) */
|
||||||
at91_register_uart(AT91SAM9260_ID_US5, 6, 0);
|
at91_register_uart(AT91SAM9260_ID_US5, 6, 0);
|
||||||
|
|
||||||
/* set serial console to ttyS0 (ie, DBGU) */
|
|
||||||
at91_set_serial_console(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init stamp9g20_map_io(void)
|
|
||||||
{
|
|
||||||
/* Initialize processor: 18.432 MHz crystal */
|
|
||||||
at91sam9260_initialize(18432000);
|
|
||||||
|
|
||||||
/* DGBU on ttyS0. (Rx & Tx only) */
|
|
||||||
at91_register_uart(0, 0, 0);
|
|
||||||
|
|
||||||
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
|
|
||||||
at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS
|
|
||||||
| ATMEL_UART_DTR | ATMEL_UART_DSR
|
|
||||||
| ATMEL_UART_DCD | ATMEL_UART_RI);
|
|
||||||
|
|
||||||
/* set serial console to ttyS0 (ie, DBGU) */
|
|
||||||
at91_set_serial_console(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init init_irq(void)
|
static void __init init_irq(void)
|
||||||
@@ -156,7 +154,7 @@ static struct at91_udc_data __initdata portuxg20_udc_data = {
|
|||||||
.pullup_pin = 0, /* pull-up driven by UDC */
|
.pullup_pin = 0, /* pull-up driven by UDC */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct at91_udc_data __initdata stamp9g20_udc_data = {
|
static struct at91_udc_data __initdata stamp9g20evb_udc_data = {
|
||||||
.vbus_pin = AT91_PIN_PA22,
|
.vbus_pin = AT91_PIN_PA22,
|
||||||
.pullup_pin = 0, /* pull-up driven by UDC */
|
.pullup_pin = 0, /* pull-up driven by UDC */
|
||||||
};
|
};
|
||||||
@@ -190,7 +188,7 @@ static struct gpio_led portuxg20_leds[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gpio_led stamp9g20_leds[] = {
|
static struct gpio_led stamp9g20evb_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "D8",
|
.name = "D8",
|
||||||
.gpio = AT91_PIN_PB18,
|
.gpio = AT91_PIN_PB18,
|
||||||
@@ -250,7 +248,7 @@ void add_w1(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void __init generic_board_init(void)
|
void __init stamp9g20_board_init(void)
|
||||||
{
|
{
|
||||||
/* Serial */
|
/* Serial */
|
||||||
at91_add_device_serial();
|
at91_add_device_serial();
|
||||||
@@ -262,34 +260,40 @@ static void __init generic_board_init(void)
|
|||||||
#else
|
#else
|
||||||
at91_add_device_mmc(0, &mmc_data);
|
at91_add_device_mmc(0, &mmc_data);
|
||||||
#endif
|
#endif
|
||||||
/* USB Host */
|
|
||||||
at91_add_device_usbh(&usbh_data);
|
|
||||||
/* Ethernet */
|
|
||||||
at91_add_device_eth(&macb_data);
|
|
||||||
/* I2C */
|
|
||||||
at91_add_device_i2c(NULL, 0);
|
|
||||||
/* W1 */
|
/* W1 */
|
||||||
add_w1();
|
add_w1();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init portuxg20_board_init(void)
|
static void __init portuxg20_board_init(void)
|
||||||
{
|
{
|
||||||
generic_board_init();
|
stamp9g20_board_init();
|
||||||
/* SPI */
|
/* USB Host */
|
||||||
at91_add_device_spi(portuxg20_spi_devices, ARRAY_SIZE(portuxg20_spi_devices));
|
at91_add_device_usbh(&usbh_data);
|
||||||
/* USB Device */
|
/* USB Device */
|
||||||
at91_add_device_udc(&portuxg20_udc_data);
|
at91_add_device_udc(&portuxg20_udc_data);
|
||||||
|
/* Ethernet */
|
||||||
|
at91_add_device_eth(&macb_data);
|
||||||
|
/* I2C */
|
||||||
|
at91_add_device_i2c(NULL, 0);
|
||||||
|
/* SPI */
|
||||||
|
at91_add_device_spi(portuxg20_spi_devices, ARRAY_SIZE(portuxg20_spi_devices));
|
||||||
/* LEDs */
|
/* LEDs */
|
||||||
at91_gpio_leds(portuxg20_leds, ARRAY_SIZE(portuxg20_leds));
|
at91_gpio_leds(portuxg20_leds, ARRAY_SIZE(portuxg20_leds));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init stamp9g20_board_init(void)
|
static void __init stamp9g20evb_board_init(void)
|
||||||
{
|
{
|
||||||
generic_board_init();
|
stamp9g20_board_init();
|
||||||
|
/* USB Host */
|
||||||
|
at91_add_device_usbh(&usbh_data);
|
||||||
/* USB Device */
|
/* USB Device */
|
||||||
at91_add_device_udc(&stamp9g20_udc_data);
|
at91_add_device_udc(&stamp9g20evb_udc_data);
|
||||||
|
/* Ethernet */
|
||||||
|
at91_add_device_eth(&macb_data);
|
||||||
|
/* I2C */
|
||||||
|
at91_add_device_i2c(NULL, 0);
|
||||||
/* LEDs */
|
/* LEDs */
|
||||||
at91_gpio_leds(stamp9g20_leds, ARRAY_SIZE(stamp9g20_leds));
|
at91_gpio_leds(stamp9g20evb_leds, ARRAY_SIZE(stamp9g20evb_leds));
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(PORTUXG20, "taskit PortuxG20")
|
MACHINE_START(PORTUXG20, "taskit PortuxG20")
|
||||||
@@ -305,7 +309,7 @@ MACHINE_START(STAMP9G20, "taskit Stamp9G20")
|
|||||||
/* Maintainer: taskit GmbH */
|
/* Maintainer: taskit GmbH */
|
||||||
.boot_params = AT91_SDRAM_BASE + 0x100,
|
.boot_params = AT91_SDRAM_BASE + 0x100,
|
||||||
.timer = &at91sam926x_timer,
|
.timer = &at91sam926x_timer,
|
||||||
.map_io = stamp9g20_map_io,
|
.map_io = stamp9g20evb_map_io,
|
||||||
.init_irq = init_irq,
|
.init_irq = init_irq,
|
||||||
.init_machine = stamp9g20_board_init,
|
.init_machine = stamp9g20evb_board_init,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|||||||
@@ -658,7 +658,7 @@ static void __init at91_upll_usbfs_clock_init(unsigned long main_clock)
|
|||||||
/* Now set uhpck values */
|
/* Now set uhpck values */
|
||||||
uhpck.parent = &utmi_clk;
|
uhpck.parent = &utmi_clk;
|
||||||
uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
|
uhpck.pmc_mask = AT91SAM926x_PMC_UHP;
|
||||||
uhpck.rate_hz = utmi_clk.parent->rate_hz;
|
uhpck.rate_hz = utmi_clk.rate_hz;
|
||||||
uhpck.rate_hz /= 1 + ((at91_sys_read(AT91_PMC_USB) & AT91_PMC_OHCIUSBDIV) >> 8);
|
uhpck.rate_hz /= 1 + ((at91_sys_read(AT91_PMC_USB) & AT91_PMC_OHCIUSBDIV) >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#ifndef __MACH_STAMP9G20_H
|
||||||
|
#define __MACH_STAMP9G20_H
|
||||||
|
|
||||||
|
void stamp9g20_map_io(void);
|
||||||
|
void stamp9g20_board_init(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -126,7 +126,6 @@ static APBC_CLK(twsi3, MMP2_TWSI3, 0, 26000000);
|
|||||||
static APBC_CLK(twsi4, MMP2_TWSI4, 0, 26000000);
|
static APBC_CLK(twsi4, MMP2_TWSI4, 0, 26000000);
|
||||||
static APBC_CLK(twsi5, MMP2_TWSI5, 0, 26000000);
|
static APBC_CLK(twsi5, MMP2_TWSI5, 0, 26000000);
|
||||||
static APBC_CLK(twsi6, MMP2_TWSI6, 0, 26000000);
|
static APBC_CLK(twsi6, MMP2_TWSI6, 0, 26000000);
|
||||||
static APBC_CLK(rtc, MMP2_RTC, 0, 32768);
|
|
||||||
|
|
||||||
static APMU_CLK(nand, NAND, 0xbf, 100000000);
|
static APMU_CLK(nand, NAND, 0xbf, 100000000);
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
|
|||||||
{
|
{
|
||||||
.name = "wl1271",
|
.name = "wl1271",
|
||||||
.mmc = 3,
|
.mmc = 3,
|
||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.nonremovable = true,
|
.nonremovable = true,
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ static int __init _omap2_init_reprogram_sdrc(void)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
|
dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
|
||||||
if (!dpll3_m2_ck)
|
if (IS_ERR(dpll3_m2_ck))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
rate = clk_get_rate(dpll3_m2_ck);
|
rate = clk_get_rate(dpll3_m2_ck);
|
||||||
|
|||||||
@@ -161,6 +161,23 @@ void omap2_pm_dump(int mode, int resume, unsigned int us)
|
|||||||
printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val);
|
printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
|
||||||
|
{
|
||||||
|
u32 tick_rate, cycles;
|
||||||
|
|
||||||
|
if (!seconds && !milliseconds)
|
||||||
|
return;
|
||||||
|
|
||||||
|
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
||||||
|
cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
|
||||||
|
omap_dm_timer_stop(gptimer_wakeup);
|
||||||
|
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
||||||
|
|
||||||
|
pr_info("PM: Resume timer in %u.%03u secs"
|
||||||
|
" (%d ticks at %d ticks/sec.)\n",
|
||||||
|
seconds, milliseconds, cycles, tick_rate);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
@@ -354,23 +371,6 @@ void pm_dbg_update_time(struct powerdomain *pwrdm, int prev)
|
|||||||
pwrdm->timer = t;
|
pwrdm->timer = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
|
|
||||||
{
|
|
||||||
u32 tick_rate, cycles;
|
|
||||||
|
|
||||||
if (!seconds && !milliseconds)
|
|
||||||
return;
|
|
||||||
|
|
||||||
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
|
||||||
cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
|
|
||||||
omap_dm_timer_stop(gptimer_wakeup);
|
|
||||||
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
|
||||||
|
|
||||||
pr_info("PM: Resume timer in %u.%03u secs"
|
|
||||||
" (%d ticks at %d ticks/sec.)\n",
|
|
||||||
seconds, milliseconds, cycles, tick_rate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user)
|
static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user)
|
||||||
{
|
{
|
||||||
struct seq_file *s = (struct seq_file *)user;
|
struct seq_file *s = (struct seq_file *)user;
|
||||||
|
|||||||
@@ -53,6 +53,19 @@
|
|||||||
#include <plat/powerdomain.h>
|
#include <plat/powerdomain.h>
|
||||||
#include <plat/clockdomain.h>
|
#include <plat/clockdomain.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_SUSPEND
|
||||||
|
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return (suspend_state != PM_SUSPEND_ON);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void (*omap2_sram_idle)(void);
|
static void (*omap2_sram_idle)(void);
|
||||||
static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
|
static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
|
||||||
void __iomem *sdrc_power);
|
void __iomem *sdrc_power);
|
||||||
@@ -120,8 +133,9 @@ static void omap2_enter_full_retention(void)
|
|||||||
goto no_sleep;
|
goto no_sleep;
|
||||||
|
|
||||||
/* Block console output in case it is on one of the OMAP UARTs */
|
/* Block console output in case it is on one of the OMAP UARTs */
|
||||||
if (try_acquire_console_sem())
|
if (!is_suspending())
|
||||||
goto no_sleep;
|
if (try_acquire_console_sem())
|
||||||
|
goto no_sleep;
|
||||||
|
|
||||||
omap_uart_prepare_idle(0);
|
omap_uart_prepare_idle(0);
|
||||||
omap_uart_prepare_idle(1);
|
omap_uart_prepare_idle(1);
|
||||||
@@ -136,7 +150,8 @@ static void omap2_enter_full_retention(void)
|
|||||||
omap_uart_resume_idle(1);
|
omap_uart_resume_idle(1);
|
||||||
omap_uart_resume_idle(0);
|
omap_uart_resume_idle(0);
|
||||||
|
|
||||||
release_console_sem();
|
if (!is_suspending())
|
||||||
|
release_console_sem();
|
||||||
|
|
||||||
no_sleep:
|
no_sleep:
|
||||||
if (omap2_pm_debug) {
|
if (omap2_pm_debug) {
|
||||||
@@ -284,6 +299,12 @@ out:
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int omap2_pm_begin(suspend_state_t state)
|
||||||
|
{
|
||||||
|
suspend_state = state;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int omap2_pm_prepare(void)
|
static int omap2_pm_prepare(void)
|
||||||
{
|
{
|
||||||
/* We cannot sleep in idle until we have resumed */
|
/* We cannot sleep in idle until we have resumed */
|
||||||
@@ -333,10 +354,17 @@ static void omap2_pm_finish(void)
|
|||||||
enable_hlt();
|
enable_hlt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void omap2_pm_end(void)
|
||||||
|
{
|
||||||
|
suspend_state = PM_SUSPEND_ON;
|
||||||
|
}
|
||||||
|
|
||||||
static struct platform_suspend_ops omap_pm_ops = {
|
static struct platform_suspend_ops omap_pm_ops = {
|
||||||
|
.begin = omap2_pm_begin,
|
||||||
.prepare = omap2_pm_prepare,
|
.prepare = omap2_pm_prepare,
|
||||||
.enter = omap2_pm_enter,
|
.enter = omap2_pm_enter,
|
||||||
.finish = omap2_pm_finish,
|
.finish = omap2_pm_finish,
|
||||||
|
.end = omap2_pm_end,
|
||||||
.valid = suspend_valid_only_mem,
|
.valid = suspend_valid_only_mem,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,19 @@
|
|||||||
#include "sdrc.h"
|
#include "sdrc.h"
|
||||||
#include "control.h"
|
#include "control.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_SUSPEND
|
||||||
|
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return (suspend_state != PM_SUSPEND_ON);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Scratchpad offsets */
|
/* Scratchpad offsets */
|
||||||
#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
|
#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
|
||||||
#define OMAP343X_TABLE_VALUE_OFFSET 0xc0
|
#define OMAP343X_TABLE_VALUE_OFFSET 0xc0
|
||||||
@@ -387,10 +400,11 @@ void omap_sram_idle(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Block console output in case it is on one of the OMAP UARTs */
|
/* Block console output in case it is on one of the OMAP UARTs */
|
||||||
if (per_next_state < PWRDM_POWER_ON ||
|
if (!is_suspending())
|
||||||
core_next_state < PWRDM_POWER_ON)
|
if (per_next_state < PWRDM_POWER_ON ||
|
||||||
if (try_acquire_console_sem())
|
core_next_state < PWRDM_POWER_ON)
|
||||||
goto console_still_active;
|
if (try_acquire_console_sem())
|
||||||
|
goto console_still_active;
|
||||||
|
|
||||||
/* PER */
|
/* PER */
|
||||||
if (per_next_state < PWRDM_POWER_ON) {
|
if (per_next_state < PWRDM_POWER_ON) {
|
||||||
@@ -470,7 +484,8 @@ void omap_sram_idle(void)
|
|||||||
omap_uart_resume_idle(3);
|
omap_uart_resume_idle(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
release_console_sem();
|
if (!is_suspending())
|
||||||
|
release_console_sem();
|
||||||
|
|
||||||
console_still_active:
|
console_still_active:
|
||||||
/* Disable IO-PAD and IO-CHAIN wakeup */
|
/* Disable IO-PAD and IO-CHAIN wakeup */
|
||||||
@@ -514,8 +529,6 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SUSPEND
|
#ifdef CONFIG_SUSPEND
|
||||||
static suspend_state_t suspend_state;
|
|
||||||
|
|
||||||
static int omap3_pm_prepare(void)
|
static int omap3_pm_prepare(void)
|
||||||
{
|
{
|
||||||
disable_hlt();
|
disable_hlt();
|
||||||
|
|||||||
@@ -243,13 +243,14 @@
|
|||||||
#define OMAP24XX_EN_GPT1_MASK (1 << 0)
|
#define OMAP24XX_EN_GPT1_MASK (1 << 0)
|
||||||
|
|
||||||
/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
|
/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
|
||||||
#define OMAP24XX_ST_GPIOS_SHIFT (1 << 2)
|
#define OMAP24XX_ST_GPIOS_SHIFT 2
|
||||||
#define OMAP24XX_ST_GPIOS_MASK 2
|
#define OMAP24XX_ST_GPIOS_MASK (1 << 2)
|
||||||
#define OMAP24XX_ST_GPT1_SHIFT (1 << 0)
|
#define OMAP24XX_ST_GPT1_SHIFT 0
|
||||||
#define OMAP24XX_ST_GPT1_MASK 0
|
#define OMAP24XX_ST_GPT1_MASK (1 << 0)
|
||||||
|
|
||||||
/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */
|
/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */
|
||||||
#define OMAP2430_ST_MDM_SHIFT (1 << 0)
|
#define OMAP2430_ST_MDM_SHIFT 0
|
||||||
|
#define OMAP2430_ST_MDM_MASK (1 << 0)
|
||||||
|
|
||||||
|
|
||||||
/* 3430 register bits shared between CM & PRM registers */
|
/* 3430 register bits shared between CM & PRM registers */
|
||||||
|
|||||||
@@ -241,7 +241,8 @@ static inline void palmtx_keys_init(void) {}
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NAND Flash
|
* NAND Flash
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#if defined(CONFIG_MTD_NAND_GPIO) || defined(CONFIG_MTD_NAND_GPIO_MODULE)
|
#if defined(CONFIG_MTD_NAND_PLATFORM) || \
|
||||||
|
defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||||
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
||||||
unsigned int ctrl)
|
unsigned int ctrl)
|
||||||
{
|
{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user