LCOV - code coverage report
Current view: top level - drivers/rtc - rtc-cmos.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 52 361 14.4 %
Date: 2021-04-22 12:43:58 Functions: 3 19 15.8 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-or-later
       2             : /*
       3             :  * RTC class driver for "CMOS RTC":  PCs, ACPI, etc
       4             :  *
       5             :  * Copyright (C) 1996 Paul Gortmaker (drivers/char/rtc.c)
       6             :  * Copyright (C) 2006 David Brownell (convert to new framework)
       7             :  */
       8             : 
       9             : /*
      10             :  * The original "cmos clock" chip was an MC146818 chip, now obsolete.
      11             :  * That defined the register interface now provided by all PCs, some
      12             :  * non-PC systems, and incorporated into ACPI.  Modern PC chipsets
      13             :  * integrate an MC146818 clone in their southbridge, and boards use
      14             :  * that instead of discrete clones like the DS12887 or M48T86.  There
      15             :  * are also clones that connect using the LPC bus.
      16             :  *
      17             :  * That register API is also used directly by various other drivers
      18             :  * (notably for integrated NVRAM), infrastructure (x86 has code to
      19             :  * bypass the RTC framework, directly reading the RTC during boot
      20             :  * and updating minutes/seconds for systems using NTP synch) and
      21             :  * utilities (like userspace 'hwclock', if no /dev node exists).
      22             :  *
      23             :  * So **ALL** calls to CMOS_READ and CMOS_WRITE must be done with
      24             :  * interrupts disabled, holding the global rtc_lock, to exclude those
      25             :  * other drivers and utilities on correctly configured systems.
      26             :  */
      27             : 
      28             : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      29             : 
      30             : #include <linux/kernel.h>
      31             : #include <linux/module.h>
      32             : #include <linux/init.h>
      33             : #include <linux/interrupt.h>
      34             : #include <linux/spinlock.h>
      35             : #include <linux/platform_device.h>
      36             : #include <linux/log2.h>
      37             : #include <linux/pm.h>
      38             : #include <linux/of.h>
      39             : #include <linux/of_platform.h>
      40             : #ifdef CONFIG_X86
      41             : #include <asm/i8259.h>
      42             : #include <asm/processor.h>
      43             : #include <linux/dmi.h>
      44             : #endif
      45             : 
      46             : /* this is for "generic access to PC-style RTC" using CMOS_READ/CMOS_WRITE */
      47             : #include <linux/mc146818rtc.h>
      48             : 
      49             : #ifdef CONFIG_ACPI
      50             : /*
      51             :  * Use ACPI SCI to replace HPET interrupt for RTC Alarm event
      52             :  *
      53             :  * If cleared, ACPI SCI is only used to wake up the system from suspend
      54             :  *
      55             :  * If set, ACPI SCI is used to handle UIE/AIE and system wakeup
      56             :  */
      57             : 
      58             : static bool use_acpi_alarm;
      59             : module_param(use_acpi_alarm, bool, 0444);
      60             : 
      61             : static inline int cmos_use_acpi_alarm(void)
      62             : {
      63             :         return use_acpi_alarm;
      64             : }
      65             : #else /* !CONFIG_ACPI */
      66             : 
      67             : static inline int cmos_use_acpi_alarm(void)
      68             : {
      69             :         return 0;
      70             : }
      71             : #endif
      72             : 
      73             : struct cmos_rtc {
      74             :         struct rtc_device       *rtc;
      75             :         struct device           *dev;
      76             :         int                     irq;
      77             :         struct resource         *iomem;
      78             :         time64_t                alarm_expires;
      79             : 
      80             :         void                    (*wake_on)(struct device *);
      81             :         void                    (*wake_off)(struct device *);
      82             : 
      83             :         u8                      enabled_wake;
      84             :         u8                      suspend_ctrl;
      85             : 
      86             :         /* newer hardware extends the original register set */
      87             :         u8                      day_alrm;
      88             :         u8                      mon_alrm;
      89             :         u8                      century;
      90             : 
      91             :         struct rtc_wkalrm       saved_wkalrm;
      92             : };
      93             : 
      94             : /* both platform and pnp busses use negative numbers for invalid irqs */
      95             : #define is_valid_irq(n)         ((n) > 0)
      96             : 
      97             : static const char driver_name[] = "rtc_cmos";
      98             : 
      99             : /* The RTC_INTR register may have e.g. RTC_PF set even if RTC_PIE is clear;
     100             :  * always mask it against the irq enable bits in RTC_CONTROL.  Bit values
     101             :  * are the same: PF==PIE, AF=AIE, UF=UIE; so RTC_IRQMASK works with both.
     102             :  */
     103             : #define RTC_IRQMASK     (RTC_PF | RTC_AF | RTC_UF)
     104             : 
     105           0 : static inline int is_intr(u8 rtc_intr)
     106             : {
     107           0 :         if (!(rtc_intr & RTC_IRQF))
     108             :                 return 0;
     109           0 :         return rtc_intr & RTC_IRQMASK;
     110             : }
     111             : 
     112             : /*----------------------------------------------------------------*/
     113             : 
     114             : /* Much modern x86 hardware has HPETs (10+ MHz timers) which, because
     115             :  * many BIOS programmers don't set up "sane mode" IRQ routing, are mostly
     116             :  * used in a broken "legacy replacement" mode.  The breakage includes
     117             :  * HPET #1 hijacking the IRQ for this RTC, and being unavailable for
     118             :  * other (better) use.
     119             :  *
     120             :  * When that broken mode is in use, platform glue provides a partial
     121             :  * emulation of hardware RTC IRQ facilities using HPET #1.  We don't
     122             :  * want to use HPET for anything except those IRQs though...
     123             :  */
     124             : #ifdef CONFIG_HPET_EMULATE_RTC
     125             : #include <asm/hpet.h>
     126             : #else
     127             : 
     128             : static inline int is_hpet_enabled(void)
     129             : {
     130             :         return 0;
     131             : }
     132             : 
     133             : static inline int hpet_mask_rtc_irq_bit(unsigned long mask)
     134             : {
     135             :         return 0;
     136             : }
     137             : 
     138             : static inline int hpet_set_rtc_irq_bit(unsigned long mask)
     139             : {
     140             :         return 0;
     141             : }
     142             : 
     143             : static inline int
     144             : hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned char sec)
     145             : {
     146             :         return 0;
     147             : }
     148             : 
     149             : static inline int hpet_set_periodic_freq(unsigned long freq)
     150             : {
     151             :         return 0;
     152             : }
     153             : 
     154             : static inline int hpet_rtc_dropped_irq(void)
     155             : {
     156             :         return 0;
     157             : }
     158             : 
     159             : static inline int hpet_rtc_timer_init(void)
     160             : {
     161             :         return 0;
     162             : }
     163             : 
     164             : extern irq_handler_t hpet_rtc_interrupt;
     165             : 
     166             : static inline int hpet_register_irq_handler(irq_handler_t handler)
     167             : {
     168             :         return 0;
     169             : }
     170             : 
     171             : static inline int hpet_unregister_irq_handler(irq_handler_t handler)
     172             : {
     173             :         return 0;
     174             : }
     175             : 
     176             : #endif
     177             : 
     178             : /* Don't use HPET for RTC Alarm event if ACPI Fixed event is used */
     179           0 : static inline int use_hpet_alarm(void)
     180             : {
     181           0 :         return is_hpet_enabled() && !cmos_use_acpi_alarm();
     182             : }
     183             : 
     184             : /*----------------------------------------------------------------*/
     185             : 
     186             : #ifdef RTC_PORT
     187             : 
     188             : /* Most newer x86 systems have two register banks, the first used
     189             :  * for RTC and NVRAM and the second only for NVRAM.  Caller must
     190             :  * own rtc_lock ... and we won't worry about access during NMI.
     191             :  */
     192             : #define can_bank2       true
     193             : 
     194             : static inline unsigned char cmos_read_bank2(unsigned char addr)
     195             : {
     196             :         outb(addr, RTC_PORT(2));
     197             :         return inb(RTC_PORT(3));
     198             : }
     199             : 
     200             : static inline void cmos_write_bank2(unsigned char val, unsigned char addr)
     201             : {
     202             :         outb(addr, RTC_PORT(2));
     203             :         outb(val, RTC_PORT(3));
     204             : }
     205             : 
     206             : #else
     207             : 
     208             : #define can_bank2       false
     209             : 
     210             : static inline unsigned char cmos_read_bank2(unsigned char addr)
     211             : {
     212             :         return 0;
     213             : }
     214             : 
     215             : static inline void cmos_write_bank2(unsigned char val, unsigned char addr)
     216             : {
     217             : }
     218             : 
     219             : #endif
     220             : 
     221             : /*----------------------------------------------------------------*/
     222             : 
     223           0 : static int cmos_read_time(struct device *dev, struct rtc_time *t)
     224             : {
     225             :         /*
     226             :          * If pm_trace abused the RTC for storage, set the timespec to 0,
     227             :          * which tells the caller that this RTC value is unusable.
     228             :          */
     229           0 :         if (!pm_trace_rtc_valid())
     230             :                 return -EIO;
     231             : 
     232             :         /* REVISIT:  if the clock has a "century" register, use
     233             :          * that instead of the heuristic in mc146818_get_time().
     234             :          * That'll make Y3K compatility (year > 2070) easy!
     235             :          */
     236           0 :         mc146818_get_time(t);
     237           0 :         return 0;
     238             : }
     239             : 
     240           0 : static int cmos_set_time(struct device *dev, struct rtc_time *t)
     241             : {
     242             :         /* REVISIT:  set the "century" register if available
     243             :          *
     244             :          * NOTE: this ignores the issue whereby updating the seconds
     245             :          * takes effect exactly 500ms after we write the register.
     246             :          * (Also queueing and other delays before we get this far.)
     247             :          */
     248           0 :         return mc146818_set_time(t);
     249             : }
     250             : 
     251           0 : static int cmos_read_alarm(struct device *dev, struct rtc_wkalrm *t)
     252             : {
     253           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     254           0 :         unsigned char   rtc_control;
     255             : 
     256             :         /* This not only a rtc_op, but also called directly */
     257           0 :         if (!is_valid_irq(cmos->irq))
     258             :                 return -EIO;
     259             : 
     260             :         /* Basic alarms only support hour, minute, and seconds fields.
     261             :          * Some also support day and month, for alarms up to a year in
     262             :          * the future.
     263             :          */
     264             : 
     265           0 :         spin_lock_irq(&rtc_lock);
     266           0 :         t->time.tm_sec = CMOS_READ(RTC_SECONDS_ALARM);
     267           0 :         t->time.tm_min = CMOS_READ(RTC_MINUTES_ALARM);
     268           0 :         t->time.tm_hour = CMOS_READ(RTC_HOURS_ALARM);
     269             : 
     270           0 :         if (cmos->day_alrm) {
     271             :                 /* ignore upper bits on readback per ACPI spec */
     272           0 :                 t->time.tm_mday = CMOS_READ(cmos->day_alrm) & 0x3f;
     273           0 :                 if (!t->time.tm_mday)
     274           0 :                         t->time.tm_mday = -1;
     275             : 
     276           0 :                 if (cmos->mon_alrm) {
     277           0 :                         t->time.tm_mon = CMOS_READ(cmos->mon_alrm);
     278           0 :                         if (!t->time.tm_mon)
     279           0 :                                 t->time.tm_mon = -1;
     280             :                 }
     281             :         }
     282             : 
     283           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     284           0 :         spin_unlock_irq(&rtc_lock);
     285             : 
     286           0 :         if (!(rtc_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) {
     287           0 :                 if (((unsigned)t->time.tm_sec) < 0x60)
     288           0 :                         t->time.tm_sec = bcd2bin(t->time.tm_sec);
     289             :                 else
     290           0 :                         t->time.tm_sec = -1;
     291           0 :                 if (((unsigned)t->time.tm_min) < 0x60)
     292           0 :                         t->time.tm_min = bcd2bin(t->time.tm_min);
     293             :                 else
     294           0 :                         t->time.tm_min = -1;
     295           0 :                 if (((unsigned)t->time.tm_hour) < 0x24)
     296           0 :                         t->time.tm_hour = bcd2bin(t->time.tm_hour);
     297             :                 else
     298           0 :                         t->time.tm_hour = -1;
     299             : 
     300           0 :                 if (cmos->day_alrm) {
     301           0 :                         if (((unsigned)t->time.tm_mday) <= 0x31)
     302           0 :                                 t->time.tm_mday = bcd2bin(t->time.tm_mday);
     303             :                         else
     304           0 :                                 t->time.tm_mday = -1;
     305             : 
     306           0 :                         if (cmos->mon_alrm) {
     307           0 :                                 if (((unsigned)t->time.tm_mon) <= 0x12)
     308           0 :                                         t->time.tm_mon = bcd2bin(t->time.tm_mon)-1;
     309             :                                 else
     310           0 :                                         t->time.tm_mon = -1;
     311             :                         }
     312             :                 }
     313             :         }
     314             : 
     315           0 :         t->enabled = !!(rtc_control & RTC_AIE);
     316           0 :         t->pending = 0;
     317             : 
     318           0 :         return 0;
     319             : }
     320             : 
     321           0 : static void cmos_checkintr(struct cmos_rtc *cmos, unsigned char rtc_control)
     322             : {
     323           0 :         unsigned char   rtc_intr;
     324             : 
     325             :         /* NOTE after changing RTC_xIE bits we always read INTR_FLAGS;
     326             :          * allegedly some older rtcs need that to handle irqs properly
     327             :          */
     328           0 :         rtc_intr = CMOS_READ(RTC_INTR_FLAGS);
     329             : 
     330           0 :         if (use_hpet_alarm())
     331             :                 return;
     332             : 
     333           0 :         rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF;
     334           0 :         if (is_intr(rtc_intr))
     335           0 :                 rtc_update_irq(cmos->rtc, 1, rtc_intr);
     336             : }
     337             : 
     338           0 : static void cmos_irq_enable(struct cmos_rtc *cmos, unsigned char mask)
     339             : {
     340           0 :         unsigned char   rtc_control;
     341             : 
     342             :         /* flush any pending IRQ status, notably for update irqs,
     343             :          * before we enable new IRQs
     344             :          */
     345           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     346           0 :         cmos_checkintr(cmos, rtc_control);
     347             : 
     348           0 :         rtc_control |= mask;
     349           0 :         CMOS_WRITE(rtc_control, RTC_CONTROL);
     350           0 :         if (use_hpet_alarm())
     351           0 :                 hpet_set_rtc_irq_bit(mask);
     352             : 
     353           0 :         if ((mask & RTC_AIE) && cmos_use_acpi_alarm()) {
     354             :                 if (cmos->wake_on)
     355             :                         cmos->wake_on(cmos->dev);
     356             :         }
     357             : 
     358           0 :         cmos_checkintr(cmos, rtc_control);
     359           0 : }
     360             : 
     361           0 : static void cmos_irq_disable(struct cmos_rtc *cmos, unsigned char mask)
     362             : {
     363           0 :         unsigned char   rtc_control;
     364             : 
     365           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     366           0 :         rtc_control &= ~mask;
     367           0 :         CMOS_WRITE(rtc_control, RTC_CONTROL);
     368           0 :         if (use_hpet_alarm())
     369           0 :                 hpet_mask_rtc_irq_bit(mask);
     370             : 
     371           0 :         if ((mask & RTC_AIE) && cmos_use_acpi_alarm()) {
     372             :                 if (cmos->wake_off)
     373             :                         cmos->wake_off(cmos->dev);
     374             :         }
     375             : 
     376           0 :         cmos_checkintr(cmos, rtc_control);
     377           0 : }
     378             : 
     379           0 : static int cmos_validate_alarm(struct device *dev, struct rtc_wkalrm *t)
     380             : {
     381           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     382           0 :         struct rtc_time now;
     383             : 
     384           0 :         cmos_read_time(dev, &now);
     385             : 
     386           0 :         if (!cmos->day_alrm) {
     387           0 :                 time64_t t_max_date;
     388           0 :                 time64_t t_alrm;
     389             : 
     390           0 :                 t_max_date = rtc_tm_to_time64(&now);
     391           0 :                 t_max_date += 24 * 60 * 60 - 1;
     392           0 :                 t_alrm = rtc_tm_to_time64(&t->time);
     393           0 :                 if (t_alrm > t_max_date) {
     394           0 :                         dev_err(dev,
     395             :                                 "Alarms can be up to one day in the future\n");
     396           0 :                         return -EINVAL;
     397             :                 }
     398           0 :         } else if (!cmos->mon_alrm) {
     399           0 :                 struct rtc_time max_date = now;
     400           0 :                 time64_t t_max_date;
     401           0 :                 time64_t t_alrm;
     402           0 :                 int max_mday;
     403             : 
     404           0 :                 if (max_date.tm_mon == 11) {
     405           0 :                         max_date.tm_mon = 0;
     406           0 :                         max_date.tm_year += 1;
     407             :                 } else {
     408           0 :                         max_date.tm_mon += 1;
     409             :                 }
     410           0 :                 max_mday = rtc_month_days(max_date.tm_mon, max_date.tm_year);
     411           0 :                 if (max_date.tm_mday > max_mday)
     412           0 :                         max_date.tm_mday = max_mday;
     413             : 
     414           0 :                 t_max_date = rtc_tm_to_time64(&max_date);
     415           0 :                 t_max_date -= 1;
     416           0 :                 t_alrm = rtc_tm_to_time64(&t->time);
     417           0 :                 if (t_alrm > t_max_date) {
     418           0 :                         dev_err(dev,
     419             :                                 "Alarms can be up to one month in the future\n");
     420           0 :                         return -EINVAL;
     421             :                 }
     422             :         } else {
     423           0 :                 struct rtc_time max_date = now;
     424           0 :                 time64_t t_max_date;
     425           0 :                 time64_t t_alrm;
     426           0 :                 int max_mday;
     427             : 
     428           0 :                 max_date.tm_year += 1;
     429           0 :                 max_mday = rtc_month_days(max_date.tm_mon, max_date.tm_year);
     430           0 :                 if (max_date.tm_mday > max_mday)
     431           0 :                         max_date.tm_mday = max_mday;
     432             : 
     433           0 :                 t_max_date = rtc_tm_to_time64(&max_date);
     434           0 :                 t_max_date -= 1;
     435           0 :                 t_alrm = rtc_tm_to_time64(&t->time);
     436           0 :                 if (t_alrm > t_max_date) {
     437           0 :                         dev_err(dev,
     438             :                                 "Alarms can be up to one year in the future\n");
     439           0 :                         return -EINVAL;
     440             :                 }
     441             :         }
     442             : 
     443             :         return 0;
     444             : }
     445             : 
     446           0 : static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t)
     447             : {
     448           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     449           0 :         unsigned char mon, mday, hrs, min, sec, rtc_control;
     450           0 :         int ret;
     451             : 
     452             :         /* This not only a rtc_op, but also called directly */
     453           0 :         if (!is_valid_irq(cmos->irq))
     454             :                 return -EIO;
     455             : 
     456           0 :         ret = cmos_validate_alarm(dev, t);
     457           0 :         if (ret < 0)
     458             :                 return ret;
     459             : 
     460           0 :         mon = t->time.tm_mon + 1;
     461           0 :         mday = t->time.tm_mday;
     462           0 :         hrs = t->time.tm_hour;
     463           0 :         min = t->time.tm_min;
     464           0 :         sec = t->time.tm_sec;
     465             : 
     466           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     467           0 :         if (!(rtc_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) {
     468             :                 /* Writing 0xff means "don't care" or "match all".  */
     469           0 :                 mon = (mon <= 12) ? bin2bcd(mon) : 0xff;
     470           0 :                 mday = (mday >= 1 && mday <= 31) ? bin2bcd(mday) : 0xff;
     471           0 :                 hrs = (hrs < 24) ? bin2bcd(hrs) : 0xff;
     472           0 :                 min = (min < 60) ? bin2bcd(min) : 0xff;
     473           0 :                 sec = (sec < 60) ? bin2bcd(sec) : 0xff;
     474             :         }
     475             : 
     476           0 :         spin_lock_irq(&rtc_lock);
     477             : 
     478             :         /* next rtc irq must not be from previous alarm setting */
     479           0 :         cmos_irq_disable(cmos, RTC_AIE);
     480             : 
     481             :         /* update alarm */
     482           0 :         CMOS_WRITE(hrs, RTC_HOURS_ALARM);
     483           0 :         CMOS_WRITE(min, RTC_MINUTES_ALARM);
     484           0 :         CMOS_WRITE(sec, RTC_SECONDS_ALARM);
     485             : 
     486             :         /* the system may support an "enhanced" alarm */
     487           0 :         if (cmos->day_alrm) {
     488           0 :                 CMOS_WRITE(mday, cmos->day_alrm);
     489           0 :                 if (cmos->mon_alrm)
     490           0 :                         CMOS_WRITE(mon, cmos->mon_alrm);
     491             :         }
     492             : 
     493           0 :         if (use_hpet_alarm()) {
     494             :                 /*
     495             :                  * FIXME the HPET alarm glue currently ignores day_alrm
     496             :                  * and mon_alrm ...
     497             :                  */
     498           0 :                 hpet_set_alarm_time(t->time.tm_hour, t->time.tm_min,
     499           0 :                                     t->time.tm_sec);
     500             :         }
     501             : 
     502           0 :         if (t->enabled)
     503           0 :                 cmos_irq_enable(cmos, RTC_AIE);
     504             : 
     505           0 :         spin_unlock_irq(&rtc_lock);
     506             : 
     507           0 :         cmos->alarm_expires = rtc_tm_to_time64(&t->time);
     508             : 
     509           0 :         return 0;
     510             : }
     511             : 
     512           0 : static int cmos_alarm_irq_enable(struct device *dev, unsigned int enabled)
     513             : {
     514           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     515           0 :         unsigned long   flags;
     516             : 
     517           0 :         spin_lock_irqsave(&rtc_lock, flags);
     518             : 
     519           0 :         if (enabled)
     520           0 :                 cmos_irq_enable(cmos, RTC_AIE);
     521             :         else
     522           0 :                 cmos_irq_disable(cmos, RTC_AIE);
     523             : 
     524           0 :         spin_unlock_irqrestore(&rtc_lock, flags);
     525           0 :         return 0;
     526             : }
     527             : 
     528             : #if IS_ENABLED(CONFIG_RTC_INTF_PROC)
     529             : 
     530             : static int cmos_procfs(struct device *dev, struct seq_file *seq)
     531             : {
     532             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     533             :         unsigned char   rtc_control, valid;
     534             : 
     535             :         spin_lock_irq(&rtc_lock);
     536             :         rtc_control = CMOS_READ(RTC_CONTROL);
     537             :         valid = CMOS_READ(RTC_VALID);
     538             :         spin_unlock_irq(&rtc_lock);
     539             : 
     540             :         /* NOTE:  at least ICH6 reports battery status using a different
     541             :          * (non-RTC) bit; and SQWE is ignored on many current systems.
     542             :          */
     543             :         seq_printf(seq,
     544             :                    "periodic_IRQ\t: %s\n"
     545             :                    "update_IRQ\t: %s\n"
     546             :                    "HPET_emulated\t: %s\n"
     547             :                    // "square_wave\t: %s\n"
     548             :                    "BCD\t\t: %s\n"
     549             :                    "DST_enable\t: %s\n"
     550             :                    "periodic_freq\t: %d\n"
     551             :                    "batt_status\t: %s\n",
     552             :                    (rtc_control & RTC_PIE) ? "yes" : "no",
     553             :                    (rtc_control & RTC_UIE) ? "yes" : "no",
     554             :                    use_hpet_alarm() ? "yes" : "no",
     555             :                    // (rtc_control & RTC_SQWE) ? "yes" : "no",
     556             :                    (rtc_control & RTC_DM_BINARY) ? "no" : "yes",
     557             :                    (rtc_control & RTC_DST_EN) ? "yes" : "no",
     558             :                    cmos->rtc->irq_freq,
     559             :                    (valid & RTC_VRT) ? "okay" : "dead");
     560             : 
     561             :         return 0;
     562             : }
     563             : 
     564             : #else
     565             : #define cmos_procfs     NULL
     566             : #endif
     567             : 
     568             : static const struct rtc_class_ops cmos_rtc_ops = {
     569             :         .read_time              = cmos_read_time,
     570             :         .set_time               = cmos_set_time,
     571             :         .read_alarm             = cmos_read_alarm,
     572             :         .set_alarm              = cmos_set_alarm,
     573             :         .proc                   = cmos_procfs,
     574             :         .alarm_irq_enable       = cmos_alarm_irq_enable,
     575             : };
     576             : 
     577             : /*----------------------------------------------------------------*/
     578             : 
     579             : /*
     580             :  * All these chips have at least 64 bytes of address space, shared by
     581             :  * RTC registers and NVRAM.  Most of those bytes of NVRAM are used
     582             :  * by boot firmware.  Modern chips have 128 or 256 bytes.
     583             :  */
     584             : 
     585             : #define NVRAM_OFFSET    (RTC_REG_D + 1)
     586             : 
     587             : static int cmos_nvram_read(void *priv, unsigned int off, void *val,
     588             :                            size_t count)
     589             : {
     590             :         unsigned char *buf = val;
     591             :         int     retval;
     592             : 
     593             :         off += NVRAM_OFFSET;
     594             :         spin_lock_irq(&rtc_lock);
     595             :         for (retval = 0; count; count--, off++, retval++) {
     596             :                 if (off < 128)
     597             :                         *buf++ = CMOS_READ(off);
     598             :                 else if (can_bank2)
     599             :                         *buf++ = cmos_read_bank2(off);
     600             :                 else
     601             :                         break;
     602             :         }
     603             :         spin_unlock_irq(&rtc_lock);
     604             : 
     605             :         return retval;
     606             : }
     607             : 
     608             : static int cmos_nvram_write(void *priv, unsigned int off, void *val,
     609             :                             size_t count)
     610             : {
     611             :         struct cmos_rtc *cmos = priv;
     612             :         unsigned char   *buf = val;
     613             :         int             retval;
     614             : 
     615             :         /* NOTE:  on at least PCs and Ataris, the boot firmware uses a
     616             :          * checksum on part of the NVRAM data.  That's currently ignored
     617             :          * here.  If userspace is smart enough to know what fields of
     618             :          * NVRAM to update, updating checksums is also part of its job.
     619             :          */
     620             :         off += NVRAM_OFFSET;
     621             :         spin_lock_irq(&rtc_lock);
     622             :         for (retval = 0; count; count--, off++, retval++) {
     623             :                 /* don't trash RTC registers */
     624             :                 if (off == cmos->day_alrm
     625             :                                 || off == cmos->mon_alrm
     626             :                                 || off == cmos->century)
     627             :                         buf++;
     628             :                 else if (off < 128)
     629             :                         CMOS_WRITE(*buf++, off);
     630             :                 else if (can_bank2)
     631             :                         cmos_write_bank2(*buf++, off);
     632             :                 else
     633             :                         break;
     634             :         }
     635             :         spin_unlock_irq(&rtc_lock);
     636             : 
     637             :         return retval;
     638             : }
     639             : 
     640             : /*----------------------------------------------------------------*/
     641             : 
     642             : static struct cmos_rtc  cmos_rtc;
     643             : 
     644           0 : static irqreturn_t cmos_interrupt(int irq, void *p)
     645             : {
     646           0 :         u8              irqstat;
     647           0 :         u8              rtc_control;
     648             : 
     649           0 :         spin_lock(&rtc_lock);
     650             : 
     651             :         /* When the HPET interrupt handler calls us, the interrupt
     652             :          * status is passed as arg1 instead of the irq number.  But
     653             :          * always clear irq status, even when HPET is in the way.
     654             :          *
     655             :          * Note that HPET and RTC are almost certainly out of phase,
     656             :          * giving different IRQ status ...
     657             :          */
     658           0 :         irqstat = CMOS_READ(RTC_INTR_FLAGS);
     659           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     660           0 :         if (use_hpet_alarm())
     661           0 :                 irqstat = (unsigned long)irq & 0xF0;
     662             : 
     663             :         /* If we were suspended, RTC_CONTROL may not be accurate since the
     664             :          * bios may have cleared it.
     665             :          */
     666           0 :         if (!cmos_rtc.suspend_ctrl)
     667           0 :                 irqstat &= (rtc_control & RTC_IRQMASK) | RTC_IRQF;
     668             :         else
     669           0 :                 irqstat &= (cmos_rtc.suspend_ctrl & RTC_IRQMASK) | RTC_IRQF;
     670             : 
     671             :         /* All Linux RTC alarms should be treated as if they were oneshot.
     672             :          * Similar code may be needed in system wakeup paths, in case the
     673             :          * alarm woke the system.
     674             :          */
     675           0 :         if (irqstat & RTC_AIE) {
     676           0 :                 cmos_rtc.suspend_ctrl &= ~RTC_AIE;
     677           0 :                 rtc_control &= ~RTC_AIE;
     678           0 :                 CMOS_WRITE(rtc_control, RTC_CONTROL);
     679           0 :                 if (use_hpet_alarm())
     680           0 :                         hpet_mask_rtc_irq_bit(RTC_AIE);
     681           0 :                 CMOS_READ(RTC_INTR_FLAGS);
     682             :         }
     683           0 :         spin_unlock(&rtc_lock);
     684             : 
     685           0 :         if (is_intr(irqstat)) {
     686           0 :                 rtc_update_irq(p, 1, irqstat);
     687           0 :                 return IRQ_HANDLED;
     688             :         } else
     689             :                 return IRQ_NONE;
     690             : }
     691             : 
     692             : #ifdef  CONFIG_PNP
     693             : #define INITSECTION
     694             : 
     695             : #else
     696             : #define INITSECTION     __init
     697             : #endif
     698             : 
     699             : static int INITSECTION
     700           1 : cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
     701             : {
     702           1 :         struct cmos_rtc_board_info      *info = dev_get_platdata(dev);
     703           1 :         int                             retval = 0;
     704           1 :         unsigned char                   rtc_control;
     705           1 :         unsigned                        address_space;
     706           1 :         u32                             flags = 0;
     707           1 :         struct nvmem_config nvmem_cfg = {
     708             :                 .name = "cmos_nvram",
     709             :                 .word_size = 1,
     710             :                 .stride = 1,
     711             :                 .reg_read = cmos_nvram_read,
     712             :                 .reg_write = cmos_nvram_write,
     713             :                 .priv = &cmos_rtc,
     714             :         };
     715             : 
     716             :         /* there can be only one ... */
     717           1 :         if (cmos_rtc.dev)
     718             :                 return -EBUSY;
     719             : 
     720           1 :         if (!ports)
     721             :                 return -ENODEV;
     722             : 
     723             :         /* Claim I/O ports ASAP, minimizing conflict with legacy driver.
     724             :          *
     725             :          * REVISIT non-x86 systems may instead use memory space resources
     726             :          * (needing ioremap etc), not i/o space resources like this ...
     727             :          */
     728           1 :         if (RTC_IOMAPPED)
     729           1 :                 ports = request_region(ports->start, resource_size(ports),
     730             :                                        driver_name);
     731             :         else
     732             :                 ports = request_mem_region(ports->start, resource_size(ports),
     733             :                                            driver_name);
     734           1 :         if (!ports) {
     735             :                 dev_dbg(dev, "i/o registers already in use\n");
     736             :                 return -EBUSY;
     737             :         }
     738             : 
     739           1 :         cmos_rtc.irq = rtc_irq;
     740           1 :         cmos_rtc.iomem = ports;
     741             : 
     742             :         /* Heuristic to deduce NVRAM size ... do what the legacy NVRAM
     743             :          * driver did, but don't reject unknown configs.   Old hardware
     744             :          * won't address 128 bytes.  Newer chips have multiple banks,
     745             :          * though they may not be listed in one I/O resource.
     746             :          */
     747             : #if     defined(CONFIG_ATARI)
     748             :         address_space = 64;
     749             : #elif defined(__i386__) || defined(__x86_64__) || defined(__arm__) \
     750             :                         || defined(__sparc__) || defined(__mips__) \
     751             :                         || defined(__powerpc__)
     752           1 :         address_space = 128;
     753             : #else
     754             : #warning Assuming 128 bytes of RTC+NVRAM address space, not 64 bytes.
     755             :         address_space = 128;
     756             : #endif
     757           1 :         if (can_bank2 && ports->end > (ports->start + 1))
     758           0 :                 address_space = 256;
     759             : 
     760             :         /* For ACPI systems extension info comes from the FADT.  On others,
     761             :          * board specific setup provides it as appropriate.  Systems where
     762             :          * the alarm IRQ isn't automatically a wakeup IRQ (like ACPI, and
     763             :          * some almost-clones) can provide hooks to make that behave.
     764             :          *
     765             :          * Note that ACPI doesn't preclude putting these registers into
     766             :          * "extended" areas of the chip, including some that we won't yet
     767             :          * expect CMOS_READ and friends to handle.
     768             :          */
     769           1 :         if (info) {
     770           0 :                 if (info->flags)
     771             :                         flags = info->flags;
     772           0 :                 if (info->address_space)
     773           0 :                         address_space = info->address_space;
     774             : 
     775           0 :                 if (info->rtc_day_alarm && info->rtc_day_alarm < 128)
     776           0 :                         cmos_rtc.day_alrm = info->rtc_day_alarm;
     777           0 :                 if (info->rtc_mon_alarm && info->rtc_mon_alarm < 128)
     778           0 :                         cmos_rtc.mon_alrm = info->rtc_mon_alarm;
     779           0 :                 if (info->rtc_century && info->rtc_century < 128)
     780           0 :                         cmos_rtc.century = info->rtc_century;
     781             : 
     782           0 :                 if (info->wake_on && info->wake_off) {
     783           0 :                         cmos_rtc.wake_on = info->wake_on;
     784           0 :                         cmos_rtc.wake_off = info->wake_off;
     785             :                 }
     786             :         }
     787             : 
     788           1 :         cmos_rtc.dev = dev;
     789           1 :         dev_set_drvdata(dev, &cmos_rtc);
     790             : 
     791           1 :         cmos_rtc.rtc = devm_rtc_allocate_device(dev);
     792           1 :         if (IS_ERR(cmos_rtc.rtc)) {
     793           0 :                 retval = PTR_ERR(cmos_rtc.rtc);
     794           0 :                 goto cleanup0;
     795             :         }
     796             : 
     797           1 :         rename_region(ports, dev_name(&cmos_rtc.rtc->dev));
     798             : 
     799           1 :         spin_lock_irq(&rtc_lock);
     800             : 
     801             :         /* Ensure that the RTC is accessible. Bit 6 must be 0! */
     802           1 :         if ((CMOS_READ(RTC_VALID) & 0x40) != 0) {
     803           1 :                 spin_unlock_irq(&rtc_lock);
     804           1 :                 dev_warn(dev, "not accessible\n");
     805           1 :                 retval = -ENXIO;
     806           1 :                 goto cleanup1;
     807             :         }
     808             : 
     809           0 :         if (!(flags & CMOS_RTC_FLAGS_NOFREQ)) {
     810             :                 /* force periodic irq to CMOS reset default of 1024Hz;
     811             :                  *
     812             :                  * REVISIT it's been reported that at least one x86_64 ALI
     813             :                  * mobo doesn't use 32KHz here ... for portability we might
     814             :                  * need to do something about other clock frequencies.
     815             :                  */
     816           0 :                 cmos_rtc.rtc->irq_freq = 1024;
     817           0 :                 if (use_hpet_alarm())
     818           0 :                         hpet_set_periodic_freq(cmos_rtc.rtc->irq_freq);
     819           0 :                 CMOS_WRITE(RTC_REF_CLCK_32KHZ | 0x06, RTC_FREQ_SELECT);
     820             :         }
     821             : 
     822             :         /* disable irqs */
     823           0 :         if (is_valid_irq(rtc_irq))
     824           0 :                 cmos_irq_disable(&cmos_rtc, RTC_PIE | RTC_AIE | RTC_UIE);
     825             : 
     826           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     827             : 
     828           0 :         spin_unlock_irq(&rtc_lock);
     829             : 
     830           0 :         if (is_valid_irq(rtc_irq) && !(rtc_control & RTC_24H)) {
     831           0 :                 dev_warn(dev, "only 24-hr supported\n");
     832           0 :                 retval = -ENXIO;
     833           0 :                 goto cleanup1;
     834             :         }
     835             : 
     836           0 :         if (use_hpet_alarm())
     837           0 :                 hpet_rtc_timer_init();
     838             : 
     839           0 :         if (is_valid_irq(rtc_irq)) {
     840           0 :                 irq_handler_t rtc_cmos_int_handler;
     841             : 
     842           0 :                 if (use_hpet_alarm()) {
     843           0 :                         rtc_cmos_int_handler = hpet_rtc_interrupt;
     844           0 :                         retval = hpet_register_irq_handler(cmos_interrupt);
     845           0 :                         if (retval) {
     846           0 :                                 hpet_mask_rtc_irq_bit(RTC_IRQMASK);
     847           0 :                                 dev_warn(dev, "hpet_register_irq_handler "
     848             :                                                 " failed in rtc_init().");
     849           0 :                                 goto cleanup1;
     850             :                         }
     851             :                 } else
     852             :                         rtc_cmos_int_handler = cmos_interrupt;
     853             : 
     854           0 :                 retval = request_irq(rtc_irq, rtc_cmos_int_handler,
     855           0 :                                 0, dev_name(&cmos_rtc.rtc->dev),
     856           0 :                                 cmos_rtc.rtc);
     857           0 :                 if (retval < 0) {
     858           0 :                         dev_dbg(dev, "IRQ %d is already in use\n", rtc_irq);
     859           0 :                         goto cleanup1;
     860             :                 }
     861             :         } else {
     862           0 :                 clear_bit(RTC_FEATURE_ALARM, cmos_rtc.rtc->features);
     863             :         }
     864             : 
     865           0 :         cmos_rtc.rtc->ops = &cmos_rtc_ops;
     866             : 
     867           0 :         retval = devm_rtc_register_device(cmos_rtc.rtc);
     868           0 :         if (retval)
     869           0 :                 goto cleanup2;
     870             : 
     871             :         /* Set the sync offset for the periodic 11min update correct */
     872           0 :         cmos_rtc.rtc->set_offset_nsec = NSEC_PER_SEC / 2;
     873             : 
     874             :         /* export at least the first block of NVRAM */
     875           0 :         nvmem_cfg.size = address_space - NVRAM_OFFSET;
     876           0 :         devm_rtc_nvmem_register(cmos_rtc.rtc, &nvmem_cfg);
     877             : 
     878           0 :         dev_info(dev, "%s%s, %d bytes nvram%s\n",
     879             :                  !is_valid_irq(rtc_irq) ? "no alarms" :
     880             :                  cmos_rtc.mon_alrm ? "alarms up to one year" :
     881             :                  cmos_rtc.day_alrm ? "alarms up to one month" :
     882             :                  "alarms up to one day",
     883             :                  cmos_rtc.century ? ", y3k" : "",
     884             :                  nvmem_cfg.size,
     885             :                  use_hpet_alarm() ? ", hpet irqs" : "");
     886             : 
     887           0 :         return 0;
     888             : 
     889           0 : cleanup2:
     890           0 :         if (is_valid_irq(rtc_irq))
     891           0 :                 free_irq(rtc_irq, cmos_rtc.rtc);
     892           0 : cleanup1:
     893           1 :         cmos_rtc.dev = NULL;
     894           1 : cleanup0:
     895           1 :         if (RTC_IOMAPPED)
     896           1 :                 release_region(ports->start, resource_size(ports));
     897             :         else
     898             :                 release_mem_region(ports->start, resource_size(ports));
     899           1 :         return retval;
     900             : }
     901             : 
     902           0 : static void cmos_do_shutdown(int rtc_irq)
     903             : {
     904           0 :         spin_lock_irq(&rtc_lock);
     905           0 :         if (is_valid_irq(rtc_irq))
     906           0 :                 cmos_irq_disable(&cmos_rtc, RTC_IRQMASK);
     907           0 :         spin_unlock_irq(&rtc_lock);
     908           0 : }
     909             : 
     910           0 : static void cmos_do_remove(struct device *dev)
     911             : {
     912           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     913           0 :         struct resource *ports;
     914             : 
     915           0 :         cmos_do_shutdown(cmos->irq);
     916             : 
     917           0 :         if (is_valid_irq(cmos->irq)) {
     918           0 :                 free_irq(cmos->irq, cmos->rtc);
     919           0 :                 if (use_hpet_alarm())
     920           0 :                         hpet_unregister_irq_handler(cmos_interrupt);
     921             :         }
     922             : 
     923           0 :         cmos->rtc = NULL;
     924             : 
     925           0 :         ports = cmos->iomem;
     926           0 :         if (RTC_IOMAPPED)
     927           0 :                 release_region(ports->start, resource_size(ports));
     928             :         else
     929             :                 release_mem_region(ports->start, resource_size(ports));
     930           0 :         cmos->iomem = NULL;
     931             : 
     932           0 :         cmos->dev = NULL;
     933           0 : }
     934             : 
     935           0 : static int cmos_aie_poweroff(struct device *dev)
     936             : {
     937           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     938           0 :         struct rtc_time now;
     939           0 :         time64_t t_now;
     940           0 :         int retval = 0;
     941           0 :         unsigned char rtc_control;
     942             : 
     943           0 :         if (!cmos->alarm_expires)
     944             :                 return -EINVAL;
     945             : 
     946           0 :         spin_lock_irq(&rtc_lock);
     947           0 :         rtc_control = CMOS_READ(RTC_CONTROL);
     948           0 :         spin_unlock_irq(&rtc_lock);
     949             : 
     950             :         /* We only care about the situation where AIE is disabled. */
     951           0 :         if (rtc_control & RTC_AIE)
     952             :                 return -EBUSY;
     953             : 
     954           0 :         cmos_read_time(dev, &now);
     955           0 :         t_now = rtc_tm_to_time64(&now);
     956             : 
     957             :         /*
     958             :          * When enabling "RTC wake-up" in BIOS setup, the machine reboots
     959             :          * automatically right after shutdown on some buggy boxes.
     960             :          * This automatic rebooting issue won't happen when the alarm
     961             :          * time is larger than now+1 seconds.
     962             :          *
     963             :          * If the alarm time is equal to now+1 seconds, the issue can be
     964             :          * prevented by cancelling the alarm.
     965             :          */
     966           0 :         if (cmos->alarm_expires == t_now + 1) {
     967           0 :                 struct rtc_wkalrm alarm;
     968             : 
     969             :                 /* Cancel the AIE timer by configuring the past time. */
     970           0 :                 rtc_time64_to_tm(t_now - 1, &alarm.time);
     971           0 :                 alarm.enabled = 0;
     972           0 :                 retval = cmos_set_alarm(dev, &alarm);
     973           0 :         } else if (cmos->alarm_expires > t_now + 1) {
     974           0 :                 retval = -EBUSY;
     975             :         }
     976             : 
     977             :         return retval;
     978             : }
     979             : 
     980             : static int cmos_suspend(struct device *dev)
     981             : {
     982             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
     983             :         unsigned char   tmp;
     984             : 
     985             :         /* only the alarm might be a wakeup event source */
     986             :         spin_lock_irq(&rtc_lock);
     987             :         cmos->suspend_ctrl = tmp = CMOS_READ(RTC_CONTROL);
     988             :         if (tmp & (RTC_PIE|RTC_AIE|RTC_UIE)) {
     989             :                 unsigned char   mask;
     990             : 
     991             :                 if (device_may_wakeup(dev))
     992             :                         mask = RTC_IRQMASK & ~RTC_AIE;
     993             :                 else
     994             :                         mask = RTC_IRQMASK;
     995             :                 tmp &= ~mask;
     996             :                 CMOS_WRITE(tmp, RTC_CONTROL);
     997             :                 if (use_hpet_alarm())
     998             :                         hpet_mask_rtc_irq_bit(mask);
     999             :                 cmos_checkintr(cmos, tmp);
    1000             :         }
    1001             :         spin_unlock_irq(&rtc_lock);
    1002             : 
    1003             :         if ((tmp & RTC_AIE) && !cmos_use_acpi_alarm()) {
    1004             :                 cmos->enabled_wake = 1;
    1005             :                 if (cmos->wake_on)
    1006             :                         cmos->wake_on(dev);
    1007             :                 else
    1008             :                         enable_irq_wake(cmos->irq);
    1009             :         }
    1010             : 
    1011             :         memset(&cmos->saved_wkalrm, 0, sizeof(struct rtc_wkalrm));
    1012             :         cmos_read_alarm(dev, &cmos->saved_wkalrm);
    1013             : 
    1014             :         dev_dbg(dev, "suspend%s, ctrl %02x\n",
    1015             :                         (tmp & RTC_AIE) ? ", alarm may wake" : "",
    1016             :                         tmp);
    1017             : 
    1018             :         return 0;
    1019             : }
    1020             : 
    1021             : /* We want RTC alarms to wake us from e.g. ACPI G2/S5 "soft off", even
    1022             :  * after a detour through G3 "mechanical off", although the ACPI spec
    1023             :  * says wakeup should only work from G1/S4 "hibernate".  To most users,
    1024             :  * distinctions between S4 and S5 are pointless.  So when the hardware
    1025             :  * allows, don't draw that distinction.
    1026             :  */
    1027           0 : static inline int cmos_poweroff(struct device *dev)
    1028             : {
    1029           0 :         if (!IS_ENABLED(CONFIG_PM))
    1030           0 :                 return -ENOSYS;
    1031             : 
    1032             :         return cmos_suspend(dev);
    1033             : }
    1034             : 
    1035             : static void cmos_check_wkalrm(struct device *dev)
    1036             : {
    1037             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1038             :         struct rtc_wkalrm current_alarm;
    1039             :         time64_t t_now;
    1040             :         time64_t t_current_expires;
    1041             :         time64_t t_saved_expires;
    1042             :         struct rtc_time now;
    1043             : 
    1044             :         /* Check if we have RTC Alarm armed */
    1045             :         if (!(cmos->suspend_ctrl & RTC_AIE))
    1046             :                 return;
    1047             : 
    1048             :         cmos_read_time(dev, &now);
    1049             :         t_now = rtc_tm_to_time64(&now);
    1050             : 
    1051             :         /*
    1052             :          * ACPI RTC wake event is cleared after resume from STR,
    1053             :          * ACK the rtc irq here
    1054             :          */
    1055             :         if (t_now >= cmos->alarm_expires && cmos_use_acpi_alarm()) {
    1056             :                 cmos_interrupt(0, (void *)cmos->rtc);
    1057             :                 return;
    1058             :         }
    1059             : 
    1060             :         memset(&current_alarm, 0, sizeof(struct rtc_wkalrm));
    1061             :         cmos_read_alarm(dev, &current_alarm);
    1062             :         t_current_expires = rtc_tm_to_time64(&current_alarm.time);
    1063             :         t_saved_expires = rtc_tm_to_time64(&cmos->saved_wkalrm.time);
    1064             :         if (t_current_expires != t_saved_expires ||
    1065             :             cmos->saved_wkalrm.enabled != current_alarm.enabled) {
    1066             :                 cmos_set_alarm(dev, &cmos->saved_wkalrm);
    1067             :         }
    1068             : }
    1069             : 
    1070             : static void cmos_check_acpi_rtc_status(struct device *dev,
    1071             :                                        unsigned char *rtc_control);
    1072             : 
    1073             : static int __maybe_unused cmos_resume(struct device *dev)
    1074             : {
    1075             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1076             :         unsigned char tmp;
    1077             : 
    1078             :         if (cmos->enabled_wake && !cmos_use_acpi_alarm()) {
    1079             :                 if (cmos->wake_off)
    1080             :                         cmos->wake_off(dev);
    1081             :                 else
    1082             :                         disable_irq_wake(cmos->irq);
    1083             :                 cmos->enabled_wake = 0;
    1084             :         }
    1085             : 
    1086             :         /* The BIOS might have changed the alarm, restore it */
    1087             :         cmos_check_wkalrm(dev);
    1088             : 
    1089             :         spin_lock_irq(&rtc_lock);
    1090             :         tmp = cmos->suspend_ctrl;
    1091             :         cmos->suspend_ctrl = 0;
    1092             :         /* re-enable any irqs previously active */
    1093             :         if (tmp & RTC_IRQMASK) {
    1094             :                 unsigned char   mask;
    1095             : 
    1096             :                 if (device_may_wakeup(dev) && use_hpet_alarm())
    1097             :                         hpet_rtc_timer_init();
    1098             : 
    1099             :                 do {
    1100             :                         CMOS_WRITE(tmp, RTC_CONTROL);
    1101             :                         if (use_hpet_alarm())
    1102             :                                 hpet_set_rtc_irq_bit(tmp & RTC_IRQMASK);
    1103             : 
    1104             :                         mask = CMOS_READ(RTC_INTR_FLAGS);
    1105             :                         mask &= (tmp & RTC_IRQMASK) | RTC_IRQF;
    1106             :                         if (!use_hpet_alarm() || !is_intr(mask))
    1107             :                                 break;
    1108             : 
    1109             :                         /* force one-shot behavior if HPET blocked
    1110             :                          * the wake alarm's irq
    1111             :                          */
    1112             :                         rtc_update_irq(cmos->rtc, 1, mask);
    1113             :                         tmp &= ~RTC_AIE;
    1114             :                         hpet_mask_rtc_irq_bit(RTC_AIE);
    1115             :                 } while (mask & RTC_AIE);
    1116             : 
    1117             :                 if (tmp & RTC_AIE)
    1118             :                         cmos_check_acpi_rtc_status(dev, &tmp);
    1119             :         }
    1120             :         spin_unlock_irq(&rtc_lock);
    1121             : 
    1122             :         dev_dbg(dev, "resume, ctrl %02x\n", tmp);
    1123             : 
    1124             :         return 0;
    1125             : }
    1126             : 
    1127             : static SIMPLE_DEV_PM_OPS(cmos_pm_ops, cmos_suspend, cmos_resume);
    1128             : 
    1129             : /*----------------------------------------------------------------*/
    1130             : 
    1131             : /* On non-x86 systems, a "CMOS" RTC lives most naturally on platform_bus.
    1132             :  * ACPI systems always list these as PNPACPI devices, and pre-ACPI PCs
    1133             :  * probably list them in similar PNPBIOS tables; so PNP is more common.
    1134             :  *
    1135             :  * We don't use legacy "poke at the hardware" probing.  Ancient PCs that
    1136             :  * predate even PNPBIOS should set up platform_bus devices.
    1137             :  */
    1138             : 
    1139             : #ifdef  CONFIG_ACPI
    1140             : 
    1141             : #include <linux/acpi.h>
    1142             : 
    1143             : static u32 rtc_handler(void *context)
    1144             : {
    1145             :         struct device *dev = context;
    1146             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1147             :         unsigned char rtc_control = 0;
    1148             :         unsigned char rtc_intr;
    1149             :         unsigned long flags;
    1150             : 
    1151             : 
    1152             :         /*
    1153             :          * Always update rtc irq when ACPI is used as RTC Alarm.
    1154             :          * Or else, ACPI SCI is enabled during suspend/resume only,
    1155             :          * update rtc irq in that case.
    1156             :          */
    1157             :         if (cmos_use_acpi_alarm())
    1158             :                 cmos_interrupt(0, (void *)cmos->rtc);
    1159             :         else {
    1160             :                 /* Fix me: can we use cmos_interrupt() here as well? */
    1161             :                 spin_lock_irqsave(&rtc_lock, flags);
    1162             :                 if (cmos_rtc.suspend_ctrl)
    1163             :                         rtc_control = CMOS_READ(RTC_CONTROL);
    1164             :                 if (rtc_control & RTC_AIE) {
    1165             :                         cmos_rtc.suspend_ctrl &= ~RTC_AIE;
    1166             :                         CMOS_WRITE(rtc_control, RTC_CONTROL);
    1167             :                         rtc_intr = CMOS_READ(RTC_INTR_FLAGS);
    1168             :                         rtc_update_irq(cmos->rtc, 1, rtc_intr);
    1169             :                 }
    1170             :                 spin_unlock_irqrestore(&rtc_lock, flags);
    1171             :         }
    1172             : 
    1173             :         pm_wakeup_hard_event(dev);
    1174             :         acpi_clear_event(ACPI_EVENT_RTC);
    1175             :         acpi_disable_event(ACPI_EVENT_RTC, 0);
    1176             :         return ACPI_INTERRUPT_HANDLED;
    1177             : }
    1178             : 
    1179             : static inline void rtc_wake_setup(struct device *dev)
    1180             : {
    1181             :         acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, dev);
    1182             :         /*
    1183             :          * After the RTC handler is installed, the Fixed_RTC event should
    1184             :          * be disabled. Only when the RTC alarm is set will it be enabled.
    1185             :          */
    1186             :         acpi_clear_event(ACPI_EVENT_RTC);
    1187             :         acpi_disable_event(ACPI_EVENT_RTC, 0);
    1188             : }
    1189             : 
    1190             : static void rtc_wake_on(struct device *dev)
    1191             : {
    1192             :         acpi_clear_event(ACPI_EVENT_RTC);
    1193             :         acpi_enable_event(ACPI_EVENT_RTC, 0);
    1194             : }
    1195             : 
    1196             : static void rtc_wake_off(struct device *dev)
    1197             : {
    1198             :         acpi_disable_event(ACPI_EVENT_RTC, 0);
    1199             : }
    1200             : 
    1201             : #ifdef CONFIG_X86
    1202             : /* Enable use_acpi_alarm mode for Intel platforms no earlier than 2015 */
    1203             : static void use_acpi_alarm_quirks(void)
    1204             : {
    1205             :         if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
    1206             :                 return;
    1207             : 
    1208             :         if (!(acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0))
    1209             :                 return;
    1210             : 
    1211             :         if (!is_hpet_enabled())
    1212             :                 return;
    1213             : 
    1214             :         if (dmi_get_bios_year() < 2015)
    1215             :                 return;
    1216             : 
    1217             :         use_acpi_alarm = true;
    1218             : }
    1219             : #else
    1220             : static inline void use_acpi_alarm_quirks(void) { }
    1221             : #endif
    1222             : 
    1223             : /* Every ACPI platform has a mc146818 compatible "cmos rtc".  Here we find
    1224             :  * its device node and pass extra config data.  This helps its driver use
    1225             :  * capabilities that the now-obsolete mc146818 didn't have, and informs it
    1226             :  * that this board's RTC is wakeup-capable (per ACPI spec).
    1227             :  */
    1228             : static struct cmos_rtc_board_info acpi_rtc_info;
    1229             : 
    1230             : static void cmos_wake_setup(struct device *dev)
    1231             : {
    1232             :         if (acpi_disabled)
    1233             :                 return;
    1234             : 
    1235             :         use_acpi_alarm_quirks();
    1236             : 
    1237             :         rtc_wake_setup(dev);
    1238             :         acpi_rtc_info.wake_on = rtc_wake_on;
    1239             :         acpi_rtc_info.wake_off = rtc_wake_off;
    1240             : 
    1241             :         /* workaround bug in some ACPI tables */
    1242             :         if (acpi_gbl_FADT.month_alarm && !acpi_gbl_FADT.day_alarm) {
    1243             :                 dev_dbg(dev, "bogus FADT month_alarm (%d)\n",
    1244             :                         acpi_gbl_FADT.month_alarm);
    1245             :                 acpi_gbl_FADT.month_alarm = 0;
    1246             :         }
    1247             : 
    1248             :         acpi_rtc_info.rtc_day_alarm = acpi_gbl_FADT.day_alarm;
    1249             :         acpi_rtc_info.rtc_mon_alarm = acpi_gbl_FADT.month_alarm;
    1250             :         acpi_rtc_info.rtc_century = acpi_gbl_FADT.century;
    1251             : 
    1252             :         /* NOTE:  S4_RTC_WAKE is NOT currently useful to Linux */
    1253             :         if (acpi_gbl_FADT.flags & ACPI_FADT_S4_RTC_WAKE)
    1254             :                 dev_info(dev, "RTC can wake from S4\n");
    1255             : 
    1256             :         dev->platform_data = &acpi_rtc_info;
    1257             : 
    1258             :         /* RTC always wakes from S1/S2/S3, and often S4/STD */
    1259             :         device_init_wakeup(dev, 1);
    1260             : }
    1261             : 
    1262             : static void cmos_check_acpi_rtc_status(struct device *dev,
    1263             :                                        unsigned char *rtc_control)
    1264             : {
    1265             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1266             :         acpi_event_status rtc_status;
    1267             :         acpi_status status;
    1268             : 
    1269             :         if (acpi_gbl_FADT.flags & ACPI_FADT_FIXED_RTC)
    1270             :                 return;
    1271             : 
    1272             :         status = acpi_get_event_status(ACPI_EVENT_RTC, &rtc_status);
    1273             :         if (ACPI_FAILURE(status)) {
    1274             :                 dev_err(dev, "Could not get RTC status\n");
    1275             :         } else if (rtc_status & ACPI_EVENT_FLAG_SET) {
    1276             :                 unsigned char mask;
    1277             :                 *rtc_control &= ~RTC_AIE;
    1278             :                 CMOS_WRITE(*rtc_control, RTC_CONTROL);
    1279             :                 mask = CMOS_READ(RTC_INTR_FLAGS);
    1280             :                 rtc_update_irq(cmos->rtc, 1, mask);
    1281             :         }
    1282             : }
    1283             : 
    1284             : #else
    1285             : 
    1286           1 : static void cmos_wake_setup(struct device *dev)
    1287             : {
    1288           1 : }
    1289             : 
    1290             : static void cmos_check_acpi_rtc_status(struct device *dev,
    1291             :                                        unsigned char *rtc_control)
    1292             : {
    1293             : }
    1294             : 
    1295             : #endif
    1296             : 
    1297             : #ifdef  CONFIG_PNP
    1298             : 
    1299             : #include <linux/pnp.h>
    1300             : 
    1301             : static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)
    1302             : {
    1303             :         cmos_wake_setup(&pnp->dev);
    1304             : 
    1305             :         if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) {
    1306             :                 unsigned int irq = 0;
    1307             : #ifdef CONFIG_X86
    1308             :                 /* Some machines contain a PNP entry for the RTC, but
    1309             :                  * don't define the IRQ. It should always be safe to
    1310             :                  * hardcode it on systems with a legacy PIC.
    1311             :                  */
    1312             :                 if (nr_legacy_irqs())
    1313             :                         irq = RTC_IRQ;
    1314             : #endif
    1315             :                 return cmos_do_probe(&pnp->dev,
    1316             :                                 pnp_get_resource(pnp, IORESOURCE_IO, 0), irq);
    1317             :         } else {
    1318             :                 return cmos_do_probe(&pnp->dev,
    1319             :                                 pnp_get_resource(pnp, IORESOURCE_IO, 0),
    1320             :                                 pnp_irq(pnp, 0));
    1321             :         }
    1322             : }
    1323             : 
    1324             : static void cmos_pnp_remove(struct pnp_dev *pnp)
    1325             : {
    1326             :         cmos_do_remove(&pnp->dev);
    1327             : }
    1328             : 
    1329             : static void cmos_pnp_shutdown(struct pnp_dev *pnp)
    1330             : {
    1331             :         struct device *dev = &pnp->dev;
    1332             :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1333             : 
    1334             :         if (system_state == SYSTEM_POWER_OFF) {
    1335             :                 int retval = cmos_poweroff(dev);
    1336             : 
    1337             :                 if (cmos_aie_poweroff(dev) < 0 && !retval)
    1338             :                         return;
    1339             :         }
    1340             : 
    1341             :         cmos_do_shutdown(cmos->irq);
    1342             : }
    1343             : 
    1344             : static const struct pnp_device_id rtc_ids[] = {
    1345             :         { .id = "PNP0b00", },
    1346             :         { .id = "PNP0b01", },
    1347             :         { .id = "PNP0b02", },
    1348             :         { },
    1349             : };
    1350             : MODULE_DEVICE_TABLE(pnp, rtc_ids);
    1351             : 
    1352             : static struct pnp_driver cmos_pnp_driver = {
    1353             :         .name           = driver_name,
    1354             :         .id_table       = rtc_ids,
    1355             :         .probe          = cmos_pnp_probe,
    1356             :         .remove         = cmos_pnp_remove,
    1357             :         .shutdown       = cmos_pnp_shutdown,
    1358             : 
    1359             :         /* flag ensures resume() gets called, and stops syslog spam */
    1360             :         .flags          = PNP_DRIVER_RES_DO_NOT_CHANGE,
    1361             :         .driver         = {
    1362             :                         .pm = &cmos_pm_ops,
    1363             :         },
    1364             : };
    1365             : 
    1366             : #endif  /* CONFIG_PNP */
    1367             : 
    1368             : #ifdef CONFIG_OF
    1369             : static const struct of_device_id of_cmos_match[] = {
    1370             :         {
    1371             :                 .compatible = "motorola,mc146818",
    1372             :         },
    1373             :         { },
    1374             : };
    1375             : MODULE_DEVICE_TABLE(of, of_cmos_match);
    1376             : 
    1377             : static __init void cmos_of_init(struct platform_device *pdev)
    1378             : {
    1379             :         struct device_node *node = pdev->dev.of_node;
    1380             :         const __be32 *val;
    1381             : 
    1382             :         if (!node)
    1383             :                 return;
    1384             : 
    1385             :         val = of_get_property(node, "ctrl-reg", NULL);
    1386             :         if (val)
    1387             :                 CMOS_WRITE(be32_to_cpup(val), RTC_CONTROL);
    1388             : 
    1389             :         val = of_get_property(node, "freq-reg", NULL);
    1390             :         if (val)
    1391             :                 CMOS_WRITE(be32_to_cpup(val), RTC_FREQ_SELECT);
    1392             : }
    1393             : #else
    1394           1 : static inline void cmos_of_init(struct platform_device *pdev) {}
    1395             : #endif
    1396             : /*----------------------------------------------------------------*/
    1397             : 
    1398             : /* Platform setup should have set up an RTC device, when PNP is
    1399             :  * unavailable ... this could happen even on (older) PCs.
    1400             :  */
    1401             : 
    1402           1 : static int __init cmos_platform_probe(struct platform_device *pdev)
    1403             : {
    1404           1 :         struct resource *resource;
    1405           1 :         int irq;
    1406             : 
    1407           1 :         cmos_of_init(pdev);
    1408           1 :         cmos_wake_setup(&pdev->dev);
    1409             : 
    1410           1 :         if (RTC_IOMAPPED)
    1411           1 :                 resource = platform_get_resource(pdev, IORESOURCE_IO, 0);
    1412             :         else
    1413             :                 resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    1414           1 :         irq = platform_get_irq(pdev, 0);
    1415           1 :         if (irq < 0)
    1416             :                 irq = -1;
    1417             : 
    1418           1 :         return cmos_do_probe(&pdev->dev, resource, irq);
    1419             : }
    1420             : 
    1421           0 : static int cmos_platform_remove(struct platform_device *pdev)
    1422             : {
    1423           0 :         cmos_do_remove(&pdev->dev);
    1424           0 :         return 0;
    1425             : }
    1426             : 
    1427           0 : static void cmos_platform_shutdown(struct platform_device *pdev)
    1428             : {
    1429           0 :         struct device *dev = &pdev->dev;
    1430           0 :         struct cmos_rtc *cmos = dev_get_drvdata(dev);
    1431             : 
    1432           0 :         if (system_state == SYSTEM_POWER_OFF) {
    1433           0 :                 int retval = cmos_poweroff(dev);
    1434             : 
    1435           0 :                 if (cmos_aie_poweroff(dev) < 0 && !retval)
    1436             :                         return;
    1437             :         }
    1438             : 
    1439           0 :         cmos_do_shutdown(cmos->irq);
    1440             : }
    1441             : 
    1442             : /* work with hotplug and coldplug */
    1443             : MODULE_ALIAS("platform:rtc_cmos");
    1444             : 
    1445             : static struct platform_driver cmos_platform_driver = {
    1446             :         .remove         = cmos_platform_remove,
    1447             :         .shutdown       = cmos_platform_shutdown,
    1448             :         .driver = {
    1449             :                 .name           = driver_name,
    1450             :                 .pm             = &cmos_pm_ops,
    1451             :                 .of_match_table = of_match_ptr(of_cmos_match),
    1452             :         }
    1453             : };
    1454             : 
    1455             : #ifdef CONFIG_PNP
    1456             : static bool pnp_driver_registered;
    1457             : #endif
    1458             : static bool platform_driver_registered;
    1459             : 
    1460           1 : static int __init cmos_init(void)
    1461             : {
    1462           1 :         int retval = 0;
    1463             : 
    1464             : #ifdef  CONFIG_PNP
    1465             :         retval = pnp_register_driver(&cmos_pnp_driver);
    1466             :         if (retval == 0)
    1467             :                 pnp_driver_registered = true;
    1468             : #endif
    1469             : 
    1470           1 :         if (!cmos_rtc.dev) {
    1471           1 :                 retval = platform_driver_probe(&cmos_platform_driver,
    1472             :                                                cmos_platform_probe);
    1473           1 :                 if (retval == 0)
    1474           0 :                         platform_driver_registered = true;
    1475             :         }
    1476             : 
    1477           1 :         if (retval == 0)
    1478           0 :                 return 0;
    1479             : 
    1480             : #ifdef  CONFIG_PNP
    1481             :         if (pnp_driver_registered)
    1482             :                 pnp_unregister_driver(&cmos_pnp_driver);
    1483             : #endif
    1484             :         return retval;
    1485             : }
    1486             : module_init(cmos_init);
    1487             : 
    1488           0 : static void __exit cmos_exit(void)
    1489             : {
    1490             : #ifdef  CONFIG_PNP
    1491             :         if (pnp_driver_registered)
    1492             :                 pnp_unregister_driver(&cmos_pnp_driver);
    1493             : #endif
    1494           0 :         if (platform_driver_registered)
    1495           0 :                 platform_driver_unregister(&cmos_platform_driver);
    1496           0 : }
    1497             : module_exit(cmos_exit);
    1498             : 
    1499             : 
    1500             : MODULE_AUTHOR("David Brownell");
    1501             : MODULE_DESCRIPTION("Driver for PC-style 'CMOS' RTCs");
    1502             : MODULE_LICENSE("GPL");

Generated by: LCOV version 1.14