unsigned long long vme_base, unsigned long long size,
        dma_addr_t pci_base, vme_address_t aspace, vme_cycle_t cycle)
 {
-       unsigned int i, addr = 0, granularity = 0;
+       unsigned int i, addr = 0, granularity;
        unsigned int temp_ctl = 0;
        unsigned int vme_bound, pci_offset;
        struct ca91cx42_driver *bridge;
         * Bound address is a valid address for the window, adjust
         * accordingly
         */
-       vme_bound = vme_base + size - granularity;
+       vme_bound = vme_base + size;
        pci_offset = pci_base - vme_base;
 
        /* XXX Need to check that vme_base, vme_bound and pci_offset aren't
        vme_address_t aspace, vme_cycle_t cycle, vme_width_t dwidth)
 {
        int retval = 0;
-       unsigned int i;
+       unsigned int i, granularity = 0;
        unsigned int temp_ctl = 0;
        unsigned long long pci_bound, vme_offset, pci_base;
        struct ca91cx42_driver *bridge;
 
        bridge = image->parent->driver_priv;
 
+       i = image->number;
+
+       if ((i == 0) || (i == 4))
+               granularity = 0x1000;
+       else
+               granularity = 0x10000;
+
        /* Verify input data */
-       if (vme_base & 0xFFF) {
+       if (vme_base & (granularity - 1)) {
                printk(KERN_ERR "Invalid VME Window alignment\n");
                retval = -EINVAL;
                goto err_window;
        }
-       if (size & 0xFFF) {
+       if (size & (granularity - 1)) {
                printk(KERN_ERR "Invalid VME Window alignment\n");
                retval = -EINVAL;
                goto err_window;
         * Bound address is a valid address for the window, adjust
         * according to window granularity.
         */
-       pci_bound = pci_base + (size - 0x1000);
+       pci_bound = pci_base + size;
        vme_offset = vme_base - pci_base;
 
-       i = image->number;
-
        /* Disable while we are mucking around */
        temp_ctl = ioread32(bridge->base + CA91CX42_LSI_CTL[i]);
        temp_ctl &= ~CA91CX42_LSI_CTL_EN;
        pci_bound = ioread32(bridge->base + CA91CX42_LSI_BD[i]);
 
        *vme_base = pci_base + vme_offset;
-       *size = (pci_bound - pci_base) + 0x1000;
+       *size = (unsigned long long)(pci_bound - pci_base);
 
        *enabled = 0;
        *aspace = 0;
 ssize_t ca91cx42_master_read(struct vme_master_resource *image, void *buf,
        size_t count, loff_t offset)
 {
-       int retval;
+       ssize_t retval;
 
        spin_lock(&(image->lock));