Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into sh/for...
authorPaul Mundt <lethal@linux-sh.org>
Thu, 10 Dec 2009 06:40:31 +0000 (15:40 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Thu, 10 Dec 2009 06:40:31 +0000 (15:40 +0900)
13 files changed:
arch/sh/boards/mach-ap325rxa/setup.c
arch/sh/boards/mach-kfr2r09/lcd_wqvga.c
arch/sh/boards/mach-kfr2r09/setup.c
arch/sh/configs/ecovec24-romimage_defconfig
arch/sh/configs/ecovec24_defconfig
arch/sh/include/mach-kfr2r09/mach/kfr2r09.h
arch/sh/kernel/cpu/irq/ipr.c
arch/sh/mm/cache-sh4.c
arch/sh/mm/numa.c
drivers/sh/intc.c
drivers/sh/pfc.c
drivers/video/sh_mobile_lcdcfb.c
include/video/sh_mobile_lcdc.h

index cf9dc12dfeb153d78ccd2ff2bcdcbfb8b5fe7804..4b4320b0b481ab2c70d6d96988b7535b52bfa4b5 100644 (file)
@@ -322,7 +322,8 @@ static struct soc_camera_platform_info camera_info = {
                .height = 480,
        },
        .bus_param = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH |
-       SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8,
+       SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8 |
+       SOCAM_DATA_ACTIVE_HIGH,
        .set_capture = camera_set_capture,
        .link = {
                .bus_id         = 0,
index 8ccb1cc8b5890fed7fe0014c6d10b50133fa306e..e9b970846c41fcb0c96a105ed277059f722a57b3 100644 (file)
@@ -273,6 +273,12 @@ int kfr2r09_lcd_setup(void *board_data, void *sohandle,
        return 0;
 }
 
+void kfr2r09_lcd_start(void *board_data, void *sohandle,
+                      struct sh_mobile_lcdc_sys_bus_ops *so)
+{
+       write_memory_start(sohandle, so);
+}
+
 #define CTRL_CKSW       0x10
 #define CTRL_C10        0x20
 #define CTRL_CPSW       0x80
index 87438d6603d63e89502d146cba841a5b7feaeba5..5cf7a6e8aeaa2a524068133b722090a3c1250b11 100644 (file)
@@ -149,6 +149,7 @@ static struct sh_mobile_lcdc_info kfr2r09_sh_lcdc_info = {
                },
                .board_cfg = {
                        .setup_sys = kfr2r09_lcd_setup,
+                       .start_transfer = kfr2r09_lcd_start,
                        .display_on = kfr2r09_lcd_on,
                        .display_off = kfr2r09_lcd_off,
                },
index 0774924623cc287b9a9a3c23ba55243c3b61f289..46874704e4e7b18c30283bb604a7297fffdcf60f 100644 (file)
@@ -203,7 +203,7 @@ CONFIG_MMU=y
 CONFIG_PAGE_OFFSET=0x80000000
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_MEMORY_START=0x08000000
-CONFIG_MEMORY_SIZE=0x08000000
+CONFIG_MEMORY_SIZE=0x10000000
 CONFIG_29BIT=y
 # CONFIG_X2TLB is not set
 CONFIG_VSYSCALL=y
index ac6469718a2c46761a0da53c7cbc8778cce4e10a..cad918437ca7a26c450041e8a42f38b373be597d 100644 (file)
@@ -204,7 +204,7 @@ CONFIG_MMU=y
 CONFIG_PAGE_OFFSET=0x80000000
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_MEMORY_START=0x08000000
-CONFIG_MEMORY_SIZE=0x08000000
+CONFIG_MEMORY_SIZE=0x10000000
 CONFIG_29BIT=y
 # CONFIG_X2TLB is not set
 CONFIG_VSYSCALL=y
index 174374e19547f4baf93157360a71b7f487b4202f..484ef42c2fb5b8d35084f9ef38c9693edadd5a16 100644 (file)
@@ -8,6 +8,8 @@ void kfr2r09_lcd_on(void *board_data);
 void kfr2r09_lcd_off(void *board_data);
 int kfr2r09_lcd_setup(void *board_data, void *sys_ops_handle,
                      struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
+void kfr2r09_lcd_start(void *board_data, void *sys_ops_handle,
+                      struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
 #else
 static inline void kfr2r09_lcd_on(void *board_data) {}
 static inline void kfr2r09_lcd_off(void *board_data) {}
@@ -16,6 +18,10 @@ static inline int kfr2r09_lcd_setup(void *board_data, void *sys_ops_handle,
 {
        return -ENODEV;
 }
+static inline void kfr2r09_lcd_start(void *board_data, void *sys_ops_handle,
+                                    struct sh_mobile_lcdc_sys_bus_ops *sys_ops)
+{
+}
 #endif
 
 #endif /* __ASM_SH_KFR2R09_H */
index c1508a90fc6af2049946e31de8c98a764b009863..9282d965a1b66082ef78f9c77e35150ac9778b47 100644 (file)
  * for more details.
  */
 #include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
 #include <linux/irq.h>
+#include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/io.h>
-#include <linux/interrupt.h>
 #include <linux/topology.h>
 
 static inline struct ipr_desc *get_ipr_desc(unsigned int irq)
 {
        struct irq_chip *chip = get_irq_chip(irq);
-       return (void *)((char *)chip - offsetof(struct ipr_desc, chip));
+       return container_of(chip, struct ipr_desc, chip);
 }
 
 static void disable_ipr_irq(unsigned int irq)
index f36a08bf3d5cd62ba42821e5b511346333206c54..560ddb6bc8a79dd6e480255bb0aefdc45d7ac7f7 100644 (file)
@@ -256,8 +256,7 @@ static void sh4_flush_cache_page(void *args)
                address = (unsigned long)vaddr;
        }
 
-       if (pages_do_alias(address, phys))
-               flush_cache_one(CACHE_OC_ADDRESS_ARRAY |
+       flush_cache_one(CACHE_OC_ADDRESS_ARRAY |
                        (address & shm_align_mask), phys);
 
        if (vma->vm_flags & VM_EXEC)
index 6c524446c0f6f49952e3757bde91b126c1ac3af8..422e9272187860b24842d938a505e6585056fed9 100644 (file)
@@ -28,7 +28,7 @@ void __init setup_memory(void)
 {
        unsigned long free_pfn = PFN_UP(__pa(_end));
        u64 base = min_low_pfn << PAGE_SHIFT;
-       u64 size = (max_low_pfn << PAGE_SHIFT) - min_low_pfn;
+       u64 size = (max_low_pfn << PAGE_SHIFT) - base;
 
        lmb_add(base, size);
 
@@ -37,6 +37,15 @@ void __init setup_memory(void)
                    (PFN_PHYS(free_pfn) + PAGE_SIZE - 1) -
                    (__MEMORY_START + CONFIG_ZERO_PAGE_OFFSET));
 
+       /*
+        * Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET.
+        */
+       if (CONFIG_ZERO_PAGE_OFFSET != 0)
+               lmb_reserve(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET);
+
+       lmb_analyze();
+       lmb_dump_all();
+
        /*
         * Node 0 sets up its pgdat at the first available pfn,
         * and bumps it up before setting up the bootmem allocator.
@@ -71,7 +80,7 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)
 
        /* Node-local pgdat */
        NODE_DATA(nid) = __va(lmb_alloc_base(sizeof(struct pglist_data),
-                                            SMP_CACHE_BYTES, end_pfn));
+                                            SMP_CACHE_BYTES, end));
        memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
 
        NODE_DATA(nid)->bdata = &bootmem_node_data[nid];
@@ -81,7 +90,7 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)
        /* Node-local bootmap */
        bootmap_pages = bootmem_bootmap_pages(end_pfn - start_pfn);
        bootmem_paddr = lmb_alloc_base(bootmap_pages << PAGE_SHIFT,
-                                      PAGE_SIZE, end_pfn);
+                                      PAGE_SIZE, end);
        init_bootmem_node(NODE_DATA(nid), bootmem_paddr >> PAGE_SHIFT,
                          start_pfn, end_pfn);
 
index a7e5c2e9986c0c700cf76f154f5c3c907914166d..d5d7f23c19a5e5bdc399670994c324bb3e08dbff 100644 (file)
@@ -806,6 +806,8 @@ static int intc_suspend(struct sys_device *dev, pm_message_t state)
                if (d->state.event != PM_EVENT_FREEZE)
                        break;
                for_each_irq_desc(irq, desc) {
+                       if (desc->handle_irq == intc_redirect_irq)
+                               continue;
                        if (desc->chip != &d->chip)
                                continue;
                        if (desc->status & IRQ_DISABLED)
index 841ed5030c8f82f15d22ff0b74fff26cd903f244..082604edc4c2943d16678411498f33ddff560e46 100644 (file)
@@ -71,7 +71,7 @@ static void gpio_write_bit(struct pinmux_data_reg *dr,
 
        pos = dr->reg_width - (in_pos + 1);
 
-       pr_debug("write_bit addr = %lx, value = %ld, pos = %ld, "
+       pr_debug("write_bit addr = %lx, value = %d, pos = %ld, "
                 "r_width = %ld\n",
                 dr->reg, !!value, pos, dr->reg_width);
 
index b4b5de930cf528409bd71a5f36009a373fc83ed4..d346bbab6cad5205f119ce8968abdbcbf2b5dcbb 100644 (file)
@@ -281,6 +281,7 @@ static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
                                       struct list_head *pagelist)
 {
        struct sh_mobile_lcdc_chan *ch = info->par;
+       struct sh_mobile_lcdc_board_cfg *bcfg = &ch->cfg.board_cfg;
 
        /* enable clocks before accessing hardware */
        sh_mobile_lcdc_clk_on(ch->lcdc);
@@ -305,10 +306,17 @@ static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
 
                /* trigger panel update */
                dma_map_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
+               if (bcfg->start_transfer)
+                       bcfg->start_transfer(bcfg->board_data, ch,
+                                            &sh_mobile_lcdc_sys_bus_ops);
                lcdc_write_chan(ch, LDSM2R, 1);
                dma_unmap_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
-       } else
+       } else {
+               if (bcfg->start_transfer)
+                       bcfg->start_transfer(bcfg->board_data, ch,
+                                            &sh_mobile_lcdc_sys_bus_ops);
                lcdc_write_chan(ch, LDSM2R, 1);
+       }
 }
 
 static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info)
index 25144ab22b95615df87e58f317a7f5c97a8b2a4b..288205457713bab6191e42e7a8f99bd01861ec51 100644 (file)
@@ -50,6 +50,8 @@ struct sh_mobile_lcdc_board_cfg {
        void *board_data;
        int (*setup_sys)(void *board_data, void *sys_ops_handle,
                         struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
+       void (*start_transfer)(void *board_data, void *sys_ops_handle,
+                              struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
        void (*display_on)(void *board_data);
        void (*display_off)(void *board_data);
 };