コード例 #1
0
ファイル: lpc.c プロジェクト: tidatida/coreboot
static void enable_clock_gating(device_t dev)
{
	u32 reg32;
	u16 reg16;

	RCBA32_AND_OR(0x2234, ~0UL, 0xf);

	reg16 = pci_read_config16(dev, GEN_PMCON_1);
	reg16 |= (1 << 2) | (1 << 11);
	pci_write_config16(dev, GEN_PMCON_1, reg16);

	pch_iobp_update(0xEB007F07, ~0UL, (1 << 31));
	pch_iobp_update(0xEB004000, ~0UL, (1 << 7));
	pch_iobp_update(0xEC007F07, ~0UL, (1 << 31));
	pch_iobp_update(0xEC004000, ~0UL, (1 << 7));

	reg32 = RCBA32(CG);
	reg32 |= (1 << 31);
	reg32 |= (1 << 29) | (1 << 28);
	reg32 |= (1 << 27) | (1 << 26) | (1 << 25) | (1 << 24);
	reg32 |= (1 << 16);
	reg32 |= (1 << 17);
	reg32 |= (1 << 18);
	reg32 |= (1 << 22);
	reg32 |= (1 << 23);
	reg32 &= ~(1 << 20);
	reg32 |= (1 << 19);
	reg32 |= (1 << 0);
	reg32 |= (0xf << 1);
	RCBA32(CG) = reg32;

	RCBA32_OR(0x38c0, 0x7);
	RCBA32_OR(0x36d4, 0x6680c004);
	RCBA32_OR(0x3564, 0x3);
}
コード例 #2
0
ファイル: usb_ehci.c プロジェクト: killbug2004/coreboot
void usb_ehci_disable(device_t dev)
{
    u16 reg16;
    u32 reg32;

    /* Set 0xDC[0]=1 */
    pci_or_config32(dev, 0xdc, (1 << 0));

    /* Set D3Hot state and disable PME */
    reg16 = pci_read_config16(dev, EHCI_PWR_CTL_STS);
    reg16 &= ~(PWR_CTL_ENABLE_PME | PWR_CTL_SET_MASK);
    reg16 |= PWR_CTL_SET_D3;
    pci_write_config16(dev, EHCI_PWR_CTL_STS, reg16);

    /* Clear memory and bus master */
    pci_write_config32(dev, PCI_BASE_ADDRESS_0, 0);
    reg32 = pci_read_config32(dev, PCI_COMMAND);
    reg32 &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
    pci_write_config32(dev, PCI_COMMAND, reg32);

    /* Disable device */
    switch (dev) {
    case PCH_EHCI1_DEV:
        RCBA32_OR(FD, PCH_DISABLE_EHCI1);
        break;
    case PCH_EHCI2_DEV:
        RCBA32_OR(FD, PCH_DISABLE_EHCI2);
        break;
    }
}
コード例 #3
0
ファイル: lpc.c プロジェクト: tidatida/coreboot
static void pch_fixups(struct device *dev)
{
	/*
	 * Enable DMI ASPM in the PCH
	 */
	RCBA32_AND_OR(0x2304, ~(1 << 10), 0);
	RCBA32_OR(0x21a4, (1 << 11)|(1 << 10));
	RCBA32_OR(0x21a8, 0x3);
}
コード例 #4
0
ファイル: finalize.c プロジェクト: RafaelRMachado/Coreboot
void intel_pch_finalize_smm(void)
{
	if (CONFIG_LOCK_SPI_ON_RESUME_RO || CONFIG_LOCK_SPI_ON_RESUME_NO_ACCESS) {
		/* Copy flash regions from FREG0-4 to PR0-4
		   and enable write protection bit31 */
		int i;
		u32 lockmask = (1 << 31);
		if (CONFIG_LOCK_SPI_ON_RESUME_NO_ACCESS)
			lockmask |= (1 << 15);
		for (i = 0; i < 20; i += 4)
			RCBA32(0x3874 + i) = RCBA32(0x3854 + i) | lockmask;
	}

	/* Set SPI opcode menu */
	RCBA16(0x3894) = SPI_OPPREFIX;
	RCBA16(0x3896) = SPI_OPTYPE;
	RCBA32(0x3898) = SPI_OPMENU_LOWER;
	RCBA32(0x389c) = SPI_OPMENU_UPPER;

	/* Lock SPIBAR */
	RCBA32_OR(0x3804, (1 << 15));

#if CONFIG_SPI_FLASH_SMM
	/* Re-init SPI driver to handle locked BAR */
	spi_init();
#endif

	/* TCLOCKDN: TC Lockdown */
	RCBA32_OR(0x0050, (1 << 31));

	/* BIOS Interface Lockdown */
	RCBA32_OR(0x3410, (1 << 0));

	/* Function Disable SUS Well Lockdown */
	RCBA_AND_OR(8, 0x3420, ~0U, (1 << 7));

	/* Global SMI Lock */
	pci_or_config16(PCH_LPC_DEV, 0xa0, 1 << 4);

	/* GEN_PMCON Lock */
	pci_or_config8(PCH_LPC_DEV, 0xa6, (1 << 1) | (1 << 2));

	/* R/WO registers */
	RCBA32(0x21a4) = RCBA32(0x21a4);
	pci_write_config32(PCI_DEV(0, 27, 0), 0x74,
		    pci_read_config32(PCI_DEV(0, 27, 0), 0x74));

	/* Indicate finalize step with post code */
	outb(POST_OS_BOOT, 0x80);
}
コード例 #5
0
ファイル: finalize.c プロジェクト: zamaudio/coreboot
static void broadwell_finalize(void *unused)
{
	printk(BIOS_DEBUG, "Finalizing chipset.\n");

	reg_script_run_on_dev(SA_DEV_ROOT, system_agent_finalize_script);
	reg_script_run_on_dev(PCH_DEV_LPC, pch_finalize_script);

	/* Lock */
	RCBA32_OR(0x3a6c, 0x00000001);

	/* Read+Write the following registers */
	MCHBAR32(0x6030) = MCHBAR32(0x6030);
	MCHBAR32(0x6034) = MCHBAR32(0x6034);
	MCHBAR32(0x6008) = MCHBAR32(0x6008);
	RCBA32(0x21a4) = RCBA32(0x21a4);

	/* Re-init SPI after lockdown */
	spi_init();

	printk(BIOS_DEBUG, "Finalizing SMM.\n");
	outb(APM_CNT_FINALIZE, APM_CNT);

	/* Indicate finalize step with post code */
	post_code(POST_OS_BOOT);
}
コード例 #6
0
static void pch_fixups(struct device *dev)
{
	u8 gen_pmcon_2;

	/* Indicate DRAM init done for MRC S3 to know it can resume */
	gen_pmcon_2 = pci_read_config8(dev, GEN_PMCON_2);
	gen_pmcon_2 |= (1 << 7);
	pci_write_config8(dev, GEN_PMCON_2, gen_pmcon_2);

	/*
	 * Enable DMI ASPM in the PCH
	 */
	RCBA32_AND_OR(0x2304, ~(1 << 10), 0);
	RCBA32_OR(0x21a4, (1 << 11)|(1 << 10));
	RCBA32_OR(0x21a8, 0x3);
}
コード例 #7
0
ファイル: usb_ehci.c プロジェクト: killbug2004/coreboot
static void usb_ehci_init(struct device *dev)
{
    printk(BIOS_DEBUG, "EHCI: Setting up controller.. ");

    usb_ehci_clock_gating(dev);

    /* Disable Wake on Disconnect in RMH */
    RCBA32_OR(0x35b0, 0x00000022);

    printk(BIOS_DEBUG, "done.\n");
}
コード例 #8
0
ファイル: serialio.c プロジェクト: RafaelRMachado/Coreboot
/* Init sequence to be run once, done as part of D21:F0 (SDMA) init. */
static void serialio_init_once(int acpi_mode)
{
	if (acpi_mode) {
		/* Enable ACPI IRQ for IRQ13, IRQ7, IRQ6, IRQ5 in RCBA. */
		RCBA32_OR(ACPIIRQEN, (1 << 13)|(1 << 7)|(1 << 6)|(1 << 5));
	}

	/* Program IOBP CB000154h[12,9:8,4:0] = 1001100011111b. */
	pch_iobp_update(SIO_IOBP_GPIODF, ~0x0000131f, 0x0000131f);

	/* Program IOBP CB000180h[5:0] = 111111b (undefined register) */
	pch_iobp_update(0xcb000180, ~0x0000003f, 0x0000003f);
}
コード例 #9
0
ファイル: finalize.c プロジェクト: 0ida/coreboot
void intel_pch_finalize_smm(void)
{
    /* Set SPI opcode menu */
    RCBA16(0x3894) = SPI_OPPREFIX;
    RCBA16(0x3896) = SPI_OPTYPE;
    RCBA32(0x3898) = SPI_OPMENU_LOWER;
    RCBA32(0x389c) = SPI_OPMENU_UPPER;

    /* Lock SPIBAR */
    RCBA32_OR(0x3804, (1 << 15));

#if CONFIG_SPI_FLASH_SMM
    /* Re-init SPI driver to handle locked BAR */
    spi_init();
#endif

    /* TCLOCKDN: TC Lockdown */
    RCBA32_OR(0x0050, (1 << 31));

    /* BIOS Interface Lockdown */
    RCBA32_OR(0x3410, (1 << 0));

    /* Function Disable SUS Well Lockdown */
    RCBA_AND_OR(8, 0x3420, ~0U, (1 << 7));

    /* Global SMI Lock */
    pcie_or_config16(PCH_LPC_DEV, 0xa0, 1 << 4);

    /* GEN_PMCON Lock */
    pcie_or_config8(PCH_LPC_DEV, 0xa6, (1 << 1) | (1 << 2));

    /* R/WO registers */
    RCBA32(0x21a4) = RCBA32(0x21a4);
    pcie_write_config32(PCI_DEV(0, 27, 0), 0x74,
                        pcie_read_config32(PCI_DEV(0, 27, 0), 0x74));

    /* Indicate finalize step with post code */
    outb(POST_OS_BOOT, 0x80);
}
コード例 #10
0
ファイル: pch.c プロジェクト: killbug2004/coreboot
/* Set bit in Function Disble register to hide this device */
void pch_disable_devfn(device_t dev)
{
    switch (dev->path.pci.devfn) {
    case PCI_DEVFN(19, 0): /* Audio DSP */
        RCBA32_OR(FD, PCH_DISABLE_ADSPD);
        break;
    case PCI_DEVFN(20, 0): /* XHCI */
        RCBA32_OR(FD, PCH_DISABLE_XHCI);
        break;
    case PCI_DEVFN(21, 0): /* DMA */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS0, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 1): /* I2C0 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS1, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 2): /* I2C1 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS2, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 3): /* SPI0 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS3, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 4): /* SPI1 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS4, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 5): /* UART0 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS5, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(21, 6): /* UART1 */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS6, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(22, 0): /* MEI #1 */
        RCBA32_OR(FD2, PCH_DISABLE_MEI1);
        break;
    case PCI_DEVFN(22, 1): /* MEI #2 */
        RCBA32_OR(FD2, PCH_DISABLE_MEI2);
        break;
    case PCI_DEVFN(22, 2): /* IDE-R */
        RCBA32_OR(FD2, PCH_DISABLE_IDER);
        break;
    case PCI_DEVFN(22, 3): /* KT */
        RCBA32_OR(FD2, PCH_DISABLE_KT);
        break;
    case PCI_DEVFN(23, 0): /* SDIO */
        pch_enable_d3hot(dev);
        pch_iobp_update(SIO_IOBP_FUNCDIS7, ~0UL, SIO_IOBP_FUNCDIS_DIS);
        break;
    case PCI_DEVFN(25, 0): /* Gigabit Ethernet */
        RCBA32_OR(BUC, PCH_DISABLE_GBE);
        break;
    case PCI_DEVFN(26, 0): /* EHCI #2 */
        RCBA32_OR(FD, PCH_DISABLE_EHCI2);
        break;
    case PCI_DEVFN(27, 0): /* HD Audio Controller */
        RCBA32_OR(FD, PCH_DISABLE_HD_AUDIO);
        break;
    case PCI_DEVFN(28, 0): /* PCI Express Root Port 1 */
    case PCI_DEVFN(28, 1): /* PCI Express Root Port 2 */
    case PCI_DEVFN(28, 2): /* PCI Express Root Port 3 */
    case PCI_DEVFN(28, 3): /* PCI Express Root Port 4 */
    case PCI_DEVFN(28, 4): /* PCI Express Root Port 5 */
    case PCI_DEVFN(28, 5): /* PCI Express Root Port 6 */
    case PCI_DEVFN(28, 6): /* PCI Express Root Port 7 */
    case PCI_DEVFN(28, 7): /* PCI Express Root Port 8 */
        RCBA32_OR(FD, PCH_DISABLE_PCIE(PCI_FUNC(dev->path.pci.devfn)));
        break;
    case PCI_DEVFN(29, 0): /* EHCI #1 */
        RCBA32_OR(FD, PCH_DISABLE_EHCI1);
        break;
    case PCI_DEVFN(31, 0): /* LPC */
        RCBA32_OR(FD, PCH_DISABLE_LPC);
        break;
    case PCI_DEVFN(31, 2): /* SATA #1 */
        RCBA32_OR(FD, PCH_DISABLE_SATA1);
        break;
    case PCI_DEVFN(31, 3): /* SMBUS */
        RCBA32_OR(FD, PCH_DISABLE_SMBUS);
        break;
    case PCI_DEVFN(31, 5): /* SATA #2 */
        RCBA32_OR(FD, PCH_DISABLE_SATA2);
        break;
    case PCI_DEVFN(31, 6): /* Thermal Subsystem */
        RCBA32_OR(FD, PCH_DISABLE_THERMAL);
        break;
    }
}
コード例 #11
0
ファイル: pch.c プロジェクト: sinetek/coreboot-peppy
/* Set bit in Function Disble register to hide this device */
static void pch_hide_devfn(unsigned devfn)
{
	switch (devfn) {
	case PCI_DEVFN(22, 0): /* MEI #1 */
		RCBA32_OR(FD2, PCH_DISABLE_MEI1);
		break;
	case PCI_DEVFN(22, 1): /* MEI #2 */
		RCBA32_OR(FD2, PCH_DISABLE_MEI2);
		break;
	case PCI_DEVFN(22, 2): /* IDE-R */
		RCBA32_OR(FD2, PCH_DISABLE_IDER);
		break;
	case PCI_DEVFN(22, 3): /* KT */
		RCBA32_OR(FD2, PCH_DISABLE_KT);
		break;
	case PCI_DEVFN(28, 0): /* PCI Express Root Port 1 */
	case PCI_DEVFN(28, 1): /* PCI Express Root Port 2 */
	case PCI_DEVFN(28, 2): /* PCI Express Root Port 3 */
	case PCI_DEVFN(28, 3): /* PCI Express Root Port 4 */
		RCBA32_OR(FD, PCH_DISABLE_PCIE(PCI_FUNC(devfn)));
		break;
	case PCI_DEVFN(29, 0): /* EHCI #1 */
		RCBA32_OR(FD, PCH_DISABLE_EHCI1);
		break;
	case PCI_DEVFN(31, 0): /* LPC */
		RCBA32_OR(FD, PCH_DISABLE_LPC);
		break;
	case PCI_DEVFN(31, 2): /* SATA #1 */
		RCBA32_OR(FD, PCH_DISABLE_SATA1);
		break;
	case PCI_DEVFN(31, 3): /* SMBUS */
		RCBA32_OR(FD, PCH_DISABLE_SMBUS);
		break;
	case PCI_DEVFN(31, 5): /* SATA #2 */
		RCBA32_OR(FD, PCH_DISABLE_SATA2);
		break;
	case PCI_DEVFN(31, 6): /* Thermal Subsystem */
		RCBA32_OR(FD, PCH_DISABLE_THERMAL);
		break;
	case PCI_DEVFN(31, 7): /* Watch Dog*/
		/* No disable defined in datasheet */
		break;
	}
}
コード例 #12
0
ファイル: pch.c プロジェクト: RafaelRMachado/Coreboot
/* RCBA function disable and posting read to flush the transaction */
static void rcba_function_disable(u32 reg, u32 bit)
{
	RCBA32_OR(reg, bit);
	RCBA32(reg);
}