Merge master.kernel.org:/home/rmk/linux-2.6-arm
This commit is contained in:
Коммит
ca98f825ea
|
@ -897,7 +897,24 @@ CONFIG_UNIX98_PTYS=y
|
||||||
#
|
#
|
||||||
# I2C support
|
# I2C support
|
||||||
#
|
#
|
||||||
# CONFIG_I2C is not set
|
CONFIG_I2C=y
|
||||||
|
# CONFIG_I2C_CHARDEV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Algorithms
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_ALGOBIT is not set
|
||||||
|
# CONFIG_I2C_ALGOPCF is not set
|
||||||
|
# CONFIG_I2C_ALGOPCA is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Hardware Bus support
|
||||||
|
#
|
||||||
|
CONFIG_I2C_PXA=y
|
||||||
|
# CONFIG_I2C_PXA_SLAVE is not set
|
||||||
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
|
# CONFIG_I2C_STUB is not set
|
||||||
|
# CONFIG_I2C_PCA_ISA is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Hardware Monitoring support
|
# Hardware Monitoring support
|
||||||
|
|
|
@ -85,7 +85,7 @@ static struct plat_serial8250_port ixdp425_uart_data[] = {
|
||||||
{
|
{
|
||||||
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
||||||
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
||||||
.irq = IRQ_IXP4XX_UART1,
|
.irq = IRQ_IXP4XX_UART2,
|
||||||
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||||
.iotype = UPIO_MEM,
|
.iotype = UPIO_MEM,
|
||||||
.regshift = 2,
|
.regshift = 2,
|
||||||
|
|
|
@ -77,6 +77,8 @@ config MACH_AKITA
|
||||||
depends PXA_SHARPSL_27x
|
depends PXA_SHARPSL_27x
|
||||||
select PXA_SHARP_Cxx00
|
select PXA_SHARP_Cxx00
|
||||||
select MACH_SPITZ
|
select MACH_SPITZ
|
||||||
|
select I2C
|
||||||
|
select I2C_PXA
|
||||||
|
|
||||||
config MACH_SPITZ
|
config MACH_SPITZ
|
||||||
bool "Enable Sharp Zaurus SL-3000 (Spitz) Support"
|
bool "Enable Sharp Zaurus SL-3000 (Spitz) Support"
|
||||||
|
|
|
@ -155,14 +155,19 @@ static void __flush_dcache_aliases(struct address_space *mapping, struct page *p
|
||||||
* space mappings, we can be lazy and remember that we may have dirty
|
* space mappings, we can be lazy and remember that we may have dirty
|
||||||
* kernel cache lines for later. Otherwise, we assume we have
|
* kernel cache lines for later. Otherwise, we assume we have
|
||||||
* aliasing mappings.
|
* aliasing mappings.
|
||||||
|
*
|
||||||
|
* Note that we disable the lazy flush for SMP.
|
||||||
*/
|
*/
|
||||||
void flush_dcache_page(struct page *page)
|
void flush_dcache_page(struct page *page)
|
||||||
{
|
{
|
||||||
struct address_space *mapping = page_mapping(page);
|
struct address_space *mapping = page_mapping(page);
|
||||||
|
|
||||||
|
#ifndef CONFIG_SMP
|
||||||
if (mapping && !mapping_mapped(mapping))
|
if (mapping && !mapping_mapped(mapping))
|
||||||
set_bit(PG_dcache_dirty, &page->flags);
|
set_bit(PG_dcache_dirty, &page->flags);
|
||||||
else {
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
__flush_dcache_page(mapping, page);
|
__flush_dcache_page(mapping, page);
|
||||||
if (mapping && cache_is_vivt())
|
if (mapping && cache_is_vivt())
|
||||||
__flush_dcache_aliases(mapping, page);
|
__flush_dcache_aliases(mapping, page);
|
||||||
|
|
|
@ -47,11 +47,6 @@ static inline void init_MUTEX_LOCKED(struct semaphore *sem)
|
||||||
sema_init(sem, 0);
|
sema_init(sem, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int sema_count(struct semaphore *sem)
|
|
||||||
{
|
|
||||||
return atomic_read(&sem->count);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* special register calling convention
|
* special register calling convention
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -30,6 +30,9 @@ static inline void __raw_spin_lock(raw_spinlock_t *lock)
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"1: ldrex %0, [%1]\n"
|
"1: ldrex %0, [%1]\n"
|
||||||
" teq %0, #0\n"
|
" teq %0, #0\n"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
" wfene\n"
|
||||||
|
#endif
|
||||||
" strexeq %0, %2, [%1]\n"
|
" strexeq %0, %2, [%1]\n"
|
||||||
" teqeq %0, #0\n"
|
" teqeq %0, #0\n"
|
||||||
" bne 1b"
|
" bne 1b"
|
||||||
|
@ -65,7 +68,11 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock)
|
||||||
smp_mb();
|
smp_mb();
|
||||||
|
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
" str %1, [%0]"
|
" str %1, [%0]\n"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
" mcr p15, 0, %1, c7, c10, 4\n" /* DSB */
|
||||||
|
" sev"
|
||||||
|
#endif
|
||||||
:
|
:
|
||||||
: "r" (&lock->lock), "r" (0)
|
: "r" (&lock->lock), "r" (0)
|
||||||
: "cc");
|
: "cc");
|
||||||
|
@ -87,6 +94,9 @@ static inline void __raw_write_lock(raw_rwlock_t *rw)
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"1: ldrex %0, [%1]\n"
|
"1: ldrex %0, [%1]\n"
|
||||||
" teq %0, #0\n"
|
" teq %0, #0\n"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
" wfene\n"
|
||||||
|
#endif
|
||||||
" strexeq %0, %2, [%1]\n"
|
" strexeq %0, %2, [%1]\n"
|
||||||
" teq %0, #0\n"
|
" teq %0, #0\n"
|
||||||
" bne 1b"
|
" bne 1b"
|
||||||
|
@ -122,7 +132,11 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw)
|
||||||
smp_mb();
|
smp_mb();
|
||||||
|
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"str %1, [%0]"
|
"str %1, [%0]\n"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
" mcr p15, 0, %1, c7, c10, 4\n" /* DSB */
|
||||||
|
" sev\n"
|
||||||
|
#endif
|
||||||
:
|
:
|
||||||
: "r" (&rw->lock), "r" (0)
|
: "r" (&rw->lock), "r" (0)
|
||||||
: "cc");
|
: "cc");
|
||||||
|
@ -148,6 +162,9 @@ static inline void __raw_read_lock(raw_rwlock_t *rw)
|
||||||
"1: ldrex %0, [%2]\n"
|
"1: ldrex %0, [%2]\n"
|
||||||
" adds %0, %0, #1\n"
|
" adds %0, %0, #1\n"
|
||||||
" strexpl %1, %0, [%2]\n"
|
" strexpl %1, %0, [%2]\n"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
" wfemi\n"
|
||||||
|
#endif
|
||||||
" rsbpls %0, %1, #0\n"
|
" rsbpls %0, %1, #0\n"
|
||||||
" bmi 1b"
|
" bmi 1b"
|
||||||
: "=&r" (tmp), "=&r" (tmp2)
|
: "=&r" (tmp), "=&r" (tmp2)
|
||||||
|
@ -169,6 +186,11 @@ static inline void __raw_read_unlock(raw_rwlock_t *rw)
|
||||||
" strex %1, %0, [%2]\n"
|
" strex %1, %0, [%2]\n"
|
||||||
" teq %1, #0\n"
|
" teq %1, #0\n"
|
||||||
" bne 1b"
|
" bne 1b"
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
"\n cmp %0, #0\n"
|
||||||
|
" mcreq p15, 0, %0, c7, c10, 4\n"
|
||||||
|
" seveq"
|
||||||
|
#endif
|
||||||
: "=&r" (tmp), "=&r" (tmp2)
|
: "=&r" (tmp), "=&r" (tmp2)
|
||||||
: "r" (&rw->lock)
|
: "r" (&rw->lock)
|
||||||
: "cc");
|
: "cc");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче