x86: broadwell: Implement PCH_REQ_PMBASE_INFO
authorSimon Glass <sjg@chromium.org>
Fri, 26 Apr 2019 03:59:03 +0000 (21:59 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 8 May 2019 05:02:15 +0000 (13:02 +0800)
Implement this ioctl() to support power off.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/broadwell/pch.c

index 73d3d3b..e61efa7 100644 (file)
@@ -630,10 +630,35 @@ static int broadwell_get_gpio_base(struct udevice *dev, u32 *gbasep)
        return 0;
 }
 
+static int broadwell_ioctl(struct udevice *dev, enum pch_req_t req, void *data,
+                          int size)
+{
+       switch (req) {
+       case PCH_REQ_PMBASE_INFO: {
+               struct pch_pmbase_info *pm = data;
+               int ret;
+
+               /* Find the base address of the powermanagement registers */
+               ret = dm_pci_read_config16(dev, 0x40, &pm->base);
+               if (ret)
+                       return ret;
+               pm->base &= 0xfffe;
+               pm->gpio0_en_ofs = GPE0_EN(0);
+               pm->pm1_sts_ofs = PM1_STS;
+               pm->pm1_cnt_ofs = PM1_CNT;
+
+               return 0;
+       }
+       default:
+               return -ENOSYS;
+       }
+}
+
 static const struct pch_ops broadwell_pch_ops = {
        .get_spi_base   = broadwell_pch_get_spi_base,
        .set_spi_protect = broadwell_set_spi_protect,
        .get_gpio_base  = broadwell_get_gpio_base,
+       .ioctl          = broadwell_ioctl,
 };
 
 static const struct udevice_id broadwell_pch_ids[] = {