*/
                if (off >= PCI_CONFIG_SPACE_SIZE) {
                        addr = (func << 12);
-                       addr |= (off & 0x0FFF);
+                       addr |= (off & 0x0FFC);
                        val = bcma_pcie_read_config(pc, addr);
                } else {
                        addr = BCMA_CORE_PCI_PCICFG0;
                /* accesses to config registers with offsets >= 256
                 * requires indirect access.
                 */
-               if (off < PCI_CONFIG_SPACE_SIZE) {
+               if (off >= PCI_CONFIG_SPACE_SIZE) {
+                       addr = (func << 12);
+                       addr |= (off & 0x0FFC);
+                       val = bcma_pcie_read_config(pc, addr);
+               } else {
                        addr = BCMA_CORE_PCI_PCICFG0;
                        addr |= (func << 8);
                        addr |= (off & 0xfc);
                /* accesses to config registers with offsets >= 256
                 * requires indirect access.
                 */
-               if (off >= PCI_CONFIG_SPACE_SIZE) {
-                       addr = (func << 12);
-                       addr |= (off & 0x0FFF);
+               if (off >= PCI_CONFIG_SPACE_SIZE)
                        bcma_pcie_write_config(pc, addr, val);
-               } else {
+               else
                        pcicore_write32(pc, addr, val);
-               }
        } else {
                writel(val, mmio);