#include <linux/err.h>
  #include <linux/mm.h>
  #include <linux/spinlock.h>
- #include <asm/io.h>
+ #include <linux/io.h>
  #include "pm-rcar.h"
  
 -/* SYSC */
 -#define SYSCSR 0x00
 -#define SYSCISR 0x04
 -#define SYSCISCR 0x08
 +/* SYSC Common */
 +#define SYSCSR                        0x00    /* SYSC Status Register */
 +#define SYSCISR                       0x04    /* Interrupt Status Register */
 +#define SYSCISCR              0x08    /* Interrupt Status Clear Register */
 +#define SYSCIER                       0x0c    /* Interrupt Enable Register */
 +#define SYSCIMR                       0x10    /* Interrupt Mask Register */
  
 -#define PWRSR_OFFS 0x00
 -#define PWROFFCR_OFFS 0x04
 -#define PWRONCR_OFFS 0x0c
 -#define PWRER_OFFS 0x14
 +/* SYSC Status Register */
 +#define SYSCSR_PONENB         1       /* Ready for power resume requests */
 +#define SYSCSR_POFFENB                0       /* Ready for power shutoff requests */
  
 -#define SYSCSR_RETRIES 100
 -#define SYSCSR_DELAY_US 1
 +/*
 + * Power Control Register Offsets inside the register block for each domain
 + * Note: The "CR" registers for ARM cores exist on H1 only
 + *       Use WFI to power off, CPG/APMU to resume ARM cores on R-Car Gen2
 + */
 +#define PWRSR_OFFS            0x00    /* Power Status Register */
 +#define PWROFFCR_OFFS         0x04    /* Power Shutoff Control Register */
 +#define PWROFFSR_OFFS         0x08    /* Power Shutoff Status Register */
 +#define PWRONCR_OFFS          0x0c    /* Power Resume Control Register */
 +#define PWRONSR_OFFS          0x10    /* Power Resume Status Register */
 +#define PWRER_OFFS            0x14    /* Power Shutoff/Resume Error */
 +
 +
 +#define SYSCSR_RETRIES                100
 +#define SYSCSR_DELAY_US               1
 +
 +#define PWRER_RETRIES         100
 +#define PWRER_DELAY_US                1
  
 -#define SYSCISR_RETRIES 1000
 -#define SYSCISR_DELAY_US 1
 +#define SYSCISR_RETRIES               1000
 +#define SYSCISR_DELAY_US      1
  
  static void __iomem *rcar_sysc_base;
  static DEFINE_SPINLOCK(rcar_sysc_lock); /* SMP CPUs + I/O devices */
 
  #endif
  
  #ifdef CONFIG_MEMORY_HOTPLUG
- int arch_add_memory(int nid, u64 start, u64 size)
+ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
  {
 -      unsigned long zone_start_pfn, zone_end_pfn, nr_pages;
 +      unsigned long normal_end_pfn = PFN_DOWN(memblock_end_of_DRAM());
 +      unsigned long dma_end_pfn = PFN_DOWN(MAX_DMA_ADDRESS);
        unsigned long start_pfn = PFN_DOWN(start);
        unsigned long size_pages = PFN_DOWN(size);
 -      struct zone *zone;
 -      int rc;
 +      unsigned long nr_pages;
 +      int rc, zone_enum;
  
        rc = vmem_add_mapping(start, size);
        if (rc)
 
  #endif
  
  #ifdef CONFIG_MEMORY_HOTPLUG
- int arch_add_memory(int nid, u64 start, u64 size)
+ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
  {
        pg_data_t *pgdat;
 -      unsigned long start_pfn = start >> PAGE_SHIFT;
 +      unsigned long start_pfn = PFN_DOWN(start);
        unsigned long nr_pages = size >> PAGE_SHIFT;
        int ret;
  
 
        if (mmio->num_lines)
                offset = to_interleave_offset(offset, mmio);
  
-       return readl(mmio->base + offset);
 -      return readq(mmio->addr.base + offset);
++      return readl(mmio->addr.base + offset);
  }
  
  static void write_blk_ctl(struct nfit_blk *nfit_blk, unsigned int bw,
 
  
        res_start = pci_resource_start(pdev, bar);
        res_len = pci_resource_len(pdev, bar);
 -      if (!res_start || !res_len)
 +      if (!res_start || !res_len) {
 +              iounmap(mvi->regs_ex);
 +              mvi->regs_ex = NULL;
                goto err_out;
 +      }
  
        res_flag = pci_resource_flags(pdev, bar);
-       if (res_flag & IORESOURCE_CACHEABLE)
-               mvi->regs = ioremap(res_start, res_len);
-       else
-               mvi->regs = ioremap_nocache(res_start, res_len);
+       mvi->regs = ioremap(res_start, res_len);
  
        if (!mvi->regs) {
                if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM))
 
  
        if (offset < chdr_size) {
                copy_size = min(chdr_size - offset, nbytes);
 -              memcpy(&channel->chan_hdr + offset, local, copy_size);
 +              memcpy(((char *)(&channel->chan_hdr)) + offset,
 +                     local, copy_size);
        }
  
-       memcpy_toio(channel->mapped + offset, local, nbytes);
+       memcpy(channel->mapped + offset, local, nbytes);
  
        return 0;
  }