Kyösti Mälkki has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/31272 )
Change subject: nb/via/vx900: Replace pci_mod_configX() ......................................................................
nb/via/vx900: Replace pci_mod_configX()
If clr_mask == 0, use pci_or_configX(). If clr_mask != 0, invert mask and use pci_update_configX().
Change-Id: I4ae64e9b635b3759e4cffc4bbdf029411a4e0f42 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com Reviewed-on: https://review.coreboot.org/c/31272 Reviewed-by: Arthur Heymans arthur@aheymans.xyz Reviewed-by: Paul Menzel paulepanter@users.sourceforge.net Tested-by: build bot (Jenkins) no-reply@coreboot.org --- M src/mainboard/via/epia-m850/romstage.c M src/northbridge/via/vx900/chrome9hd.c M src/northbridge/via/vx900/early_host_bus_ctl.c M src/northbridge/via/vx900/early_vx900.c M src/northbridge/via/vx900/lpc.c M src/northbridge/via/vx900/memmap.c M src/northbridge/via/vx900/northbridge.c M src/northbridge/via/vx900/pci_util.c M src/northbridge/via/vx900/raminit_ddr3.c M src/northbridge/via/vx900/sata.c M src/northbridge/via/vx900/traf_ctrl.c M src/northbridge/via/vx900/vx900.h 12 files changed, 85 insertions(+), 139 deletions(-)
Approvals: build bot (Jenkins): Verified Paul Menzel: Looks good to me, but someone else must approve Arthur Heymans: Looks good to me, approved
diff --git a/src/mainboard/via/epia-m850/romstage.c b/src/mainboard/via/epia-m850/romstage.c index c9a244e..8ce4734 100644 --- a/src/mainboard/via/epia-m850/romstage.c +++ b/src/mainboard/via/epia-m850/romstage.c @@ -95,5 +95,5 @@
/* FIXME: See if this is needed or take this out please */ /* Disable Memcard and SDIO */ - pci_mod_config8(LPC, 0x51, 0, (1 << 7) | (1 << 4)); + pci_or_config8(LPC, 0x51, (1 << 7) | (1 << 4)); } diff --git a/src/northbridge/via/vx900/chrome9hd.c b/src/northbridge/via/vx900/chrome9hd.c index 8d2cf9c..abba4d3 100644 --- a/src/northbridge/via/vx900/chrome9hd.c +++ b/src/northbridge/via/vx900/chrome9hd.c @@ -151,7 +151,7 @@ pci_write_config8(dev, 0xb2, ((0xff << (fb_pow - 2)) & ~(1 << 7))); vga_sr_write(0x68, (0xff << (fb_pow - 1))); /* And also that the framebuffer is in the system, RAM */ - pci_mod_config8(dev, 0xb0, 0, 1 << 0); + pci_or_config8(dev, 0xb0, 1 << 0); }
/** @@ -175,13 +175,13 @@ /* Step 1 - Enable VGA controller */ /* FIXME: This is the VGA hole @ 640k-768k, and the vga port io * We need the port IO, but can we disable the memory hole? */ - pci_mod_config8(mcu, 0xa4, 0, (1 << 7)); /* VGA memory hole */ + pci_or_config8(mcu, 0xa4, (1 << 7)); /* VGA memory hole */
/* Step 2 - Forward MDA cycles to GFX */ - pci_mod_config8(host, 0x4e, 0, (1 << 1)); + pci_or_config8(host, 0x4e, (1 << 1));
/* Step 3 - Enable GFX I/O space */ - pci_mod_config8(dev, PCI_COMMAND, 0, PCI_COMMAND_IO); + pci_or_config8(dev, PCI_COMMAND, PCI_COMMAND_IO);
/* Step 4 - Enable video subsystem */ vga_enable_mask((1 << 0), (1 << 0)); @@ -248,7 +248,7 @@ struct device *mcu = dev_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0); /* FIXME: here? -=- ACLK 250MHz */ - pci_mod_config8(mcu, 0xbb, 0, 0x01); + pci_or_config8(mcu, 0xbb, 0x01); }
static void chrome9hd_disable(struct device *dev) @@ -257,7 +257,7 @@ PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0); /* Disable GFX - This step effectively renders the GFX inert * It won't even show up as a PCI device during enumeration */ - pci_mod_config8(mcu, 0xa1, 1 << 7, 0); + pci_update_config8(mcu, 0xa1, (u8)~(1 << 7), 0); }
static struct device_operations chrome9hd_operations = { diff --git a/src/northbridge/via/vx900/early_host_bus_ctl.c b/src/northbridge/via/vx900/early_host_bus_ctl.c index 159b2a4..92bb44d 100644 --- a/src/northbridge/via/vx900/early_host_bus_ctl.c +++ b/src/northbridge/via/vx900/early_host_bus_ctl.c @@ -19,32 +19,32 @@ static void vx900_cpu_bus_preram_setup(void) { /* Faster CPU to DRAM Cycle */ - pci_mod_config8(HOST_BUS, 0x50, 0x0f, 0x08); + pci_update_config8(HOST_BUS, 0x50, ~0x0f, 0x08); /* CPU Interface Control - Basic Options */ - pci_mod_config8(HOST_BUS, 0x51, 0, 0x6c); + pci_or_config8(HOST_BUS, 0x51, 0x6c); /*CPU Interface Control - Advanced Options */ pci_write_config8(HOST_BUS, 0x52, 0xc7); /* Enable 8QW burst and 4QW request merging [4] and [2] * and special mode for read cycles bit[3] */ - pci_mod_config8(HOST_BUS, 0x54, 0, (1 << 4) | (1 << 2) | (1 << 3)); + pci_or_config8(HOST_BUS, 0x54, (1 << 4) | (1 << 2) | (1 << 3)); /* High priority upstream requests on V4 bus */ pci_write_config8(HOST_BUS, 0x56, 0x03); /* CPU to DRAM extra 1T access control */ - pci_mod_config8(HOST_BUS, 0x59, 0x00, (1 << 2)); + pci_or_config8(HOST_BUS, 0x59, (1 << 2)); /* Queue reordering */ - pci_mod_config8(HOST_BUS, 0x5f, 0x00, (1 << 6)); + pci_or_config8(HOST_BUS, 0x5f, (1 << 6)); /* Only Write cycle of CPU->GFXCTL will flush the CPU->Memory FIFO */ - pci_mod_config8(HOST_BUS, 0x98, 0x00, 0x60); + pci_or_config8(HOST_BUS, 0x98, 0x60); /* 1T delay for data on CPU bus */ pci_write_config8(HOST_BUS, 0x9e, 0x0e); /* Arbitrate ownership of DRAM controller a few cycles earlier */ - pci_mod_config8(HOST_BUS, 0x9f, 0x00, (1 << 7)); + pci_or_config8(HOST_BUS, 0x9f, (1 << 7)); /* Write retire policy */ pci_write_config8(HOST_BUS, 0x5d, 0xa2); /* Occupancy timer */ pci_write_config8(HOST_BUS, 0x53, 0x44); /* Medium Threshold for Write Retire Policy - 6 requests */ - pci_mod_config8(HOST_BUS, 0x56, 0x00, 0x60); + pci_or_config8(HOST_BUS, 0x56, 0x60); /* Bandwidth timer */ pci_write_config8(HOST_BUS, 0x5e, 0x44); } diff --git a/src/northbridge/via/vx900/early_vx900.c b/src/northbridge/via/vx900/early_vx900.c index 1260941..fe858b6 100644 --- a/src/northbridge/via/vx900/early_vx900.c +++ b/src/northbridge/via/vx900/early_vx900.c @@ -109,7 +109,7 @@ pci_write_config8(MCU, 0x83, 0x31);
/* Bits 6:0 are the ROM shadow on top of 4G, so leave those untouched */ - pci_mod_config8(LPC, 0x41, 1 << 7, 0); /* LPC ROM 896k - 960k */ + pci_update_config8(LPC, 0x41, (u8)~(1 << 7), 0); /* LPC ROM 896k - 960k */
pci_write_config8(SNMIC, 0x61, 0); /* 768k - 832k */ pci_write_config8(SNMIC, 0x62, 0); /* 832k - 896k */ @@ -126,5 +126,5 @@ void vx900_disable_gfx(void) { /* Disable GFX */ - pci_mod_config8(MCU, 0xa1, 1 << 7, 0); + pci_update_config8(MCU, 0xa1, (u8)~(1 << 7), 0); } diff --git a/src/northbridge/via/vx900/lpc.c b/src/northbridge/via/vx900/lpc.c index 27e2384..40c4299 100644 --- a/src/northbridge/via/vx900/lpc.c +++ b/src/northbridge/via/vx900/lpc.c @@ -53,7 +53,7 @@ struct northbridge_via_vx900_config *nb = (void *)dev->chip_info;
/* GPIO 11,10 to SATALED [1,0] */ - pci_mod_config8(dev, 0xe4, 0, 1 << 0); + pci_or_config8(dev, 0xe4, 1 << 0);
/* Route the external interrupt line */ extint = nb->ext_int_route_to_pirq; @@ -65,7 +65,7 @@ extint); val = extint - 'A'; val |= (1 << 3); /* bit3 enables the external int */ - pci_mod_config8(dev, 0x55, 0xf, val); + pci_update_config8(dev, 0x55, ~0xf, val);
} } @@ -78,11 +78,11 @@ /* FIXME: Setting this seems to hang our system */
/* Positive decoding for ROM + APIC + On-board IO ports */ - pci_mod_config8(dev, 0x6c, 0, (1 << 2) | (1 << 3) | (1 << 7)); + pci_or_config8(dev, 0x6c, (1 << 2) | (1 << 3) | (1 << 7)); /* Enable DMA channels. BIOS guide recommends DMA channel 2 off */ pci_write_config8(dev, 0x53, 0xfb); /* Disable PCI/DMA Memory Cycles Output to PCI Bus */ - pci_mod_config8(dev, 0x5b, (1 << 5), 0); + pci_update_config8(dev, 0x5b, ~(1 << 5), 0); /* DMA bandwidth control - Improved bandwidth */ pci_write_config8(dev, 0x53, 0xff); /* ISA Positive Decoding control */ @@ -147,20 +147,20 @@ * So much work for one line of code. Talk about bloat :) * The 8259 PIC should still work even if the IOAPIC is enabled, so * there's no crime in enabling the IOAPIC here. */ - pci_mod_config8(dev, 0x58, 0, 1 << 6); + pci_or_config8(dev, 0x58, 1 << 6); }
static void vx900_lpc_interrupt_stuff(struct device *dev) { /* Enable setting trigger mode through 0x4d0, and 0x4d1 ports * And enable I/O recovery time */ - pci_mod_config8(dev, 0x40, 0, (1 << 2) | (1 << 6)); + pci_or_config8(dev, 0x40, (1 << 2) | (1 << 6)); /* Set serial IRQ frame width to 6 PCI cycles (recommended by VIA) * And enable serial IRQ */ - pci_mod_config8(dev, 0x52, 3 << 0, (1 << 3) | (1 << 0)); + pci_update_config8(dev, 0x52, ~(3 << 0), (1 << 3) | (1 << 0));
/* Disable IRQ12 storm FIXME: bad comment */ - pci_mod_config8(dev, 0x51, (1 << 2), 0); + pci_update_config8(dev, 0x51, ~(1 << 2), 0);
pci_write_config8(dev, 0x4c, (1 << 6));
@@ -253,12 +253,12 @@ PCI_DEVICE_ID_VIA_VX900_LPC, 0);
/* Take care of INTA -> INTD */ - pci_mod_config8(lpc, 0x55, (0xf << 4), pirq[0] << 4); + pci_update_config8(lpc, 0x55, (u8)~(0xf << 4), pirq[0] << 4); pci_write_config8(lpc, 0x56, pirq[1] | (pirq[2] << 4)); pci_write_config8(lpc, 0x57, pirq[3] << 4);
/* Enable INTE -> INTH to be on separate IRQs */ - pci_mod_config8(lpc, 0x46, 0, 1 << 4); + pci_or_config8(lpc, 0x46, 1 << 4); /* Now do INTE -> INTH */ pci_write_config8(lpc, 0x44, pirq[4] | (pirq[5] << 4)); pci_write_config8(lpc, 0x45, pirq[6] | (pirq[7] << 4)); diff --git a/src/northbridge/via/vx900/memmap.c b/src/northbridge/via/vx900/memmap.c index 8cc7607..9940502 100644 --- a/src/northbridge/via/vx900/memmap.c +++ b/src/northbridge/via/vx900/memmap.c @@ -83,7 +83,7 @@ fb_pow--; size_mb = (1 << fb_pow);
- pci_mod_config8(MCU, 0xa1, 7 << 4, (fb_pow - 2) << 4); + pci_update_config8(MCU, 0xa1, ~(7 << 4), (fb_pow - 2) << 4); }
/* Gets the configured framebuffer size as a power of 2 */ diff --git a/src/northbridge/via/vx900/northbridge.c b/src/northbridge/via/vx900/northbridge.c index ca41450..41a1073 100644 --- a/src/northbridge/via/vx900/northbridge.c +++ b/src/northbridge/via/vx900/northbridge.c @@ -129,7 +129,7 @@
/* The "start remapping from where ?" register */ reg16 = ((tolm >> 20) & 0xfff) << 4; - pci_mod_config16(mcu, 0x84, 0xfff0, reg16); + pci_update_config16(mcu, 0x84, (u16)~0xfff0, reg16);
/* Find the chunk size */ tor = vx900_get_top_of_ram(mcu); diff --git a/src/northbridge/via/vx900/pci_util.c b/src/northbridge/via/vx900/pci_util.c index 08e2b54..afd35a1 100644 --- a/src/northbridge/via/vx900/pci_util.c +++ b/src/northbridge/via/vx900/pci_util.c @@ -38,45 +38,3 @@ printk(BIOS_DEBUG, "\n"); } } - -#ifdef __SIMPLE_DEVICE__ -void pci_mod_config8(pci_devfn_t dev, unsigned int where, uint8_t clr_mask, - uint8_t set_mask) -#else -void pci_mod_config8(struct device *dev, unsigned int where, uint8_t clr_mask, - uint8_t set_mask) -#endif -{ - uint8_t reg8 = pci_read_config8(dev, where); - reg8 &= ~clr_mask; - reg8 |= set_mask; - pci_write_config8(dev, where, reg8); -} - -#ifdef __SIMPLE_DEVICE__ -void pci_mod_config16(pci_devfn_t dev, unsigned int where, - uint16_t clr_mask, uint16_t set_mask) -#else -void pci_mod_config16(struct device *dev, unsigned int where, - uint16_t clr_mask, uint16_t set_mask) -#endif -{ - uint16_t reg16 = pci_read_config16(dev, where); - reg16 &= ~clr_mask; - reg16 |= set_mask; - pci_write_config16(dev, where, reg16); -} - -#ifdef __SIMPLE_DEVICE__ -void pci_mod_config32(pci_devfn_t dev, unsigned int where, - uint32_t clr_mask, uint32_t set_mask) -#else -void pci_mod_config32(struct device *dev, unsigned int where, - uint32_t clr_mask, uint32_t set_mask) -#endif -{ - uint32_t reg32 = pci_read_config32(dev, where); - reg32 &= ~clr_mask; - reg32 |= set_mask; - pci_write_config32(dev, where, reg32); -} diff --git a/src/northbridge/via/vx900/raminit_ddr3.c b/src/northbridge/via/vx900/raminit_ddr3.c index 7acab31..59d206c 100644 --- a/src/northbridge/via/vx900/raminit_ddr3.c +++ b/src/northbridge/via/vx900/raminit_ddr3.c @@ -485,9 +485,9 @@
/* Enable strong CLK driving for DIMMs with more than one rank */ if (dimm->dimm[0].ranks > 1) - pci_mod_config8(MCU, 0xd6, 0, (1 << 7)); + pci_or_config8(MCU, 0xd6, (1 << 7)); if (dimm->dimm[1].ranks > 1) - pci_mod_config8(MCU, 0xd6, 0, (1 << 6)); + pci_or_config8(MCU, 0xd6, (1 << 6));
/* DRAM ODT Lookup Table */ for (i = 0;; i++) { @@ -528,7 +528,7 @@ val = 0x8 | vr; /* Now move the value to the appropriate PR */ val <<= (pr * 4); - pci_mod_config16(MCU, 0x54, 0xf << (pr * 4), val); + pci_update_config16(MCU, 0x54, ~(0xf << (pr * 4)), val); printram("Mapping PR %u to VR %u\n", pr, vr); }
@@ -629,7 +629,7 @@ val = DIV_ROUND_UP(ctrl->tWTR, ctrl->tCK); printram("Selected tWTR : %uT\n", val); reg8 |= ((val - 2) & 0x7); - pci_mod_config8(MCU, 0xc4, 0x3f, reg8); + pci_update_config8(MCU, 0xc4, ~0x3f, reg8);
/* DRAM Timing for All Ranks - VI * [7:6] CKE Assertion Minimum Pulse Width @@ -662,7 +662,7 @@ u8 val;
/* Step 1 - Reset the PLL */ - pci_mod_config8(MCU, 0x90, 0x00, 0x0f); + pci_or_config8(MCU, 0x90, 0x0f); /* Wait at least 10 ns; VIA code delays by 640us */ udelay(640);
@@ -681,30 +681,30 @@ ctrl->tCK = TCK_266MHZ; } /* Restart the PLL with the desired frequency */ - pci_mod_config8(MCU, 0x90, 0x0f, val); + pci_update_config8(MCU, 0x90, ~0x0f, val);
/* Step 3 - Wait for PLL to stabilize */ udelay(2000);
/* Step 4 - Reset the DLL - Clear [7,4] */ - pci_mod_config8(MCU, 0x6b, 0x90, 0x00); + pci_update_config8(MCU, 0x6b, (u8)~0x90, 0x00); udelay(2000);
/* Step 5 - Enable the DLL - Set bits [7,4] to 01b */ - pci_mod_config8(MCU, 0x6b, 0x00, 0x10); + pci_or_config8(MCU, 0x6b, 0x10); udelay(2000);
/* Step 6 - Start DLL Calibration - Set bit [7] */ - pci_mod_config8(MCU, 0x6b, 0x00, 0x80); + pci_or_config8(MCU, 0x6b, 0x80); udelay(5);
/* Step 7 - Finish DLL Calibration - Clear bit [7] */ - pci_mod_config8(MCU, 0x6b, 0x80, 0x00); + pci_update_config8(MCU, 0x6b, (u8)~0x80, 0x00);
/* Step 8 - If we have registered DIMMs, we need to set bit[0] */ if (spd_dimm_is_registered_ddr3(ctrl->dimm_type)) { printram("Enabling RDIMM support in memory controller\n"); - pci_mod_config8(MCU, 0x6c, 0x00, 0x01); + pci_or_config8(MCU, 0x6c, 0x01); } }
@@ -803,7 +803,7 @@ /* Was already done for us before calling us */
/* Step 08 - Set Fun3_RX6B[2:0] to 011b (MSR Enable). */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x03); /* MSR Enable */ + pci_update_config8(MCU, 0x6b, ~0x07, 0x03); /* MSR Enable */
/* Step 09 - Issue MR2 cycle. Read a double word from the address * depended on DRAM's Rtt_WR and CWL settings. */ @@ -853,7 +853,7 @@ udelay(1000);
/* Step 13 - Set Fun3_RX6B[2:0] to 110b (Long ZQ calibration cmd) */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x06); /* Long ZQ */ + pci_update_config8(MCU, 0x6b, ~0x07, 0x06); /* Long ZQ */ /* Step 14 - Read a double word from any address of the DIMM. */ volatile_read(0); udelay(1000); @@ -873,9 +873,9 @@ vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP);
/* Step 01 - Set Fun3_Rx6E[5] to 1b to support burst length. */ - pci_mod_config8(MCU, 0x6e, 0, 1 << 5); + pci_or_config8(MCU, 0x6e, 1 << 5); /* Step 02 - Set Fun3_RX69[0] to 0b (Disable Multiple Page Mode). */ - pci_mod_config8(MCU, 0x69, (1 << 0), 0x00); + pci_update_config8(MCU, 0x69, ~(1 << 0), 0x00); /* And set [7:6] to 10b ? */ pci_write_config8(MCU, 0x69, 0x87);
@@ -887,7 +887,7 @@ pci_write_config8(MCU, 0x50, 0xd8); /* Step 05 - Set Fun3_RX6B[5] to 1b to de-assert RESET# and wait for at * least 500 us. */ - pci_mod_config8(MCU, 0x6b, 0x00, (1 << 5)); + pci_or_config8(MCU, 0x6b, (1 << 5)); udelay(500);
/* Step 6 -> 15 - Set the target physical rank to virtual rank 0 and @@ -903,9 +903,9 @@ vx900_map_pr_vr(i, 0);
/* FIXME: Is this needed on HW init? */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x01); /* Enable NOP */ + pci_update_config8(MCU, 0x6b, ~0x07, 0x01); /* Enable NOP */ volatile_read(0x0); /* Do NOP */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x03); /* MSR Enable */ + pci_update_config8(MCU, 0x6b, ~0x07, 0x03); /* MSR Enable */
/* See init_dram_by_rank.c and get_basic_information.c * in the VIA provided code */ @@ -934,20 +934,20 @@ 0, 0);
/* Normal SDRAM Mode */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x00); + pci_update_config8(MCU, 0x6b, ~0x07, 0x00);
/* Step 15, set the rank to virtual rank 3 */ vx900_map_pr_vr(i, 3); }
/* Step 16 - Set Fun3_Rx6B[2:0] to 000b (Normal SDRAM Mode). */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x00); + pci_update_config8(MCU, 0x6b, ~0x07, 0x00);
/* Set BA[0/1/2] to [A13/14/15] */ vx900_dram_set_ma_pin_map(VX900_CALIB_MA_MAP);
/* Step 17 - Set Fun3_Rx69[0] to 1b (Enable Multiple Page Mode). */ - pci_mod_config8(MCU, 0x69, 0x00, (1 << 0)); + pci_or_config8(MCU, 0x69, (1 << 0));
printram("DIMM initialization sequence complete\n"); } @@ -961,7 +961,7 @@ { u32 addr; /* Set Fun3_RX6B[2:0] to 011b (MSR Enable). */ - pci_mod_config8(MCU, 0x6b, 0x07, (3 << 0)); + pci_update_config8(MCU, 0x6b, ~0x07, (3 << 0)); /* Is this a funky rank with Address pins swapped? */ if (pin_swap) cmd = ddr3_mrs_mirror_pins(cmd); @@ -970,18 +970,18 @@ /* Execute the MRS */ volatile_read(addr); /* Set Fun3_Rx6B[2:0] to 000b (Normal SDRAM Mode). */ - pci_mod_config8(MCU, 0x6b, 0x07, 0x00); + pci_update_config8(MCU, 0x6b, ~0x07, 0x00); }
static void vx900_dram_enter_read_leveling(u8 pinswap) { /* Precharge all before issuing read leveling MRS to DRAM */ - pci_mod_config8(MCU, 0x06b, 0x07, 0x02); + pci_update_config8(MCU, 0x06b, ~0x07, 0x02); volatile_read(0x0); udelay(1000);
/* Enable read leveling: Set D0F3Rx71[7]=1 */ - pci_mod_config8(MCU, 0x71, 0, (1 << 7)); + pci_or_config8(MCU, 0x71, (1 << 7));
/* Put DRAM in read leveling mode */ mrs_cmd_t cmd = ddr3_get_mr3(1); @@ -995,7 +995,7 @@ vx900_dram_send_soft_mrs(cmd, pinswap);
/* Disable read leveling: Set D0F3Rx71[7]=0 */ - pci_mod_config8(MCU, 0x71, (1 << 7), 0); + pci_update_config8(MCU, 0x71, (u8)~(1 << 7), 0); }
/* @@ -1096,7 +1096,7 @@ const u32 cal_addr = 0x20;
/* Set IO calibration address */ - pci_mod_config16(MCU, 0x8c, 0xfff0, cal_addr & (0xfff0)); + pci_update_config16(MCU, 0x8c, (u16)~0xfff0, cal_addr & (0xfff0)); /* Data pattern must be 0x00 for this calibration * See paragraph describing Rx8e */ pci_write_config8(MCU, 0x8e, 0x00); @@ -1128,7 +1128,7 @@ const u8 ref_cnt = pci_read_config8(MCU, 0xc7); pci_write_config8(MCU, 0xc7, 0); /* Set IO calibration address */ - pci_mod_config16(MCU, 0x8c, 0xfff0, cal_addr & (0xfff0)); + pci_update_config16(MCU, 0x8c, (u16)~0xfff0, cal_addr & (0xfff0)); /* Data pattern must be 0x00 for this calibration * See paragraph describing Rx8e */ pci_write_config8(MCU, 0x8e, 0x00); @@ -1138,10 +1138,10 @@
/* From VIA code; Undocumented * In theory this enables MODT[3:0] to be asserted */ - pci_mod_config8(MCU, 0x9e, 0, 0x80); + pci_or_config8(MCU, 0x9e, 0x80);
/* Trigger calibration: Set D0F3Rx71[1:0]=10b */ - pci_mod_config8(MCU, 0x71, 0x03, 0x02); + pci_update_config8(MCU, 0x71, ~0x03, 0x02);
/* Wait for calibration to complete */ while (pci_read_config8(MCU, 0x71) & 0x02); @@ -1159,7 +1159,7 @@ /* Data pattern for calibration */ pci_write_config8(MCU, 0x8e, pattern); /* Trigger calibration */ - pci_mod_config8(MCU, 0x75, 0, 0x20); + pci_or_config8(MCU, 0x75, 0x20); /* Wait for calibration */ while (pci_read_config8(MCU, 0x75) & 0x20); } @@ -1171,9 +1171,9 @@ { const u32 cal_addr = 0x00; /* Set IO calibration address */ - pci_mod_config16(MCU, 0x8c, 0xfff0, cal_addr & (0xfff0)); + pci_update_config16(MCU, 0x8c, (u16)~0xfff0, cal_addr & (0xfff0)); /* Set circuit to use calibration results - Clear Rx75[0] */ - pci_mod_config8(MCU, 0x75, 0x01, 0); + pci_update_config8(MCU, 0x75, ~0x01, 0); /* Run calibration with first data pattern */ vx900_tx_dqs_trigger_calib(0x5a); /* Run again with different pattern */ @@ -1188,7 +1188,7 @@ /* Data pattern for calibration */ pci_write_config8(MCU, 0x8e, 0x5a); /* Trigger calibration */ - pci_mod_config8(MCU, 0x75, 0, 0x02); + pci_or_config8(MCU, 0x75, 0x02); /* Wait for calibration */ while (pci_read_config8(MCU, 0x75) & 0x02); } @@ -1217,7 +1217,7 @@ }
/* Put Rx DQS delay into manual mode (Set Rx[2,0] to 01) */ - pci_mod_config8(MCU, 0x71, 0x05, 0x01); + pci_update_config8(MCU, 0x71, ~0x05, 0x01); /* Now write the new settings */ vx900_delay_calib_mode_select(CALIB_RxDQS, CALIB_MANUAL); vx900_write_0x78_0x7f(dly->avg); @@ -1261,7 +1261,7 @@ dump_delay(rx_dq_cr->avg); } /* We need to put the setting on manual mode */ - pci_mod_config8(MCU, 0x71, 0, 1 << 4); + pci_or_config8(MCU, 0x71, 1 << 4); vx900_delay_calib_mode_select(CALIB_RxDQ_CR, CALIB_MANUAL); vx900_write_0x78_0x7f(rx_dq_cr->avg);
@@ -1276,7 +1276,7 @@
/* We're good to go. Switch to manual and write the manual * setting */ - pci_mod_config8(MCU, 0x71, 0, 1 << 0); + pci_or_config8(MCU, 0x71, 1 << 0); vx900_delay_calib_mode_select(CALIB_RxDQS, CALIB_MANUAL); vx900_write_0x78_0x7f(rx_dqs->avg); break; @@ -1316,7 +1316,7 @@ /************* TxDQ *************/ /* FIXME: not sure if multiple page mode should be enabled here * Vendor BIOS does it */ - pci_mod_config8(MCU, 0x69, 0, 0x01); + pci_or_config8(MCU, 0x69, 0x01);
dq_tries++; vx900_tx_dq_delay_calib(); @@ -1375,10 +1375,10 @@ else val = 0; val++; /* FIXME: vendor BIOS sets this to 3 */ - pci_mod_config8(MCU, 0x74, (0x03 << 1), ((val & 0x03) << 1)); + pci_update_config8(MCU, 0x74, ~(0x03 << 1), ((val & 0x03) << 1));
/* FIXME: The vendor BIOS increases the MD input delay - WHY ? */ - pci_mod_config8(MCU, 0xef, (3 << 4), 3 << 4); + pci_update_config8(MCU, 0xef, ~(3 << 4), 3 << 4);
/**** Write delay control ****/ /* FIXME: The vendor BIOS does this, but WHY? @@ -1386,14 +1386,14 @@ * to depend on the DRAM frequency. */ /* Early DQ/DQS for write cycles */ - pci_mod_config8(MCU, 0x76, (3 << 2), 2 << 2); + pci_update_config8(MCU, 0x76, ~(3 << 2), 2 << 2); /* FIXME: The vendor BIOS does this - Output preamble ? */ pci_write_config8(MCU, 0x77, 0x10);
/* Set BA[0/1/2] to [A17/18/19] */ vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP); /* Disable Multiple Page Mode - Set Rx69[0] to 0 */ - pci_mod_config8(MCU, 0x69, (1 << 0), 0x00); + pci_update_config8(MCU, 0x69, ~(1 << 0), 0x00);
/* It's very important that we keep all ranks which are not calibrated * mapped to VR3. Even if we disable them, if they are mapped to VR0 @@ -1422,7 +1422,7 @@ dump_delay_range(delay_cal.rx_dqs);
/* Enable multiple page mode for when calibrating transmit delays */ - pci_mod_config8(MCU, 0x69, 0, 1 << 1); + pci_or_config8(MCU, 0x69, 1 << 1);
/* * Unlike the receive delays, we need to run the transmit calibration @@ -1464,7 +1464,7 @@ dump_delay(delay_cal.tx_dq[0].avg); } /* Write manual settings */ - pci_mod_config8(MCU, 0x75, 0, 0x01); + pci_or_config8(MCU, 0x75, 0x01); vx900_delay_calib_mode_select(CALIB_TxDQS, CALIB_MANUAL); vx900_write_0x78_0x7f(delay_cal.tx_dqs[0].avg); vx900_delay_calib_mode_select(CALIB_TxDQ, CALIB_MANUAL); @@ -1538,7 +1538,7 @@ * all devices and know pci_tolm. */ tolm_mb = MIN(ramsize_mb, TOLM_3_5G >> 20); u16 reg_tolm = (tolm_mb << 4) & 0xfff0; - pci_mod_config16(MCU, 0x84, 0xfff0, reg_tolm); + pci_update_config16(MCU, 0x84, (u16)~0xfff0, reg_tolm);
printram("Initialized %u virtual ranks, with a total size of %u MB\n", (int)vrank, ramsize_mb); @@ -1609,10 +1609,10 @@
/* FIXME: Why are we doing this? */ /* Tri-state MCSi# when rank is in self-refresh */ - pci_mod_config8(MCU, 0x99, 0, 0x0f); + pci_or_config8(MCU, 0x99, 0x0f);
/* Enable paging mode and 8 page registers */ - pci_mod_config8(MCU, 0x69, 0, 0xe5); + pci_or_config8(MCU, 0x69, 0xe5);
/* Enable automatic triggering of short ZQ calibration */ pci_write_config8(MCU, 0xc8, 0x80); diff --git a/src/northbridge/via/vx900/sata.c b/src/northbridge/via/vx900/sata.c index 4df0053..d6f4c83 100644 --- a/src/northbridge/via/vx900/sata.c +++ b/src/northbridge/via/vx900/sata.c @@ -178,11 +178,11 @@ static void vx900_native_ide_mode(struct device *dev) { /* Disable subclass write protect */ - pci_mod_config8(dev, 0x45, 1 << 7, 0); + pci_update_config8(dev, 0x45, (u8)~(1 << 7), 0); /* Change the device class to IDE */ pci_write_config16(dev, PCI_CLASS_DEVICE, PCI_CLASS_STORAGE_IDE); /* Re-enable subclass write protect */ - pci_mod_config8(dev, 0x45, 0, 1 << 7); + pci_or_config8(dev, 0x45, 1 << 7); /* Put it in native IDE mode */ pci_write_config8(dev, PCI_CLASS_PROG, 0x8f); } @@ -190,20 +190,20 @@ static void vx900_sata_init(struct device *dev) { /* Enable SATA primary channel IO access */ - pci_mod_config8(dev, 0x40, 0, 1 << 1); + pci_or_config8(dev, 0x40, 1 << 1); /* Just SATA, so it makes sense to be in native SATA mode */ vx900_native_ide_mode(dev);
/* TP Layer Idle at least 20us before the Following Command */ - pci_mod_config8(dev, 0x53, 0, 1 << 7); + pci_or_config8(dev, 0x53, 1 << 7); /* Resend COMRESET When Recovering SATA Gen2 Device Error */ - pci_mod_config8(dev, 0x62, 1 << 1, 1 << 7); + pci_update_config8(dev, 0x62, ~(1 << 1), 1 << 7);
/* Fix "PMP Device Can't Detect HDD Normally" (VIA Porting Guide) * SATA device detection will not work unless we clear these bits. * Without doing this, SeaBIOS (and potentially other payloads) will * timeout when detecting SATA devices */ - pci_mod_config8(dev, 0x89, (1 << 3) | (1 << 6), 0); + pci_update_config8(dev, 0x89, ~(1 << 3) | (1 << 6), 0);
/* 12.7 Two Software Resets May Affect the System * When the software does the second reset before the first reset @@ -216,7 +216,7 @@ * second one anymore. The BSY bit of slave port would be always 1 after * the second software reset issues. BIOS should set the following * bit to avoid this issue. */ - pci_mod_config8(dev, 0x80, 0, 1 << 6); + pci_or_config8(dev, 0x80, 1 << 6);
/* We need to set the EPHY values before doing anything with the link */ sata_phy_config ephy; @@ -243,7 +243,7 @@ pci_write_config32(dev, 0xac, 0xffffffff);
/* Start OOB link negotiation sequence */ - pci_mod_config8(dev, 0xb9, 0, 3 << 4); + pci_or_config8(dev, 0xb9, 3 << 4);
/* FIXME: From now on, we are just doing DEBUG stuff * Wait until PHY communication is enabled */ diff --git a/src/northbridge/via/vx900/traf_ctrl.c b/src/northbridge/via/vx900/traf_ctrl.c index c2b4a48..734defc 100644 --- a/src/northbridge/via/vx900/traf_ctrl.c +++ b/src/northbridge/via/vx900/traf_ctrl.c @@ -93,7 +93,7 @@ /* Second register of the base. * Bit[7] also enables the IOAPIC and bit[5] enables MSI cycles */ base_val = (((uintptr_t)config->base) >> 16) & 0xf; - pci_mod_config8(dev, 0x40, 0, base_val | (1 << 7) | (1 << 5)); + pci_or_config8(dev, 0x40, base_val | (1 << 7) | (1 << 5)); }
/* diff --git a/src/northbridge/via/vx900/vx900.h b/src/northbridge/via/vx900/vx900.h index a2a360a..29fc472 100644 --- a/src/northbridge/via/vx900/vx900.h +++ b/src/northbridge/via/vx900/vx900.h @@ -43,20 +43,8 @@
#ifdef __SIMPLE_DEVICE__ void dump_pci_device(pci_devfn_t dev); -void pci_mod_config8(pci_devfn_t dev, unsigned int where, - uint8_t clr_mask, uint8_t set_mask); -void pci_mod_config16(pci_devfn_t dev, unsigned int where, - uint16_t clr_mask, uint16_t set_mask); -void pci_mod_config32(pci_devfn_t dev, unsigned int where, - uint32_t clr_mask, uint32_t set_mask); #else void dump_pci_device(struct device *dev); -void pci_mod_config8(struct device *dev, unsigned int where, - uint8_t clr_mask, uint8_t set_mask); -void pci_mod_config16(struct device *dev, unsigned int where, - uint16_t clr_mask, uint16_t set_mask); -void pci_mod_config32(struct device *dev, unsigned int where, - uint32_t clr_mask, uint32_t set_mask); #endif
#endif /* __VX900_H */