Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * ACPI support for Intel Lynxpoint LPSS.
0004  *
0005  * Copyright (C) 2013, Intel Corporation
0006  * Authors: Mika Westerberg <mika.westerberg@linux.intel.com>
0007  *          Rafael J. Wysocki <rafael.j.wysocki@intel.com>
0008  */
0009 
0010 #include <linux/acpi.h>
0011 #include <linux/clkdev.h>
0012 #include <linux/clk-provider.h>
0013 #include <linux/dmi.h>
0014 #include <linux/err.h>
0015 #include <linux/io.h>
0016 #include <linux/mutex.h>
0017 #include <linux/pci.h>
0018 #include <linux/platform_device.h>
0019 #include <linux/platform_data/x86/clk-lpss.h>
0020 #include <linux/platform_data/x86/pmc_atom.h>
0021 #include <linux/pm_domain.h>
0022 #include <linux/pm_runtime.h>
0023 #include <linux/pwm.h>
0024 #include <linux/pxa2xx_ssp.h>
0025 #include <linux/suspend.h>
0026 #include <linux/delay.h>
0027 
0028 #include "internal.h"
0029 
0030 #ifdef CONFIG_X86_INTEL_LPSS
0031 
0032 #include <asm/cpu_device_id.h>
0033 #include <asm/intel-family.h>
0034 #include <asm/iosf_mbi.h>
0035 
0036 #define LPSS_ADDR(desc) ((unsigned long)&desc)
0037 
0038 #define LPSS_CLK_SIZE   0x04
0039 #define LPSS_LTR_SIZE   0x18
0040 
0041 /* Offsets relative to LPSS_PRIVATE_OFFSET */
0042 #define LPSS_CLK_DIVIDER_DEF_MASK   (BIT(1) | BIT(16))
0043 #define LPSS_RESETS         0x04
0044 #define LPSS_RESETS_RESET_FUNC      BIT(0)
0045 #define LPSS_RESETS_RESET_APB       BIT(1)
0046 #define LPSS_GENERAL            0x08
0047 #define LPSS_GENERAL_LTR_MODE_SW    BIT(2)
0048 #define LPSS_GENERAL_UART_RTS_OVRD  BIT(3)
0049 #define LPSS_SW_LTR         0x10
0050 #define LPSS_AUTO_LTR           0x14
0051 #define LPSS_LTR_SNOOP_REQ      BIT(15)
0052 #define LPSS_LTR_SNOOP_MASK     0x0000FFFF
0053 #define LPSS_LTR_SNOOP_LAT_1US      0x800
0054 #define LPSS_LTR_SNOOP_LAT_32US     0xC00
0055 #define LPSS_LTR_SNOOP_LAT_SHIFT    5
0056 #define LPSS_LTR_SNOOP_LAT_CUTOFF   3000
0057 #define LPSS_LTR_MAX_VAL        0x3FF
0058 #define LPSS_TX_INT         0x20
0059 #define LPSS_TX_INT_MASK        BIT(1)
0060 
0061 #define LPSS_PRV_REG_COUNT      9
0062 
0063 /* LPSS Flags */
0064 #define LPSS_CLK            BIT(0)
0065 #define LPSS_CLK_GATE           BIT(1)
0066 #define LPSS_CLK_DIVIDER        BIT(2)
0067 #define LPSS_LTR            BIT(3)
0068 #define LPSS_SAVE_CTX           BIT(4)
0069 /*
0070  * For some devices the DSDT AML code for another device turns off the device
0071  * before our suspend handler runs, causing us to read/save all 1-s (0xffffffff)
0072  * as ctx register values.
0073  * Luckily these devices always use the same ctx register values, so we can
0074  * work around this by saving the ctx registers once on activation.
0075  */
0076 #define LPSS_SAVE_CTX_ONCE      BIT(5)
0077 #define LPSS_NO_D3_DELAY        BIT(6)
0078 
0079 struct lpss_private_data;
0080 
0081 struct lpss_device_desc {
0082     unsigned int flags;
0083     const char *clk_con_id;
0084     unsigned int prv_offset;
0085     size_t prv_size_override;
0086     const struct property_entry *properties;
0087     void (*setup)(struct lpss_private_data *pdata);
0088     bool resume_from_noirq;
0089 };
0090 
0091 static const struct lpss_device_desc lpss_dma_desc = {
0092     .flags = LPSS_CLK,
0093 };
0094 
0095 struct lpss_private_data {
0096     struct acpi_device *adev;
0097     void __iomem *mmio_base;
0098     resource_size_t mmio_size;
0099     unsigned int fixed_clk_rate;
0100     struct clk *clk;
0101     const struct lpss_device_desc *dev_desc;
0102     u32 prv_reg_ctx[LPSS_PRV_REG_COUNT];
0103 };
0104 
0105 /* Devices which need to be in D3 before lpss_iosf_enter_d3_state() proceeds */
0106 static u32 pmc_atom_d3_mask = 0xfe000ffe;
0107 
0108 /* LPSS run time quirks */
0109 static unsigned int lpss_quirks;
0110 
0111 /*
0112  * LPSS_QUIRK_ALWAYS_POWER_ON: override power state for LPSS DMA device.
0113  *
0114  * The LPSS DMA controller has neither _PS0 nor _PS3 method. Moreover
0115  * it can be powered off automatically whenever the last LPSS device goes down.
0116  * In case of no power any access to the DMA controller will hang the system.
0117  * The behaviour is reproduced on some HP laptops based on Intel BayTrail as
0118  * well as on ASuS T100TA transformer.
0119  *
0120  * This quirk overrides power state of entire LPSS island to keep DMA powered
0121  * on whenever we have at least one other device in use.
0122  */
0123 #define LPSS_QUIRK_ALWAYS_POWER_ON  BIT(0)
0124 
0125 /* UART Component Parameter Register */
0126 #define LPSS_UART_CPR           0xF4
0127 #define LPSS_UART_CPR_AFCE      BIT(4)
0128 
0129 static void lpss_uart_setup(struct lpss_private_data *pdata)
0130 {
0131     unsigned int offset;
0132     u32 val;
0133 
0134     offset = pdata->dev_desc->prv_offset + LPSS_TX_INT;
0135     val = readl(pdata->mmio_base + offset);
0136     writel(val | LPSS_TX_INT_MASK, pdata->mmio_base + offset);
0137 
0138     val = readl(pdata->mmio_base + LPSS_UART_CPR);
0139     if (!(val & LPSS_UART_CPR_AFCE)) {
0140         offset = pdata->dev_desc->prv_offset + LPSS_GENERAL;
0141         val = readl(pdata->mmio_base + offset);
0142         val |= LPSS_GENERAL_UART_RTS_OVRD;
0143         writel(val, pdata->mmio_base + offset);
0144     }
0145 }
0146 
0147 static void lpss_deassert_reset(struct lpss_private_data *pdata)
0148 {
0149     unsigned int offset;
0150     u32 val;
0151 
0152     offset = pdata->dev_desc->prv_offset + LPSS_RESETS;
0153     val = readl(pdata->mmio_base + offset);
0154     val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC;
0155     writel(val, pdata->mmio_base + offset);
0156 }
0157 
0158 /*
0159  * BYT PWM used for backlight control by the i915 driver on systems without
0160  * the Crystal Cove PMIC.
0161  */
0162 static struct pwm_lookup byt_pwm_lookup[] = {
0163     PWM_LOOKUP_WITH_MODULE("80860F09:00", 0, "0000:00:02.0",
0164                    "pwm_soc_backlight", 0, PWM_POLARITY_NORMAL,
0165                    "pwm-lpss-platform"),
0166 };
0167 
0168 static void byt_pwm_setup(struct lpss_private_data *pdata)
0169 {
0170     struct acpi_device *adev = pdata->adev;
0171 
0172     /* Only call pwm_add_table for the first PWM controller */
0173     if (!adev->pnp.unique_id || strcmp(adev->pnp.unique_id, "1"))
0174         return;
0175 
0176     pwm_add_table(byt_pwm_lookup, ARRAY_SIZE(byt_pwm_lookup));
0177 }
0178 
0179 #define LPSS_I2C_ENABLE         0x6c
0180 
0181 static void byt_i2c_setup(struct lpss_private_data *pdata)
0182 {
0183     const char *uid_str = acpi_device_uid(pdata->adev);
0184     acpi_handle handle = pdata->adev->handle;
0185     unsigned long long shared_host = 0;
0186     acpi_status status;
0187     long uid = 0;
0188 
0189     /* Expected to always be true, but better safe then sorry */
0190     if (uid_str && !kstrtol(uid_str, 10, &uid) && uid) {
0191         /* Detect I2C bus shared with PUNIT and ignore its d3 status */
0192         status = acpi_evaluate_integer(handle, "_SEM", NULL, &shared_host);
0193         if (ACPI_SUCCESS(status) && shared_host)
0194             pmc_atom_d3_mask &= ~(BIT_LPSS2_F1_I2C1 << (uid - 1));
0195     }
0196 
0197     lpss_deassert_reset(pdata);
0198 
0199     if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset))
0200         pdata->fixed_clk_rate = 133000000;
0201 
0202     writel(0, pdata->mmio_base + LPSS_I2C_ENABLE);
0203 }
0204 
0205 /* BSW PWM used for backlight control by the i915 driver */
0206 static struct pwm_lookup bsw_pwm_lookup[] = {
0207     PWM_LOOKUP_WITH_MODULE("80862288:00", 0, "0000:00:02.0",
0208                    "pwm_soc_backlight", 0, PWM_POLARITY_NORMAL,
0209                    "pwm-lpss-platform"),
0210 };
0211 
0212 static void bsw_pwm_setup(struct lpss_private_data *pdata)
0213 {
0214     struct acpi_device *adev = pdata->adev;
0215 
0216     /* Only call pwm_add_table for the first PWM controller */
0217     if (!adev->pnp.unique_id || strcmp(adev->pnp.unique_id, "1"))
0218         return;
0219 
0220     pwm_add_table(bsw_pwm_lookup, ARRAY_SIZE(bsw_pwm_lookup));
0221 }
0222 
0223 static const struct property_entry lpt_spi_properties[] = {
0224     PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_LPT_SSP),
0225     { }
0226 };
0227 
0228 static const struct lpss_device_desc lpt_spi_dev_desc = {
0229     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR
0230             | LPSS_SAVE_CTX,
0231     .prv_offset = 0x800,
0232     .properties = lpt_spi_properties,
0233 };
0234 
0235 static const struct lpss_device_desc lpt_i2c_dev_desc = {
0236     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_LTR | LPSS_SAVE_CTX,
0237     .prv_offset = 0x800,
0238 };
0239 
0240 static struct property_entry uart_properties[] = {
0241     PROPERTY_ENTRY_U32("reg-io-width", 4),
0242     PROPERTY_ENTRY_U32("reg-shift", 2),
0243     PROPERTY_ENTRY_BOOL("snps,uart-16550-compatible"),
0244     { },
0245 };
0246 
0247 static const struct lpss_device_desc lpt_uart_dev_desc = {
0248     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR
0249             | LPSS_SAVE_CTX,
0250     .clk_con_id = "baudclk",
0251     .prv_offset = 0x800,
0252     .setup = lpss_uart_setup,
0253     .properties = uart_properties,
0254 };
0255 
0256 static const struct lpss_device_desc lpt_sdio_dev_desc = {
0257     .flags = LPSS_LTR,
0258     .prv_offset = 0x1000,
0259     .prv_size_override = 0x1018,
0260 };
0261 
0262 static const struct lpss_device_desc byt_pwm_dev_desc = {
0263     .flags = LPSS_SAVE_CTX,
0264     .prv_offset = 0x800,
0265     .setup = byt_pwm_setup,
0266 };
0267 
0268 static const struct lpss_device_desc bsw_pwm_dev_desc = {
0269     .flags = LPSS_SAVE_CTX_ONCE | LPSS_NO_D3_DELAY,
0270     .prv_offset = 0x800,
0271     .setup = bsw_pwm_setup,
0272     .resume_from_noirq = true,
0273 };
0274 
0275 static const struct lpss_device_desc byt_uart_dev_desc = {
0276     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
0277     .clk_con_id = "baudclk",
0278     .prv_offset = 0x800,
0279     .setup = lpss_uart_setup,
0280     .properties = uart_properties,
0281 };
0282 
0283 static const struct lpss_device_desc bsw_uart_dev_desc = {
0284     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX
0285             | LPSS_NO_D3_DELAY,
0286     .clk_con_id = "baudclk",
0287     .prv_offset = 0x800,
0288     .setup = lpss_uart_setup,
0289     .properties = uart_properties,
0290 };
0291 
0292 static const struct property_entry byt_spi_properties[] = {
0293     PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_BYT_SSP),
0294     { }
0295 };
0296 
0297 static const struct lpss_device_desc byt_spi_dev_desc = {
0298     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
0299     .prv_offset = 0x400,
0300     .properties = byt_spi_properties,
0301 };
0302 
0303 static const struct lpss_device_desc byt_sdio_dev_desc = {
0304     .flags = LPSS_CLK,
0305 };
0306 
0307 static const struct lpss_device_desc byt_i2c_dev_desc = {
0308     .flags = LPSS_CLK | LPSS_SAVE_CTX,
0309     .prv_offset = 0x800,
0310     .setup = byt_i2c_setup,
0311     .resume_from_noirq = true,
0312 };
0313 
0314 static const struct lpss_device_desc bsw_i2c_dev_desc = {
0315     .flags = LPSS_CLK | LPSS_SAVE_CTX | LPSS_NO_D3_DELAY,
0316     .prv_offset = 0x800,
0317     .setup = byt_i2c_setup,
0318     .resume_from_noirq = true,
0319 };
0320 
0321 static const struct property_entry bsw_spi_properties[] = {
0322     PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_BSW_SSP),
0323     { }
0324 };
0325 
0326 static const struct lpss_device_desc bsw_spi_dev_desc = {
0327     .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX
0328             | LPSS_NO_D3_DELAY,
0329     .prv_offset = 0x400,
0330     .setup = lpss_deassert_reset,
0331     .properties = bsw_spi_properties,
0332 };
0333 
0334 static const struct x86_cpu_id lpss_cpu_ids[] = {
0335     X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT, NULL),
0336     X86_MATCH_INTEL_FAM6_MODEL(ATOM_AIRMONT,    NULL),
0337     {}
0338 };
0339 
0340 #else
0341 
0342 #define LPSS_ADDR(desc) (0UL)
0343 
0344 #endif /* CONFIG_X86_INTEL_LPSS */
0345 
0346 static const struct acpi_device_id acpi_lpss_device_ids[] = {
0347     /* Generic LPSS devices */
0348     { "INTL9C60", LPSS_ADDR(lpss_dma_desc) },
0349 
0350     /* Lynxpoint LPSS devices */
0351     { "INT33C0", LPSS_ADDR(lpt_spi_dev_desc) },
0352     { "INT33C1", LPSS_ADDR(lpt_spi_dev_desc) },
0353     { "INT33C2", LPSS_ADDR(lpt_i2c_dev_desc) },
0354     { "INT33C3", LPSS_ADDR(lpt_i2c_dev_desc) },
0355     { "INT33C4", LPSS_ADDR(lpt_uart_dev_desc) },
0356     { "INT33C5", LPSS_ADDR(lpt_uart_dev_desc) },
0357     { "INT33C6", LPSS_ADDR(lpt_sdio_dev_desc) },
0358     { "INT33C7", },
0359 
0360     /* BayTrail LPSS devices */
0361     { "80860F09", LPSS_ADDR(byt_pwm_dev_desc) },
0362     { "80860F0A", LPSS_ADDR(byt_uart_dev_desc) },
0363     { "80860F0E", LPSS_ADDR(byt_spi_dev_desc) },
0364     { "80860F14", LPSS_ADDR(byt_sdio_dev_desc) },
0365     { "80860F41", LPSS_ADDR(byt_i2c_dev_desc) },
0366     { "INT33B2", },
0367     { "INT33FC", },
0368 
0369     /* Braswell LPSS devices */
0370     { "80862286", LPSS_ADDR(lpss_dma_desc) },
0371     { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) },
0372     { "8086228A", LPSS_ADDR(bsw_uart_dev_desc) },
0373     { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) },
0374     { "808622C0", LPSS_ADDR(lpss_dma_desc) },
0375     { "808622C1", LPSS_ADDR(bsw_i2c_dev_desc) },
0376 
0377     /* Broadwell LPSS devices */
0378     { "INT3430", LPSS_ADDR(lpt_spi_dev_desc) },
0379     { "INT3431", LPSS_ADDR(lpt_spi_dev_desc) },
0380     { "INT3432", LPSS_ADDR(lpt_i2c_dev_desc) },
0381     { "INT3433", LPSS_ADDR(lpt_i2c_dev_desc) },
0382     { "INT3434", LPSS_ADDR(lpt_uart_dev_desc) },
0383     { "INT3435", LPSS_ADDR(lpt_uart_dev_desc) },
0384     { "INT3436", LPSS_ADDR(lpt_sdio_dev_desc) },
0385     { "INT3437", },
0386 
0387     /* Wildcat Point LPSS devices */
0388     { "INT3438", LPSS_ADDR(lpt_spi_dev_desc) },
0389 
0390     { }
0391 };
0392 
0393 #ifdef CONFIG_X86_INTEL_LPSS
0394 
0395 static int is_memory(struct acpi_resource *res, void *not_used)
0396 {
0397     struct resource r;
0398 
0399     return !acpi_dev_resource_memory(res, &r);
0400 }
0401 
0402 /* LPSS main clock device. */
0403 static struct platform_device *lpss_clk_dev;
0404 
0405 static inline void lpt_register_clock_device(void)
0406 {
0407     lpss_clk_dev = platform_device_register_simple("clk-lpss-atom",
0408                                PLATFORM_DEVID_NONE,
0409                                NULL, 0);
0410 }
0411 
0412 static int register_device_clock(struct acpi_device *adev,
0413                  struct lpss_private_data *pdata)
0414 {
0415     const struct lpss_device_desc *dev_desc = pdata->dev_desc;
0416     const char *devname = dev_name(&adev->dev);
0417     struct clk *clk;
0418     struct lpss_clk_data *clk_data;
0419     const char *parent, *clk_name;
0420     void __iomem *prv_base;
0421 
0422     if (!lpss_clk_dev)
0423         lpt_register_clock_device();
0424 
0425     if (IS_ERR(lpss_clk_dev))
0426         return PTR_ERR(lpss_clk_dev);
0427 
0428     clk_data = platform_get_drvdata(lpss_clk_dev);
0429     if (!clk_data)
0430         return -ENODEV;
0431     clk = clk_data->clk;
0432 
0433     if (!pdata->mmio_base
0434         || pdata->mmio_size < dev_desc->prv_offset + LPSS_CLK_SIZE)
0435         return -ENODATA;
0436 
0437     parent = clk_data->name;
0438     prv_base = pdata->mmio_base + dev_desc->prv_offset;
0439 
0440     if (pdata->fixed_clk_rate) {
0441         clk = clk_register_fixed_rate(NULL, devname, parent, 0,
0442                           pdata->fixed_clk_rate);
0443         goto out;
0444     }
0445 
0446     if (dev_desc->flags & LPSS_CLK_GATE) {
0447         clk = clk_register_gate(NULL, devname, parent, 0,
0448                     prv_base, 0, 0, NULL);
0449         parent = devname;
0450     }
0451 
0452     if (dev_desc->flags & LPSS_CLK_DIVIDER) {
0453         /* Prevent division by zero */
0454         if (!readl(prv_base))
0455             writel(LPSS_CLK_DIVIDER_DEF_MASK, prv_base);
0456 
0457         clk_name = kasprintf(GFP_KERNEL, "%s-div", devname);
0458         if (!clk_name)
0459             return -ENOMEM;
0460         clk = clk_register_fractional_divider(NULL, clk_name, parent,
0461                               CLK_FRAC_DIVIDER_POWER_OF_TWO_PS,
0462                               prv_base, 1, 15, 16, 15, 0, NULL);
0463         parent = clk_name;
0464 
0465         clk_name = kasprintf(GFP_KERNEL, "%s-update", devname);
0466         if (!clk_name) {
0467             kfree(parent);
0468             return -ENOMEM;
0469         }
0470         clk = clk_register_gate(NULL, clk_name, parent,
0471                     CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE,
0472                     prv_base, 31, 0, NULL);
0473         kfree(parent);
0474         kfree(clk_name);
0475     }
0476 out:
0477     if (IS_ERR(clk))
0478         return PTR_ERR(clk);
0479 
0480     pdata->clk = clk;
0481     clk_register_clkdev(clk, dev_desc->clk_con_id, devname);
0482     return 0;
0483 }
0484 
0485 struct lpss_device_links {
0486     const char *supplier_hid;
0487     const char *supplier_uid;
0488     const char *consumer_hid;
0489     const char *consumer_uid;
0490     u32 flags;
0491     const struct dmi_system_id *dep_missing_ids;
0492 };
0493 
0494 /* Please keep this list sorted alphabetically by vendor and model */
0495 static const struct dmi_system_id i2c1_dep_missing_dmi_ids[] = {
0496     {
0497         .matches = {
0498             DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
0499             DMI_MATCH(DMI_PRODUCT_NAME, "T200TA"),
0500         },
0501     },
0502     {}
0503 };
0504 
0505 /*
0506  * The _DEP method is used to identify dependencies but instead of creating
0507  * device links for every handle in _DEP, only links in the following list are
0508  * created. That is necessary because, in the general case, _DEP can refer to
0509  * devices that might not have drivers, or that are on different buses, or where
0510  * the supplier is not enumerated until after the consumer is probed.
0511  */
0512 static const struct lpss_device_links lpss_device_links[] = {
0513     /* CHT External sdcard slot controller depends on PMIC I2C ctrl */
0514     {"808622C1", "7", "80860F14", "3", DL_FLAG_PM_RUNTIME},
0515     /* CHT iGPU depends on PMIC I2C controller */
0516     {"808622C1", "7", "LNXVIDEO", NULL, DL_FLAG_PM_RUNTIME},
0517     /* BYT iGPU depends on the Embedded Controller I2C controller (UID 1) */
0518     {"80860F41", "1", "LNXVIDEO", NULL, DL_FLAG_PM_RUNTIME,
0519      i2c1_dep_missing_dmi_ids},
0520     /* BYT CR iGPU depends on PMIC I2C controller (UID 5 on CR) */
0521     {"80860F41", "5", "LNXVIDEO", NULL, DL_FLAG_PM_RUNTIME},
0522     /* BYT iGPU depends on PMIC I2C controller (UID 7 on non CR) */
0523     {"80860F41", "7", "LNXVIDEO", NULL, DL_FLAG_PM_RUNTIME},
0524 };
0525 
0526 static bool acpi_lpss_is_supplier(struct acpi_device *adev,
0527                   const struct lpss_device_links *link)
0528 {
0529     return acpi_dev_hid_uid_match(adev, link->supplier_hid, link->supplier_uid);
0530 }
0531 
0532 static bool acpi_lpss_is_consumer(struct acpi_device *adev,
0533                   const struct lpss_device_links *link)
0534 {
0535     return acpi_dev_hid_uid_match(adev, link->consumer_hid, link->consumer_uid);
0536 }
0537 
0538 struct hid_uid {
0539     const char *hid;
0540     const char *uid;
0541 };
0542 
0543 static int match_hid_uid(struct device *dev, const void *data)
0544 {
0545     struct acpi_device *adev = ACPI_COMPANION(dev);
0546     const struct hid_uid *id = data;
0547 
0548     if (!adev)
0549         return 0;
0550 
0551     return acpi_dev_hid_uid_match(adev, id->hid, id->uid);
0552 }
0553 
0554 static struct device *acpi_lpss_find_device(const char *hid, const char *uid)
0555 {
0556     struct device *dev;
0557 
0558     struct hid_uid data = {
0559         .hid = hid,
0560         .uid = uid,
0561     };
0562 
0563     dev = bus_find_device(&platform_bus_type, NULL, &data, match_hid_uid);
0564     if (dev)
0565         return dev;
0566 
0567     return bus_find_device(&pci_bus_type, NULL, &data, match_hid_uid);
0568 }
0569 
0570 static bool acpi_lpss_dep(struct acpi_device *adev, acpi_handle handle)
0571 {
0572     struct acpi_handle_list dep_devices;
0573     acpi_status status;
0574     int i;
0575 
0576     if (!acpi_has_method(adev->handle, "_DEP"))
0577         return false;
0578 
0579     status = acpi_evaluate_reference(adev->handle, "_DEP", NULL,
0580                      &dep_devices);
0581     if (ACPI_FAILURE(status)) {
0582         dev_dbg(&adev->dev, "Failed to evaluate _DEP.\n");
0583         return false;
0584     }
0585 
0586     for (i = 0; i < dep_devices.count; i++) {
0587         if (dep_devices.handles[i] == handle)
0588             return true;
0589     }
0590 
0591     return false;
0592 }
0593 
0594 static void acpi_lpss_link_consumer(struct device *dev1,
0595                     const struct lpss_device_links *link)
0596 {
0597     struct device *dev2;
0598 
0599     dev2 = acpi_lpss_find_device(link->consumer_hid, link->consumer_uid);
0600     if (!dev2)
0601         return;
0602 
0603     if ((link->dep_missing_ids && dmi_check_system(link->dep_missing_ids))
0604         || acpi_lpss_dep(ACPI_COMPANION(dev2), ACPI_HANDLE(dev1)))
0605         device_link_add(dev2, dev1, link->flags);
0606 
0607     put_device(dev2);
0608 }
0609 
0610 static void acpi_lpss_link_supplier(struct device *dev1,
0611                     const struct lpss_device_links *link)
0612 {
0613     struct device *dev2;
0614 
0615     dev2 = acpi_lpss_find_device(link->supplier_hid, link->supplier_uid);
0616     if (!dev2)
0617         return;
0618 
0619     if ((link->dep_missing_ids && dmi_check_system(link->dep_missing_ids))
0620         || acpi_lpss_dep(ACPI_COMPANION(dev1), ACPI_HANDLE(dev2)))
0621         device_link_add(dev1, dev2, link->flags);
0622 
0623     put_device(dev2);
0624 }
0625 
0626 static void acpi_lpss_create_device_links(struct acpi_device *adev,
0627                       struct platform_device *pdev)
0628 {
0629     int i;
0630 
0631     for (i = 0; i < ARRAY_SIZE(lpss_device_links); i++) {
0632         const struct lpss_device_links *link = &lpss_device_links[i];
0633 
0634         if (acpi_lpss_is_supplier(adev, link))
0635             acpi_lpss_link_consumer(&pdev->dev, link);
0636 
0637         if (acpi_lpss_is_consumer(adev, link))
0638             acpi_lpss_link_supplier(&pdev->dev, link);
0639     }
0640 }
0641 
0642 static int acpi_lpss_create_device(struct acpi_device *adev,
0643                    const struct acpi_device_id *id)
0644 {
0645     const struct lpss_device_desc *dev_desc;
0646     struct lpss_private_data *pdata;
0647     struct resource_entry *rentry;
0648     struct list_head resource_list;
0649     struct platform_device *pdev;
0650     int ret;
0651 
0652     dev_desc = (const struct lpss_device_desc *)id->driver_data;
0653     if (!dev_desc) {
0654         pdev = acpi_create_platform_device(adev, NULL);
0655         return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
0656     }
0657     pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
0658     if (!pdata)
0659         return -ENOMEM;
0660 
0661     INIT_LIST_HEAD(&resource_list);
0662     ret = acpi_dev_get_resources(adev, &resource_list, is_memory, NULL);
0663     if (ret < 0)
0664         goto err_out;
0665 
0666     list_for_each_entry(rentry, &resource_list, node)
0667         if (resource_type(rentry->res) == IORESOURCE_MEM) {
0668             if (dev_desc->prv_size_override)
0669                 pdata->mmio_size = dev_desc->prv_size_override;
0670             else
0671                 pdata->mmio_size = resource_size(rentry->res);
0672             pdata->mmio_base = ioremap(rentry->res->start,
0673                            pdata->mmio_size);
0674             break;
0675         }
0676 
0677     acpi_dev_free_resource_list(&resource_list);
0678 
0679     if (!pdata->mmio_base) {
0680         /* Avoid acpi_bus_attach() instantiating a pdev for this dev. */
0681         adev->pnp.type.platform_id = 0;
0682         /* Skip the device, but continue the namespace scan. */
0683         ret = 0;
0684         goto err_out;
0685     }
0686 
0687     pdata->adev = adev;
0688     pdata->dev_desc = dev_desc;
0689 
0690     if (dev_desc->setup)
0691         dev_desc->setup(pdata);
0692 
0693     if (dev_desc->flags & LPSS_CLK) {
0694         ret = register_device_clock(adev, pdata);
0695         if (ret) {
0696             /* Skip the device, but continue the namespace scan. */
0697             ret = 0;
0698             goto err_out;
0699         }
0700     }
0701 
0702     /*
0703      * This works around a known issue in ACPI tables where LPSS devices
0704      * have _PS0 and _PS3 without _PSC (and no power resources), so
0705      * acpi_bus_init_power() will assume that the BIOS has put them into D0.
0706      */
0707     acpi_device_fix_up_power(adev);
0708 
0709     adev->driver_data = pdata;
0710     pdev = acpi_create_platform_device(adev, dev_desc->properties);
0711     if (!IS_ERR_OR_NULL(pdev)) {
0712         acpi_lpss_create_device_links(adev, pdev);
0713         return 1;
0714     }
0715 
0716     ret = PTR_ERR(pdev);
0717     adev->driver_data = NULL;
0718 
0719  err_out:
0720     kfree(pdata);
0721     return ret;
0722 }
0723 
0724 static u32 __lpss_reg_read(struct lpss_private_data *pdata, unsigned int reg)
0725 {
0726     return readl(pdata->mmio_base + pdata->dev_desc->prv_offset + reg);
0727 }
0728 
0729 static void __lpss_reg_write(u32 val, struct lpss_private_data *pdata,
0730                  unsigned int reg)
0731 {
0732     writel(val, pdata->mmio_base + pdata->dev_desc->prv_offset + reg);
0733 }
0734 
0735 static int lpss_reg_read(struct device *dev, unsigned int reg, u32 *val)
0736 {
0737     struct acpi_device *adev = ACPI_COMPANION(dev);
0738     struct lpss_private_data *pdata;
0739     unsigned long flags;
0740     int ret;
0741 
0742     if (WARN_ON(!adev))
0743         return -ENODEV;
0744 
0745     spin_lock_irqsave(&dev->power.lock, flags);
0746     if (pm_runtime_suspended(dev)) {
0747         ret = -EAGAIN;
0748         goto out;
0749     }
0750     pdata = acpi_driver_data(adev);
0751     if (WARN_ON(!pdata || !pdata->mmio_base)) {
0752         ret = -ENODEV;
0753         goto out;
0754     }
0755     *val = __lpss_reg_read(pdata, reg);
0756     ret = 0;
0757 
0758  out:
0759     spin_unlock_irqrestore(&dev->power.lock, flags);
0760     return ret;
0761 }
0762 
0763 static ssize_t lpss_ltr_show(struct device *dev, struct device_attribute *attr,
0764                  char *buf)
0765 {
0766     u32 ltr_value = 0;
0767     unsigned int reg;
0768     int ret;
0769 
0770     reg = strcmp(attr->attr.name, "auto_ltr") ? LPSS_SW_LTR : LPSS_AUTO_LTR;
0771     ret = lpss_reg_read(dev, reg, &ltr_value);
0772     if (ret)
0773         return ret;
0774 
0775     return sysfs_emit(buf, "%08x\n", ltr_value);
0776 }
0777 
0778 static ssize_t lpss_ltr_mode_show(struct device *dev,
0779                   struct device_attribute *attr, char *buf)
0780 {
0781     u32 ltr_mode = 0;
0782     char *outstr;
0783     int ret;
0784 
0785     ret = lpss_reg_read(dev, LPSS_GENERAL, &ltr_mode);
0786     if (ret)
0787         return ret;
0788 
0789     outstr = (ltr_mode & LPSS_GENERAL_LTR_MODE_SW) ? "sw" : "auto";
0790     return sprintf(buf, "%s\n", outstr);
0791 }
0792 
0793 static DEVICE_ATTR(auto_ltr, S_IRUSR, lpss_ltr_show, NULL);
0794 static DEVICE_ATTR(sw_ltr, S_IRUSR, lpss_ltr_show, NULL);
0795 static DEVICE_ATTR(ltr_mode, S_IRUSR, lpss_ltr_mode_show, NULL);
0796 
0797 static struct attribute *lpss_attrs[] = {
0798     &dev_attr_auto_ltr.attr,
0799     &dev_attr_sw_ltr.attr,
0800     &dev_attr_ltr_mode.attr,
0801     NULL,
0802 };
0803 
0804 static const struct attribute_group lpss_attr_group = {
0805     .attrs = lpss_attrs,
0806     .name = "lpss_ltr",
0807 };
0808 
0809 static void acpi_lpss_set_ltr(struct device *dev, s32 val)
0810 {
0811     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
0812     u32 ltr_mode, ltr_val;
0813 
0814     ltr_mode = __lpss_reg_read(pdata, LPSS_GENERAL);
0815     if (val < 0) {
0816         if (ltr_mode & LPSS_GENERAL_LTR_MODE_SW) {
0817             ltr_mode &= ~LPSS_GENERAL_LTR_MODE_SW;
0818             __lpss_reg_write(ltr_mode, pdata, LPSS_GENERAL);
0819         }
0820         return;
0821     }
0822     ltr_val = __lpss_reg_read(pdata, LPSS_SW_LTR) & ~LPSS_LTR_SNOOP_MASK;
0823     if (val >= LPSS_LTR_SNOOP_LAT_CUTOFF) {
0824         ltr_val |= LPSS_LTR_SNOOP_LAT_32US;
0825         val = LPSS_LTR_MAX_VAL;
0826     } else if (val > LPSS_LTR_MAX_VAL) {
0827         ltr_val |= LPSS_LTR_SNOOP_LAT_32US | LPSS_LTR_SNOOP_REQ;
0828         val >>= LPSS_LTR_SNOOP_LAT_SHIFT;
0829     } else {
0830         ltr_val |= LPSS_LTR_SNOOP_LAT_1US | LPSS_LTR_SNOOP_REQ;
0831     }
0832     ltr_val |= val;
0833     __lpss_reg_write(ltr_val, pdata, LPSS_SW_LTR);
0834     if (!(ltr_mode & LPSS_GENERAL_LTR_MODE_SW)) {
0835         ltr_mode |= LPSS_GENERAL_LTR_MODE_SW;
0836         __lpss_reg_write(ltr_mode, pdata, LPSS_GENERAL);
0837     }
0838 }
0839 
0840 #ifdef CONFIG_PM
0841 /**
0842  * acpi_lpss_save_ctx() - Save the private registers of LPSS device
0843  * @dev: LPSS device
0844  * @pdata: pointer to the private data of the LPSS device
0845  *
0846  * Most LPSS devices have private registers which may loose their context when
0847  * the device is powered down. acpi_lpss_save_ctx() saves those registers into
0848  * prv_reg_ctx array.
0849  */
0850 static void acpi_lpss_save_ctx(struct device *dev,
0851                    struct lpss_private_data *pdata)
0852 {
0853     unsigned int i;
0854 
0855     for (i = 0; i < LPSS_PRV_REG_COUNT; i++) {
0856         unsigned long offset = i * sizeof(u32);
0857 
0858         pdata->prv_reg_ctx[i] = __lpss_reg_read(pdata, offset);
0859         dev_dbg(dev, "saving 0x%08x from LPSS reg at offset 0x%02lx\n",
0860             pdata->prv_reg_ctx[i], offset);
0861     }
0862 }
0863 
0864 /**
0865  * acpi_lpss_restore_ctx() - Restore the private registers of LPSS device
0866  * @dev: LPSS device
0867  * @pdata: pointer to the private data of the LPSS device
0868  *
0869  * Restores the registers that were previously stored with acpi_lpss_save_ctx().
0870  */
0871 static void acpi_lpss_restore_ctx(struct device *dev,
0872                   struct lpss_private_data *pdata)
0873 {
0874     unsigned int i;
0875 
0876     for (i = 0; i < LPSS_PRV_REG_COUNT; i++) {
0877         unsigned long offset = i * sizeof(u32);
0878 
0879         __lpss_reg_write(pdata->prv_reg_ctx[i], pdata, offset);
0880         dev_dbg(dev, "restoring 0x%08x to LPSS reg at offset 0x%02lx\n",
0881             pdata->prv_reg_ctx[i], offset);
0882     }
0883 }
0884 
0885 static void acpi_lpss_d3_to_d0_delay(struct lpss_private_data *pdata)
0886 {
0887     /*
0888      * The following delay is needed or the subsequent write operations may
0889      * fail. The LPSS devices are actually PCI devices and the PCI spec
0890      * expects 10ms delay before the device can be accessed after D3 to D0
0891      * transition. However some platforms like BSW does not need this delay.
0892      */
0893     unsigned int delay = 10;    /* default 10ms delay */
0894 
0895     if (pdata->dev_desc->flags & LPSS_NO_D3_DELAY)
0896         delay = 0;
0897 
0898     msleep(delay);
0899 }
0900 
0901 static int acpi_lpss_activate(struct device *dev)
0902 {
0903     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
0904     int ret;
0905 
0906     ret = acpi_dev_resume(dev);
0907     if (ret)
0908         return ret;
0909 
0910     acpi_lpss_d3_to_d0_delay(pdata);
0911 
0912     /*
0913      * This is called only on ->probe() stage where a device is either in
0914      * known state defined by BIOS or most likely powered off. Due to this
0915      * we have to deassert reset line to be sure that ->probe() will
0916      * recognize the device.
0917      */
0918     if (pdata->dev_desc->flags & (LPSS_SAVE_CTX | LPSS_SAVE_CTX_ONCE))
0919         lpss_deassert_reset(pdata);
0920 
0921 #ifdef CONFIG_PM
0922     if (pdata->dev_desc->flags & LPSS_SAVE_CTX_ONCE)
0923         acpi_lpss_save_ctx(dev, pdata);
0924 #endif
0925 
0926     return 0;
0927 }
0928 
0929 static void acpi_lpss_dismiss(struct device *dev)
0930 {
0931     acpi_dev_suspend(dev, false);
0932 }
0933 
0934 /* IOSF SB for LPSS island */
0935 #define LPSS_IOSF_UNIT_LPIOEP       0xA0
0936 #define LPSS_IOSF_UNIT_LPIO1        0xAB
0937 #define LPSS_IOSF_UNIT_LPIO2        0xAC
0938 
0939 #define LPSS_IOSF_PMCSR         0x84
0940 #define LPSS_PMCSR_D0           0
0941 #define LPSS_PMCSR_D3hot        3
0942 #define LPSS_PMCSR_Dx_MASK      GENMASK(1, 0)
0943 
0944 #define LPSS_IOSF_GPIODEF0      0x154
0945 #define LPSS_GPIODEF0_DMA1_D3       BIT(2)
0946 #define LPSS_GPIODEF0_DMA2_D3       BIT(3)
0947 #define LPSS_GPIODEF0_DMA_D3_MASK   GENMASK(3, 2)
0948 #define LPSS_GPIODEF0_DMA_LLP       BIT(13)
0949 
0950 static DEFINE_MUTEX(lpss_iosf_mutex);
0951 static bool lpss_iosf_d3_entered = true;
0952 
0953 static void lpss_iosf_enter_d3_state(void)
0954 {
0955     u32 value1 = 0;
0956     u32 mask1 = LPSS_GPIODEF0_DMA_D3_MASK | LPSS_GPIODEF0_DMA_LLP;
0957     u32 value2 = LPSS_PMCSR_D3hot;
0958     u32 mask2 = LPSS_PMCSR_Dx_MASK;
0959     /*
0960      * PMC provides an information about actual status of the LPSS devices.
0961      * Here we read the values related to LPSS power island, i.e. LPSS
0962      * devices, excluding both LPSS DMA controllers, along with SCC domain.
0963      */
0964     u32 func_dis, d3_sts_0, pmc_status;
0965     int ret;
0966 
0967     ret = pmc_atom_read(PMC_FUNC_DIS, &func_dis);
0968     if (ret)
0969         return;
0970 
0971     mutex_lock(&lpss_iosf_mutex);
0972 
0973     ret = pmc_atom_read(PMC_D3_STS_0, &d3_sts_0);
0974     if (ret)
0975         goto exit;
0976 
0977     /*
0978      * Get the status of entire LPSS power island per device basis.
0979      * Shutdown both LPSS DMA controllers if and only if all other devices
0980      * are already in D3hot.
0981      */
0982     pmc_status = (~(d3_sts_0 | func_dis)) & pmc_atom_d3_mask;
0983     if (pmc_status)
0984         goto exit;
0985 
0986     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIO1, MBI_CFG_WRITE,
0987             LPSS_IOSF_PMCSR, value2, mask2);
0988 
0989     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIO2, MBI_CFG_WRITE,
0990             LPSS_IOSF_PMCSR, value2, mask2);
0991 
0992     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIOEP, MBI_CR_WRITE,
0993             LPSS_IOSF_GPIODEF0, value1, mask1);
0994 
0995     lpss_iosf_d3_entered = true;
0996 
0997 exit:
0998     mutex_unlock(&lpss_iosf_mutex);
0999 }
1000 
1001 static void lpss_iosf_exit_d3_state(void)
1002 {
1003     u32 value1 = LPSS_GPIODEF0_DMA1_D3 | LPSS_GPIODEF0_DMA2_D3 |
1004              LPSS_GPIODEF0_DMA_LLP;
1005     u32 mask1 = LPSS_GPIODEF0_DMA_D3_MASK | LPSS_GPIODEF0_DMA_LLP;
1006     u32 value2 = LPSS_PMCSR_D0;
1007     u32 mask2 = LPSS_PMCSR_Dx_MASK;
1008 
1009     mutex_lock(&lpss_iosf_mutex);
1010 
1011     if (!lpss_iosf_d3_entered)
1012         goto exit;
1013 
1014     lpss_iosf_d3_entered = false;
1015 
1016     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIOEP, MBI_CR_WRITE,
1017             LPSS_IOSF_GPIODEF0, value1, mask1);
1018 
1019     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIO2, MBI_CFG_WRITE,
1020             LPSS_IOSF_PMCSR, value2, mask2);
1021 
1022     iosf_mbi_modify(LPSS_IOSF_UNIT_LPIO1, MBI_CFG_WRITE,
1023             LPSS_IOSF_PMCSR, value2, mask2);
1024 
1025 exit:
1026     mutex_unlock(&lpss_iosf_mutex);
1027 }
1028 
1029 static int acpi_lpss_suspend(struct device *dev, bool wakeup)
1030 {
1031     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1032     int ret;
1033 
1034     if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
1035         acpi_lpss_save_ctx(dev, pdata);
1036 
1037     ret = acpi_dev_suspend(dev, wakeup);
1038 
1039     /*
1040      * This call must be last in the sequence, otherwise PMC will return
1041      * wrong status for devices being about to be powered off. See
1042      * lpss_iosf_enter_d3_state() for further information.
1043      */
1044     if (acpi_target_system_state() == ACPI_STATE_S0 &&
1045         lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1046         lpss_iosf_enter_d3_state();
1047 
1048     return ret;
1049 }
1050 
1051 static int acpi_lpss_resume(struct device *dev)
1052 {
1053     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1054     int ret;
1055 
1056     /*
1057      * This call is kept first to be in symmetry with
1058      * acpi_lpss_runtime_suspend() one.
1059      */
1060     if (lpss_quirks & LPSS_QUIRK_ALWAYS_POWER_ON && iosf_mbi_available())
1061         lpss_iosf_exit_d3_state();
1062 
1063     ret = acpi_dev_resume(dev);
1064     if (ret)
1065         return ret;
1066 
1067     acpi_lpss_d3_to_d0_delay(pdata);
1068 
1069     if (pdata->dev_desc->flags & (LPSS_SAVE_CTX | LPSS_SAVE_CTX_ONCE))
1070         acpi_lpss_restore_ctx(dev, pdata);
1071 
1072     return 0;
1073 }
1074 
1075 #ifdef CONFIG_PM_SLEEP
1076 static int acpi_lpss_do_suspend_late(struct device *dev)
1077 {
1078     int ret;
1079 
1080     if (dev_pm_skip_suspend(dev))
1081         return 0;
1082 
1083     ret = pm_generic_suspend_late(dev);
1084     return ret ? ret : acpi_lpss_suspend(dev, device_may_wakeup(dev));
1085 }
1086 
1087 static int acpi_lpss_suspend_late(struct device *dev)
1088 {
1089     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1090 
1091     if (pdata->dev_desc->resume_from_noirq)
1092         return 0;
1093 
1094     return acpi_lpss_do_suspend_late(dev);
1095 }
1096 
1097 static int acpi_lpss_suspend_noirq(struct device *dev)
1098 {
1099     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1100     int ret;
1101 
1102     if (pdata->dev_desc->resume_from_noirq) {
1103         /*
1104          * The driver's ->suspend_late callback will be invoked by
1105          * acpi_lpss_do_suspend_late(), with the assumption that the
1106          * driver really wanted to run that code in ->suspend_noirq, but
1107          * it could not run after acpi_dev_suspend() and the driver
1108          * expected the latter to be called in the "late" phase.
1109          */
1110         ret = acpi_lpss_do_suspend_late(dev);
1111         if (ret)
1112             return ret;
1113     }
1114 
1115     return acpi_subsys_suspend_noirq(dev);
1116 }
1117 
1118 static int acpi_lpss_do_resume_early(struct device *dev)
1119 {
1120     int ret = acpi_lpss_resume(dev);
1121 
1122     return ret ? ret : pm_generic_resume_early(dev);
1123 }
1124 
1125 static int acpi_lpss_resume_early(struct device *dev)
1126 {
1127     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1128 
1129     if (pdata->dev_desc->resume_from_noirq)
1130         return 0;
1131 
1132     if (dev_pm_skip_resume(dev))
1133         return 0;
1134 
1135     return acpi_lpss_do_resume_early(dev);
1136 }
1137 
1138 static int acpi_lpss_resume_noirq(struct device *dev)
1139 {
1140     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1141     int ret;
1142 
1143     /* Follow acpi_subsys_resume_noirq(). */
1144     if (dev_pm_skip_resume(dev))
1145         return 0;
1146 
1147     ret = pm_generic_resume_noirq(dev);
1148     if (ret)
1149         return ret;
1150 
1151     if (!pdata->dev_desc->resume_from_noirq)
1152         return 0;
1153 
1154     /*
1155      * The driver's ->resume_early callback will be invoked by
1156      * acpi_lpss_do_resume_early(), with the assumption that the driver
1157      * really wanted to run that code in ->resume_noirq, but it could not
1158      * run before acpi_dev_resume() and the driver expected the latter to be
1159      * called in the "early" phase.
1160      */
1161     return acpi_lpss_do_resume_early(dev);
1162 }
1163 
1164 static int acpi_lpss_do_restore_early(struct device *dev)
1165 {
1166     int ret = acpi_lpss_resume(dev);
1167 
1168     return ret ? ret : pm_generic_restore_early(dev);
1169 }
1170 
1171 static int acpi_lpss_restore_early(struct device *dev)
1172 {
1173     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1174 
1175     if (pdata->dev_desc->resume_from_noirq)
1176         return 0;
1177 
1178     return acpi_lpss_do_restore_early(dev);
1179 }
1180 
1181 static int acpi_lpss_restore_noirq(struct device *dev)
1182 {
1183     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1184     int ret;
1185 
1186     ret = pm_generic_restore_noirq(dev);
1187     if (ret)
1188         return ret;
1189 
1190     if (!pdata->dev_desc->resume_from_noirq)
1191         return 0;
1192 
1193     /* This is analogous to what happens in acpi_lpss_resume_noirq(). */
1194     return acpi_lpss_do_restore_early(dev);
1195 }
1196 
1197 static int acpi_lpss_do_poweroff_late(struct device *dev)
1198 {
1199     int ret = pm_generic_poweroff_late(dev);
1200 
1201     return ret ? ret : acpi_lpss_suspend(dev, device_may_wakeup(dev));
1202 }
1203 
1204 static int acpi_lpss_poweroff_late(struct device *dev)
1205 {
1206     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1207 
1208     if (dev_pm_skip_suspend(dev))
1209         return 0;
1210 
1211     if (pdata->dev_desc->resume_from_noirq)
1212         return 0;
1213 
1214     return acpi_lpss_do_poweroff_late(dev);
1215 }
1216 
1217 static int acpi_lpss_poweroff_noirq(struct device *dev)
1218 {
1219     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1220 
1221     if (dev_pm_skip_suspend(dev))
1222         return 0;
1223 
1224     if (pdata->dev_desc->resume_from_noirq) {
1225         /* This is analogous to the acpi_lpss_suspend_noirq() case. */
1226         int ret = acpi_lpss_do_poweroff_late(dev);
1227 
1228         if (ret)
1229             return ret;
1230     }
1231 
1232     return pm_generic_poweroff_noirq(dev);
1233 }
1234 #endif /* CONFIG_PM_SLEEP */
1235 
1236 static int acpi_lpss_runtime_suspend(struct device *dev)
1237 {
1238     int ret = pm_generic_runtime_suspend(dev);
1239 
1240     return ret ? ret : acpi_lpss_suspend(dev, true);
1241 }
1242 
1243 static int acpi_lpss_runtime_resume(struct device *dev)
1244 {
1245     int ret = acpi_lpss_resume(dev);
1246 
1247     return ret ? ret : pm_generic_runtime_resume(dev);
1248 }
1249 #endif /* CONFIG_PM */
1250 
1251 static struct dev_pm_domain acpi_lpss_pm_domain = {
1252 #ifdef CONFIG_PM
1253     .activate = acpi_lpss_activate,
1254     .dismiss = acpi_lpss_dismiss,
1255 #endif
1256     .ops = {
1257 #ifdef CONFIG_PM
1258 #ifdef CONFIG_PM_SLEEP
1259         .prepare = acpi_subsys_prepare,
1260         .complete = acpi_subsys_complete,
1261         .suspend = acpi_subsys_suspend,
1262         .suspend_late = acpi_lpss_suspend_late,
1263         .suspend_noirq = acpi_lpss_suspend_noirq,
1264         .resume_noirq = acpi_lpss_resume_noirq,
1265         .resume_early = acpi_lpss_resume_early,
1266         .freeze = acpi_subsys_freeze,
1267         .poweroff = acpi_subsys_poweroff,
1268         .poweroff_late = acpi_lpss_poweroff_late,
1269         .poweroff_noirq = acpi_lpss_poweroff_noirq,
1270         .restore_noirq = acpi_lpss_restore_noirq,
1271         .restore_early = acpi_lpss_restore_early,
1272 #endif
1273         .runtime_suspend = acpi_lpss_runtime_suspend,
1274         .runtime_resume = acpi_lpss_runtime_resume,
1275 #endif
1276     },
1277 };
1278 
1279 static int acpi_lpss_platform_notify(struct notifier_block *nb,
1280                      unsigned long action, void *data)
1281 {
1282     struct platform_device *pdev = to_platform_device(data);
1283     struct lpss_private_data *pdata;
1284     struct acpi_device *adev;
1285     const struct acpi_device_id *id;
1286 
1287     id = acpi_match_device(acpi_lpss_device_ids, &pdev->dev);
1288     if (!id || !id->driver_data)
1289         return 0;
1290 
1291     adev = ACPI_COMPANION(&pdev->dev);
1292     if (!adev)
1293         return 0;
1294 
1295     pdata = acpi_driver_data(adev);
1296     if (!pdata)
1297         return 0;
1298 
1299     if (pdata->mmio_base &&
1300         pdata->mmio_size < pdata->dev_desc->prv_offset + LPSS_LTR_SIZE) {
1301         dev_err(&pdev->dev, "MMIO size insufficient to access LTR\n");
1302         return 0;
1303     }
1304 
1305     switch (action) {
1306     case BUS_NOTIFY_BIND_DRIVER:
1307         dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain);
1308         break;
1309     case BUS_NOTIFY_DRIVER_NOT_BOUND:
1310     case BUS_NOTIFY_UNBOUND_DRIVER:
1311         dev_pm_domain_set(&pdev->dev, NULL);
1312         break;
1313     case BUS_NOTIFY_ADD_DEVICE:
1314         dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain);
1315         if (pdata->dev_desc->flags & LPSS_LTR)
1316             return sysfs_create_group(&pdev->dev.kobj,
1317                           &lpss_attr_group);
1318         break;
1319     case BUS_NOTIFY_DEL_DEVICE:
1320         if (pdata->dev_desc->flags & LPSS_LTR)
1321             sysfs_remove_group(&pdev->dev.kobj, &lpss_attr_group);
1322         dev_pm_domain_set(&pdev->dev, NULL);
1323         break;
1324     default:
1325         break;
1326     }
1327 
1328     return 0;
1329 }
1330 
1331 static struct notifier_block acpi_lpss_nb = {
1332     .notifier_call = acpi_lpss_platform_notify,
1333 };
1334 
1335 static void acpi_lpss_bind(struct device *dev)
1336 {
1337     struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
1338 
1339     if (!pdata || !pdata->mmio_base || !(pdata->dev_desc->flags & LPSS_LTR))
1340         return;
1341 
1342     if (pdata->mmio_size >= pdata->dev_desc->prv_offset + LPSS_LTR_SIZE)
1343         dev->power.set_latency_tolerance = acpi_lpss_set_ltr;
1344     else
1345         dev_err(dev, "MMIO size insufficient to access LTR\n");
1346 }
1347 
1348 static void acpi_lpss_unbind(struct device *dev)
1349 {
1350     dev->power.set_latency_tolerance = NULL;
1351 }
1352 
1353 static struct acpi_scan_handler lpss_handler = {
1354     .ids = acpi_lpss_device_ids,
1355     .attach = acpi_lpss_create_device,
1356     .bind = acpi_lpss_bind,
1357     .unbind = acpi_lpss_unbind,
1358 };
1359 
1360 void __init acpi_lpss_init(void)
1361 {
1362     const struct x86_cpu_id *id;
1363     int ret;
1364 
1365     ret = lpss_atom_clk_init();
1366     if (ret)
1367         return;
1368 
1369     id = x86_match_cpu(lpss_cpu_ids);
1370     if (id)
1371         lpss_quirks |= LPSS_QUIRK_ALWAYS_POWER_ON;
1372 
1373     bus_register_notifier(&platform_bus_type, &acpi_lpss_nb);
1374     acpi_scan_add_handler(&lpss_handler);
1375 }
1376 
1377 #else
1378 
1379 static struct acpi_scan_handler lpss_handler = {
1380     .ids = acpi_lpss_device_ids,
1381 };
1382 
1383 void __init acpi_lpss_init(void)
1384 {
1385     acpi_scan_add_handler(&lpss_handler);
1386 }
1387 
1388 #endif /* CONFIG_X86_INTEL_LPSS */