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>
This commit is contained in:
Kyösti Mälkki
2019-02-07 16:18:20 +02:00
parent eeedf83bcd
commit c043408ec5
12 changed files with 85 additions and 139 deletions

View File

@ -95,5 +95,5 @@ void main(unsigned long bist)
/* FIXME: See if this is needed or take this out please */ /* FIXME: See if this is needed or take this out please */
/* Disable Memcard and SDIO */ /* Disable Memcard and SDIO */
pci_mod_config8(LPC, 0x51, 0, (1 << 7) | (1 << 4)); pci_or_config8(LPC, 0x51, (1 << 7) | (1 << 4));
} }

View File

@ -151,7 +151,7 @@ static void chrome9hd_handle_uma(struct device *dev)
pci_write_config8(dev, 0xb2, ((0xff << (fb_pow - 2)) & ~(1 << 7))); pci_write_config8(dev, 0xb2, ((0xff << (fb_pow - 2)) & ~(1 << 7)));
vga_sr_write(0x68, (0xff << (fb_pow - 1))); vga_sr_write(0x68, (0xff << (fb_pow - 1)));
/* And also that the framebuffer is in the system, RAM */ /* 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 @@ static void chrome9hd_biosguide_init_seq(struct device *dev)
/* Step 1 - Enable VGA controller */ /* Step 1 - Enable VGA controller */
/* FIXME: This is the VGA hole @ 640k-768k, and the vga port io /* 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? */ * 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 */ /* 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 */ /* 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 */ /* Step 4 - Enable video subsystem */
vga_enable_mask((1 << 0), (1 << 0)); vga_enable_mask((1 << 0), (1 << 0));
@ -248,7 +248,7 @@ static void chrome9hd_enable(struct device *dev)
struct device *mcu = dev_find_device(PCI_VENDOR_ID_VIA, struct device *mcu = dev_find_device(PCI_VENDOR_ID_VIA,
PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0); PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0);
/* FIXME: here? -=- ACLK 250MHz */ /* FIXME: here? -=- ACLK 250MHz */
pci_mod_config8(mcu, 0xbb, 0, 0x01); pci_or_config8(mcu, 0xbb, 0x01);
} }
static void chrome9hd_disable(struct device *dev) static void chrome9hd_disable(struct device *dev)
@ -257,7 +257,7 @@ static void chrome9hd_disable(struct device *dev)
PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0); PCI_DEVICE_ID_VIA_VX900_MEMCTRL, 0);
/* Disable GFX - This step effectively renders the GFX inert /* Disable GFX - This step effectively renders the GFX inert
* It won't even show up as a PCI device during enumeration */ * 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 = { static struct device_operations chrome9hd_operations = {

View File

@ -19,32 +19,32 @@
static void vx900_cpu_bus_preram_setup(void) static void vx900_cpu_bus_preram_setup(void)
{ {
/* Faster CPU to DRAM Cycle */ /* 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 */ /* 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 */ /*CPU Interface Control - Advanced Options */
pci_write_config8(HOST_BUS, 0x52, 0xc7); pci_write_config8(HOST_BUS, 0x52, 0xc7);
/* Enable 8QW burst and 4QW request merging [4] and [2] /* Enable 8QW burst and 4QW request merging [4] and [2]
* and special mode for read cycles bit[3] */ * 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 */ /* High priority upstream requests on V4 bus */
pci_write_config8(HOST_BUS, 0x56, 0x03); pci_write_config8(HOST_BUS, 0x56, 0x03);
/* CPU to DRAM extra 1T access control */ /* 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 */ /* 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 */ /* 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 */ /* 1T delay for data on CPU bus */
pci_write_config8(HOST_BUS, 0x9e, 0x0e); pci_write_config8(HOST_BUS, 0x9e, 0x0e);
/* Arbitrate ownership of DRAM controller a few cycles earlier */ /* 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 */ /* Write retire policy */
pci_write_config8(HOST_BUS, 0x5d, 0xa2); pci_write_config8(HOST_BUS, 0x5d, 0xa2);
/* Occupancy timer */ /* Occupancy timer */
pci_write_config8(HOST_BUS, 0x53, 0x44); pci_write_config8(HOST_BUS, 0x53, 0x44);
/* Medium Threshold for Write Retire Policy - 6 requests */ /* 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 */ /* Bandwidth timer */
pci_write_config8(HOST_BUS, 0x5e, 0x44); pci_write_config8(HOST_BUS, 0x5e, 0x44);
} }

View File

@ -109,7 +109,7 @@ void vx900_disable_legacy_rom_shadow(void)
pci_write_config8(MCU, 0x83, 0x31); pci_write_config8(MCU, 0x83, 0x31);
/* Bits 6:0 are the ROM shadow on top of 4G, so leave those untouched */ /* 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, 0x61, 0); /* 768k - 832k */
pci_write_config8(SNMIC, 0x62, 0); /* 832k - 896k */ pci_write_config8(SNMIC, 0x62, 0); /* 832k - 896k */
@ -126,5 +126,5 @@ void vx900_disable_legacy_rom_shadow(void)
void vx900_disable_gfx(void) void vx900_disable_gfx(void)
{ {
/* Disable GFX */ /* Disable GFX */
pci_mod_config8(MCU, 0xa1, 1 << 7, 0); pci_update_config8(MCU, 0xa1, (u8)~(1 << 7), 0);
} }

View File

@ -53,7 +53,7 @@ static void vx900_lpc_misc_stuff(struct device *dev)
struct northbridge_via_vx900_config *nb = (void *)dev->chip_info; struct northbridge_via_vx900_config *nb = (void *)dev->chip_info;
/* GPIO 11,10 to SATALED [1,0] */ /* 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 */ /* Route the external interrupt line */
extint = nb->ext_int_route_to_pirq; extint = nb->ext_int_route_to_pirq;
@ -65,7 +65,7 @@ static void vx900_lpc_misc_stuff(struct device *dev)
extint); extint);
val = extint - 'A'; val = extint - 'A';
val |= (1 << 3); /* bit3 enables the external int */ 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 @@ static void vx900_lpc_dma_setup(struct device *dev)
/* FIXME: Setting this seems to hang our system */ /* FIXME: Setting this seems to hang our system */
/* Positive decoding for ROM + APIC + On-board IO ports */ /* 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 */ /* Enable DMA channels. BIOS guide recommends DMA channel 2 off */
pci_write_config8(dev, 0x53, 0xfb); pci_write_config8(dev, 0x53, 0xfb);
/* Disable PCI/DMA Memory Cycles Output to PCI Bus */ /* 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 */ /* DMA bandwidth control - Improved bandwidth */
pci_write_config8(dev, 0x53, 0xff); pci_write_config8(dev, 0x53, 0xff);
/* ISA Positive Decoding control */ /* ISA Positive Decoding control */
@ -147,20 +147,20 @@ static void vx900_lpc_ioapic_setup(struct device *dev)
* So much work for one line of code. Talk about bloat :) * So much work for one line of code. Talk about bloat :)
* The 8259 PIC should still work even if the IOAPIC is enabled, so * The 8259 PIC should still work even if the IOAPIC is enabled, so
* there's no crime in enabling the IOAPIC here. */ * 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) static void vx900_lpc_interrupt_stuff(struct device *dev)
{ {
/* Enable setting trigger mode through 0x4d0, and 0x4d1 ports /* Enable setting trigger mode through 0x4d0, and 0x4d1 ports
* And enable I/O recovery time */ * 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) /* Set serial IRQ frame width to 6 PCI cycles (recommended by VIA)
* And enable serial IRQ */ * 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 */ /* 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)); pci_write_config8(dev, 0x4c, (1 << 6));
@ -253,12 +253,12 @@ void pirq_assign_irqs(const u8 *pirq)
PCI_DEVICE_ID_VIA_VX900_LPC, 0); PCI_DEVICE_ID_VIA_VX900_LPC, 0);
/* Take care of INTA -> INTD */ /* 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, 0x56, pirq[1] | (pirq[2] << 4));
pci_write_config8(lpc, 0x57, pirq[3] << 4); pci_write_config8(lpc, 0x57, pirq[3] << 4);
/* Enable INTE -> INTH to be on separate IRQs */ /* 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 */ /* Now do INTE -> INTH */
pci_write_config8(lpc, 0x44, pirq[4] | (pirq[5] << 4)); pci_write_config8(lpc, 0x44, pirq[4] | (pirq[5] << 4));
pci_write_config8(lpc, 0x45, pirq[6] | (pirq[7] << 4)); pci_write_config8(lpc, 0x45, pirq[6] | (pirq[7] << 4));

View File

@ -83,7 +83,7 @@ void vx900_set_chrome9hd_fb_size(u32 size_mb)
fb_pow--; fb_pow--;
size_mb = (1 << 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 */ /* Gets the configured framebuffer size as a power of 2 */

View File

@ -129,7 +129,7 @@ static u64 vx900_remap_above_4g(struct device *mcu, u32 tolm)
/* The "start remapping from where ?" register */ /* The "start remapping from where ?" register */
reg16 = ((tolm >> 20) & 0xfff) << 4; reg16 = ((tolm >> 20) & 0xfff) << 4;
pci_mod_config16(mcu, 0x84, 0xfff0, reg16); pci_update_config16(mcu, 0x84, (u16)~0xfff0, reg16);
/* Find the chunk size */ /* Find the chunk size */
tor = vx900_get_top_of_ram(mcu); tor = vx900_get_top_of_ram(mcu);

View File

@ -38,45 +38,3 @@ void dump_pci_device(struct device *dev)
printk(BIOS_DEBUG, "\n"); 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);
}

View File

@ -485,9 +485,9 @@ static void vx900_dram_driving_ctrl(const dimm_info * dimm)
/* Enable strong CLK driving for DIMMs with more than one rank */ /* Enable strong CLK driving for DIMMs with more than one rank */
if (dimm->dimm[0].ranks > 1) 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) 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 */ /* DRAM ODT Lookup Table */
for (i = 0;; i++) { for (i = 0;; i++) {
@ -528,7 +528,7 @@ static void vx900_map_pr_vr(u8 pr, u8 vr)
val = 0x8 | vr; val = 0x8 | vr;
/* Now move the value to the appropriate PR */ /* Now move the value to the appropriate PR */
val <<= (pr * 4); 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); printram("Mapping PR %u to VR %u\n", pr, vr);
} }
@ -629,7 +629,7 @@ static void vx900_dram_timing(ramctr_timing * ctrl)
val = DIV_ROUND_UP(ctrl->tWTR, ctrl->tCK); val = DIV_ROUND_UP(ctrl->tWTR, ctrl->tCK);
printram("Selected tWTR : %uT\n", val); printram("Selected tWTR : %uT\n", val);
reg8 |= ((val - 2) & 0x7); reg8 |= ((val - 2) & 0x7);
pci_mod_config8(MCU, 0xc4, 0x3f, reg8); pci_update_config8(MCU, 0xc4, ~0x3f, reg8);
/* DRAM Timing for All Ranks - VI /* DRAM Timing for All Ranks - VI
* [7:6] CKE Assertion Minimum Pulse Width * [7:6] CKE Assertion Minimum Pulse Width
@ -662,7 +662,7 @@ static void vx900_dram_freq(ramctr_timing * ctrl)
u8 val; u8 val;
/* Step 1 - Reset the PLL */ /* 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 */ /* Wait at least 10 ns; VIA code delays by 640us */
udelay(640); udelay(640);
@ -681,30 +681,30 @@ static void vx900_dram_freq(ramctr_timing * ctrl)
ctrl->tCK = TCK_266MHZ; ctrl->tCK = TCK_266MHZ;
} }
/* Restart the PLL with the desired frequency */ /* 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 */ /* Step 3 - Wait for PLL to stabilize */
udelay(2000); udelay(2000);
/* Step 4 - Reset the DLL - Clear [7,4] */ /* 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); udelay(2000);
/* Step 5 - Enable the DLL - Set bits [7,4] to 01b */ /* 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); udelay(2000);
/* Step 6 - Start DLL Calibration - Set bit [7] */ /* Step 6 - Start DLL Calibration - Set bit [7] */
pci_mod_config8(MCU, 0x6b, 0x00, 0x80); pci_or_config8(MCU, 0x6b, 0x80);
udelay(5); udelay(5);
/* Step 7 - Finish DLL Calibration - Clear bit [7] */ /* 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] */ /* Step 8 - If we have registered DIMMs, we need to set bit[0] */
if (spd_dimm_is_registered_ddr3(ctrl->dimm_type)) { if (spd_dimm_is_registered_ddr3(ctrl->dimm_type)) {
printram("Enabling RDIMM support in memory controller\n"); 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 @@ static void vx900_dram_ddr3_do_sw_mrs(u8 ma_swap, enum ddr3_mr1_rtt_nom rtt_nom,
/* Was already done for us before calling us */ /* Was already done for us before calling us */
/* Step 08 - Set Fun3_RX6B[2:0] to 011b (MSR Enable). */ /* 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 /* Step 09 - Issue MR2 cycle. Read a double word from the address
* depended on DRAM's Rtt_WR and CWL settings. */ * depended on DRAM's Rtt_WR and CWL settings. */
@ -853,7 +853,7 @@ static void vx900_dram_ddr3_do_sw_mrs(u8 ma_swap, enum ddr3_mr1_rtt_nom rtt_nom,
udelay(1000); udelay(1000);
/* Step 13 - Set Fun3_RX6B[2:0] to 110b (Long ZQ calibration cmd) */ /* 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. */ /* Step 14 - Read a double word from any address of the DIMM. */
volatile_read(0); volatile_read(0);
udelay(1000); udelay(1000);
@ -873,9 +873,9 @@ static void vx900_dram_ddr3_dimm_init(const ramctr_timing * ctrl,
vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP); vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP);
/* Step 01 - Set Fun3_Rx6E[5] to 1b to support burst length. */ /* 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). */ /* 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 ? */ /* And set [7:6] to 10b ? */
pci_write_config8(MCU, 0x69, 0x87); pci_write_config8(MCU, 0x69, 0x87);
@ -887,7 +887,7 @@ static void vx900_dram_ddr3_dimm_init(const ramctr_timing * ctrl,
pci_write_config8(MCU, 0x50, 0xd8); pci_write_config8(MCU, 0x50, 0xd8);
/* Step 05 - Set Fun3_RX6B[5] to 1b to de-assert RESET# and wait for at /* Step 05 - Set Fun3_RX6B[5] to 1b to de-assert RESET# and wait for at
* least 500 us. */ * least 500 us. */
pci_mod_config8(MCU, 0x6b, 0x00, (1 << 5)); pci_or_config8(MCU, 0x6b, (1 << 5));
udelay(500); udelay(500);
/* Step 6 -> 15 - Set the target physical rank to virtual rank 0 and /* Step 6 -> 15 - Set the target physical rank to virtual rank 0 and
@ -903,9 +903,9 @@ static void vx900_dram_ddr3_dimm_init(const ramctr_timing * ctrl,
vx900_map_pr_vr(i, 0); vx900_map_pr_vr(i, 0);
/* FIXME: Is this needed on HW init? */ /* 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 */ 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 /* See init_dram_by_rank.c and get_basic_information.c
* in the VIA provided code */ * in the VIA provided code */
@ -934,20 +934,20 @@ static void vx900_dram_ddr3_dimm_init(const ramctr_timing * ctrl,
0, 0); 0, 0);
/* Normal SDRAM Mode */ /* 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 */ /* Step 15, set the rank to virtual rank 3 */
vx900_map_pr_vr(i, 3); vx900_map_pr_vr(i, 3);
} }
/* Step 16 - Set Fun3_Rx6B[2:0] to 000b (Normal SDRAM Mode). */ /* 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] */ /* Set BA[0/1/2] to [A13/14/15] */
vx900_dram_set_ma_pin_map(VX900_CALIB_MA_MAP); vx900_dram_set_ma_pin_map(VX900_CALIB_MA_MAP);
/* Step 17 - Set Fun3_Rx69[0] to 1b (Enable Multiple Page Mode). */ /* 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"); printram("DIMM initialization sequence complete\n");
} }
@ -961,7 +961,7 @@ static void vx900_dram_send_soft_mrs(mrs_cmd_t cmd, u8 pin_swap)
{ {
u32 addr; u32 addr;
/* Set Fun3_RX6B[2:0] to 011b (MSR Enable). */ /* 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? */ /* Is this a funky rank with Address pins swapped? */
if (pin_swap) if (pin_swap)
cmd = ddr3_mrs_mirror_pins(cmd); cmd = ddr3_mrs_mirror_pins(cmd);
@ -970,18 +970,18 @@ static void vx900_dram_send_soft_mrs(mrs_cmd_t cmd, u8 pin_swap)
/* Execute the MRS */ /* Execute the MRS */
volatile_read(addr); volatile_read(addr);
/* Set Fun3_Rx6B[2:0] to 000b (Normal SDRAM Mode). */ /* 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) static void vx900_dram_enter_read_leveling(u8 pinswap)
{ {
/* Precharge all before issuing read leveling MRS to DRAM */ /* 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); volatile_read(0x0);
udelay(1000); udelay(1000);
/* Enable read leveling: Set D0F3Rx71[7]=1 */ /* 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 */ /* Put DRAM in read leveling mode */
mrs_cmd_t cmd = ddr3_get_mr3(1); mrs_cmd_t cmd = ddr3_get_mr3(1);
@ -995,7 +995,7 @@ static void vx900_dram_exit_read_leveling(u8 pinswap)
vx900_dram_send_soft_mrs(cmd, pinswap); vx900_dram_send_soft_mrs(cmd, pinswap);
/* Disable read leveling: Set D0F3Rx71[7]=0 */ /* 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 @@ static void vx900_rx_capture_range_calib(u8 pinswap)
const u32 cal_addr = 0x20; const u32 cal_addr = 0x20;
/* Set IO calibration address */ /* 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 /* Data pattern must be 0x00 for this calibration
* See paragraph describing Rx8e */ * See paragraph describing Rx8e */
pci_write_config8(MCU, 0x8e, 0x00); pci_write_config8(MCU, 0x8e, 0x00);
@ -1128,7 +1128,7 @@ static void vx900_rx_dqs_delay_calib(u8 pinswap)
const u8 ref_cnt = pci_read_config8(MCU, 0xc7); const u8 ref_cnt = pci_read_config8(MCU, 0xc7);
pci_write_config8(MCU, 0xc7, 0); pci_write_config8(MCU, 0xc7, 0);
/* Set IO calibration address */ /* 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 /* Data pattern must be 0x00 for this calibration
* See paragraph describing Rx8e */ * See paragraph describing Rx8e */
pci_write_config8(MCU, 0x8e, 0x00); pci_write_config8(MCU, 0x8e, 0x00);
@ -1138,10 +1138,10 @@ static void vx900_rx_dqs_delay_calib(u8 pinswap)
/* From VIA code; Undocumented /* From VIA code; Undocumented
* In theory this enables MODT[3:0] to be asserted */ * 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 */ /* 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 */ /* Wait for calibration to complete */
while (pci_read_config8(MCU, 0x71) & 0x02); while (pci_read_config8(MCU, 0x71) & 0x02);
@ -1159,7 +1159,7 @@ static void vx900_tx_dqs_trigger_calib(u8 pattern)
/* Data pattern for calibration */ /* Data pattern for calibration */
pci_write_config8(MCU, 0x8e, pattern); pci_write_config8(MCU, 0x8e, pattern);
/* Trigger calibration */ /* Trigger calibration */
pci_mod_config8(MCU, 0x75, 0, 0x20); pci_or_config8(MCU, 0x75, 0x20);
/* Wait for calibration */ /* Wait for calibration */
while (pci_read_config8(MCU, 0x75) & 0x20); while (pci_read_config8(MCU, 0x75) & 0x20);
} }
@ -1171,9 +1171,9 @@ static void vx900_tx_dqs_delay_calib(void)
{ {
const u32 cal_addr = 0x00; const u32 cal_addr = 0x00;
/* Set IO calibration address */ /* 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] */ /* 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 */ /* Run calibration with first data pattern */
vx900_tx_dqs_trigger_calib(0x5a); vx900_tx_dqs_trigger_calib(0x5a);
/* Run again with different pattern */ /* Run again with different pattern */
@ -1188,7 +1188,7 @@ static void vx900_tx_dq_delay_calib(void)
/* Data pattern for calibration */ /* Data pattern for calibration */
pci_write_config8(MCU, 0x8e, 0x5a); pci_write_config8(MCU, 0x8e, 0x5a);
/* Trigger calibration */ /* Trigger calibration */
pci_mod_config8(MCU, 0x75, 0, 0x02); pci_or_config8(MCU, 0x75, 0x02);
/* Wait for calibration */ /* Wait for calibration */
while (pci_read_config8(MCU, 0x75) & 0x02); while (pci_read_config8(MCU, 0x75) & 0x02);
} }
@ -1217,7 +1217,7 @@ static void vx900_rxdqs_adjust(delay_range * dly)
} }
/* Put Rx DQS delay into manual mode (Set Rx[2,0] to 01) */ /* 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 */ /* Now write the new settings */
vx900_delay_calib_mode_select(CALIB_RxDQS, CALIB_MANUAL); vx900_delay_calib_mode_select(CALIB_RxDQS, CALIB_MANUAL);
vx900_write_0x78_0x7f(dly->avg); vx900_write_0x78_0x7f(dly->avg);
@ -1261,7 +1261,7 @@ static void vx900_dram_calibrate_receive_delays(vx900_delay_calib * delays,
dump_delay(rx_dq_cr->avg); dump_delay(rx_dq_cr->avg);
} }
/* We need to put the setting on manual mode */ /* 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_delay_calib_mode_select(CALIB_RxDQ_CR, CALIB_MANUAL);
vx900_write_0x78_0x7f(rx_dq_cr->avg); vx900_write_0x78_0x7f(rx_dq_cr->avg);
@ -1276,7 +1276,7 @@ static void vx900_dram_calibrate_receive_delays(vx900_delay_calib * delays,
/* We're good to go. Switch to manual and write the manual /* We're good to go. Switch to manual and write the manual
* setting */ * 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_delay_calib_mode_select(CALIB_RxDQS, CALIB_MANUAL);
vx900_write_0x78_0x7f(rx_dqs->avg); vx900_write_0x78_0x7f(rx_dqs->avg);
break; break;
@ -1316,7 +1316,7 @@ static void vx900_dram_calibrate_transmit_delays(delay_range * tx_dq,
/************* TxDQ *************/ /************* TxDQ *************/
/* FIXME: not sure if multiple page mode should be enabled here /* FIXME: not sure if multiple page mode should be enabled here
* Vendor BIOS does it */ * Vendor BIOS does it */
pci_mod_config8(MCU, 0x69, 0, 0x01); pci_or_config8(MCU, 0x69, 0x01);
dq_tries++; dq_tries++;
vx900_tx_dq_delay_calib(); vx900_tx_dq_delay_calib();
@ -1375,10 +1375,10 @@ static void vx900_dram_calibrate_delays(const ramctr_timing * ctrl,
else else
val = 0; val = 0;
val++; /* FIXME: vendor BIOS sets this to 3 */ 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 ? */ /* 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 ****/ /**** Write delay control ****/
/* FIXME: The vendor BIOS does this, but WHY? /* FIXME: The vendor BIOS does this, but WHY?
@ -1386,14 +1386,14 @@ static void vx900_dram_calibrate_delays(const ramctr_timing * ctrl,
* to depend on the DRAM frequency. * to depend on the DRAM frequency.
*/ */
/* Early DQ/DQS for write cycles */ /* 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 ? */ /* FIXME: The vendor BIOS does this - Output preamble ? */
pci_write_config8(MCU, 0x77, 0x10); pci_write_config8(MCU, 0x77, 0x10);
/* Set BA[0/1/2] to [A17/18/19] */ /* Set BA[0/1/2] to [A17/18/19] */
vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP); vx900_dram_set_ma_pin_map(VX900_MRS_MA_MAP);
/* Disable Multiple Page Mode - Set Rx69[0] to 0 */ /* 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 /* 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 * mapped to VR3. Even if we disable them, if they are mapped to VR0
@ -1422,7 +1422,7 @@ static void vx900_dram_calibrate_delays(const ramctr_timing * ctrl,
dump_delay_range(delay_cal.rx_dqs); dump_delay_range(delay_cal.rx_dqs);
/* Enable multiple page mode for when calibrating transmit delays */ /* 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 * Unlike the receive delays, we need to run the transmit calibration
@ -1464,7 +1464,7 @@ static void vx900_dram_calibrate_delays(const ramctr_timing * ctrl,
dump_delay(delay_cal.tx_dq[0].avg); dump_delay(delay_cal.tx_dq[0].avg);
} }
/* Write manual settings */ /* 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_delay_calib_mode_select(CALIB_TxDQS, CALIB_MANUAL);
vx900_write_0x78_0x7f(delay_cal.tx_dqs[0].avg); vx900_write_0x78_0x7f(delay_cal.tx_dqs[0].avg);
vx900_delay_calib_mode_select(CALIB_TxDQ, CALIB_MANUAL); vx900_delay_calib_mode_select(CALIB_TxDQ, CALIB_MANUAL);
@ -1538,7 +1538,7 @@ static void vx900_dram_range(ramctr_timing * ctrl, rank_layout * ranks)
* all devices and know pci_tolm. */ * all devices and know pci_tolm. */
tolm_mb = MIN(ramsize_mb, TOLM_3_5G >> 20); tolm_mb = MIN(ramsize_mb, TOLM_3_5G >> 20);
u16 reg_tolm = (tolm_mb << 4) & 0xfff0; 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", printram("Initialized %u virtual ranks, with a total size of %u MB\n",
(int)vrank, ramsize_mb); (int)vrank, ramsize_mb);
@ -1609,10 +1609,10 @@ static void vx900_dram_write_final_config(ramctr_timing * ctrl)
/* FIXME: Why are we doing this? */ /* FIXME: Why are we doing this? */
/* Tri-state MCSi# when rank is in self-refresh */ /* 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 */ /* 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 */ /* Enable automatic triggering of short ZQ calibration */
pci_write_config8(MCU, 0xc8, 0x80); pci_write_config8(MCU, 0xc8, 0x80);

View File

@ -178,11 +178,11 @@ static void vx900_sata_dump_phy_config(sata_phy_config cfg)
static void vx900_native_ide_mode(struct device *dev) static void vx900_native_ide_mode(struct device *dev)
{ {
/* Disable subclass write protect */ /* 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 */ /* Change the device class to IDE */
pci_write_config16(dev, PCI_CLASS_DEVICE, PCI_CLASS_STORAGE_IDE); pci_write_config16(dev, PCI_CLASS_DEVICE, PCI_CLASS_STORAGE_IDE);
/* Re-enable subclass write protect */ /* 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 */ /* Put it in native IDE mode */
pci_write_config8(dev, PCI_CLASS_PROG, 0x8f); pci_write_config8(dev, PCI_CLASS_PROG, 0x8f);
} }
@ -190,20 +190,20 @@ static void vx900_native_ide_mode(struct device *dev)
static void vx900_sata_init(struct device *dev) static void vx900_sata_init(struct device *dev)
{ {
/* Enable SATA primary channel IO access */ /* 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 */ /* Just SATA, so it makes sense to be in native SATA mode */
vx900_native_ide_mode(dev); vx900_native_ide_mode(dev);
/* TP Layer Idle at least 20us before the Following Command */ /* 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 */ /* 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) /* Fix "PMP Device Can't Detect HDD Normally" (VIA Porting Guide)
* SATA device detection will not work unless we clear these bits. * SATA device detection will not work unless we clear these bits.
* Without doing this, SeaBIOS (and potentially other payloads) will * Without doing this, SeaBIOS (and potentially other payloads) will
* timeout when detecting SATA devices */ * 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 /* 12.7 Two Software Resets May Affect the System
* When the software does the second reset before the first reset * When the software does the second reset before the first reset
@ -216,7 +216,7 @@ static void vx900_sata_init(struct device *dev)
* second one anymore. The BSY bit of slave port would be always 1 after * second one anymore. The BSY bit of slave port would be always 1 after
* the second software reset issues. BIOS should set the following * the second software reset issues. BIOS should set the following
* bit to avoid this issue. */ * 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 */ /* We need to set the EPHY values before doing anything with the link */
sata_phy_config ephy; sata_phy_config ephy;
@ -243,7 +243,7 @@ static void vx900_sata_init(struct device *dev)
pci_write_config32(dev, 0xac, 0xffffffff); pci_write_config32(dev, 0xac, 0xffffffff);
/* Start OOB link negotiation sequence */ /* 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 /* FIXME: From now on, we are just doing DEBUG stuff
* Wait until PHY communication is enabled */ * Wait until PHY communication is enabled */

View File

@ -93,7 +93,7 @@ static void vx900_north_ioapic_setup(struct device *dev)
/* Second register of the base. /* Second register of the base.
* Bit[7] also enables the IOAPIC and bit[5] enables MSI cycles */ * Bit[7] also enables the IOAPIC and bit[5] enables MSI cycles */
base_val = (((uintptr_t)config->base) >> 16) & 0xf; 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));
} }
/* /*

View File

@ -43,20 +43,8 @@ uint64_t get_uma_memory_base(void);
#ifdef __SIMPLE_DEVICE__ #ifdef __SIMPLE_DEVICE__
void dump_pci_device(pci_devfn_t dev); 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 #else
void dump_pci_device(struct device *dev); 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
#endif /* __VX900_H */ #endif /* __VX900_H */