static int broadwell_gpio_set_value(struct udevice *dev, unsigned offset, int value) { struct broadwell_bank_priv *priv = dev_get_priv(dev); struct pch_lp_gpio_regs *regs = priv->regs; debug("%s: dev=%s, offset=%d, value=%d\n", __func__, dev->name, offset, value); clrsetio_32(®s->config[priv->offset + offset], CONFA_OUTPUT_HIGH, value ? CONFA_OUTPUT_HIGH : 0); return 0; }
static void pch_misc_init(struct udevice *dev) { /* Setup SLP signal assertion, SLP_S4=4s, SLP_S3=50ms */ dm_pci_clrset_config8(dev, GEN_PMCON_3, 3 << 4 | 1 << 10, 1 << 3 | 1 << 11 | 1 << 12); /* Prepare sleep mode */ clrsetio_32(ACPI_BASE_ADDRESS + PM1_CNT, SLP_TYP, SCI_EN); /* Setup NMI on errors, disable SERR */ clrsetio_8(0x61, 0xf0, 1 << 2); /* Disable NMI sources */ setio_8(0x70, 1 << 7); /* Indicate DRAM init done for MRC */ dm_pci_clrset_config8(dev, GEN_PMCON_2, 0, 1 << 7); /* Clear status bits to prevent unexpected wake */ setbits_le32(RCB_REG(0x3310), 0x0000002f); clrsetbits_le32(RCB_REG(0x3f02), 0x0000000f, 0); /* Enable PCIe Relaxed Order */ setbits_le32(RCB_REG(0x2314), 1 << 31 | 1 << 7); setbits_le32(RCB_REG(0x1114), 1 << 15 | 1 << 14); /* Setup SERIRQ, enable continuous mode */ dm_pci_clrset_config8(dev, SERIRQ_CNTL, 0, 1 << 7 | 1 << 6); };