linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [bug report] soc: ti: pm33xx: AM437X: Add rtc_only with ddr in self-refresh support
@ 2019-06-12 11:36 Dan Carpenter
  2019-06-13 11:45 ` Keerthy
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2019-06-12 11:36 UTC (permalink / raw)
  To: j-keerthy, Dave Gerlach; +Cc: linux-arm-kernel

Hello Keerthy,

The patch 5a99ae0092fe: "soc: ti: pm33xx: AM437X: Add rtc_only with
ddr in self-refresh support" from Apr 3, 2019, leads to the following
static checker warnings:

drivers/soc/ti/pm33xx.c:254 am33xx_pm_begin() warn: 'nvmem' is an error pointer or valid
drivers/soc/ti/pm33xx.c:293 am33xx_pm_end() warn: curly braces intended?
drivers/soc/ti/pm33xx.c:417 am33xx_pm_rtc_setup() warn: 'nvmem' is an error pointer or valid

drivers/soc/ti/pm33xx.c
   247  static int am33xx_pm_begin(suspend_state_t state)
   248  {
   249          int ret = -EINVAL;
   250          struct nvmem_device *nvmem;
   251  
   252          if (state == PM_SUSPEND_MEM && pm_ops->check_off_mode_enable()) {
   253                  nvmem = devm_nvmem_device_get(&omap_rtc->dev,
   254                                                "omap_rtc_scratch0");
   255                  if (nvmem)
                            ^^^^^
This should be if (!IS_ERR(nvmem)).

   256                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4,
   257                                             (void *)&rtc_magic_val);
   258                  rtc_only_idle = 1;
   259          } else {
   260                  rtc_only_idle = 0;
   261          }
   262  
   263          switch (state) {
   264          case PM_SUSPEND_MEM:
   265                  ret = m3_ipc->ops->prepare_low_power(m3_ipc, WKUP_M3_DEEPSLEEP);
   266                  break;
   267          case PM_SUSPEND_STANDBY:
   268                  ret = m3_ipc->ops->prepare_low_power(m3_ipc, WKUP_M3_STANDBY);
   269                  break;
   270          }
   271  
   272          return ret;
   273  }
   274  
   275  static void am33xx_pm_end(void)
   276  {
   277          u32 val = 0;
   278          struct nvmem_device *nvmem;
   279  
   280          nvmem = devm_nvmem_device_get(&omap_rtc->dev, "omap_rtc_scratch0");

Does this need error handling?

   281          m3_ipc->ops->finish_low_power(m3_ipc);
   282          if (rtc_only_idle) {
   283                  if (retrigger_irq)

We need curly braces for this if statement.

   284                          /*
   285                           * 32 bits of Interrupt Set-Pending correspond to 32
   286                           * 32 interrupts. Compute the bit offset of the
   287                           * Interrupt and set that particular bit
   288                           * Compute the register offset by dividing interrupt
   289                           * number by 32 and mutiplying by 4
   290                           */
   291                          writel_relaxed(1 << (retrigger_irq & 31),
   292                                         gic_dist_base + GIC_INT_SET_PENDING_BASE
   293                                         + retrigger_irq / 32 * 4);
   294                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4,
   295                                             (void *)&val);
   296          }
   297  
   298          rtc_only_idle = 0;
   299  }

[ snip ]

   401  static int am33xx_pm_rtc_setup(void)
   402  {
   403          struct device_node *np;
   404          unsigned long val = 0;
   405          struct nvmem_device *nvmem;
   406  
   407          np = of_find_node_by_name(NULL, "rtc");
   408  
   409          if (of_device_is_available(np)) {
   410                  omap_rtc = rtc_class_open("rtc0");
   411                  if (!omap_rtc) {
   412                          pr_warn("PM: rtc0 not available");
   413                          return -EPROBE_DEFER;
   414                  }
   415  
   416                  nvmem = devm_nvmem_device_get(&omap_rtc->dev,
   417                                                "omap_rtc_scratch0");
   418                  if (nvmem) {

if (!IS_ERR(nvmem)) {

   419                          nvmem_device_read(nvmem, RTC_SCRATCH_MAGIC_REG * 4,
   420                                            4, (void *)&rtc_magic_val);
   421                          if ((rtc_magic_val & 0xffff) != RTC_REG_BOOT_MAGIC)
   422                                  pr_warn("PM: bootloader does not support rtc-only!\n");
   423  
   424                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4,
   425                                             4, (void *)&val);
   426                          val = pm_sram->resume_address;
   427                          nvmem_device_write(nvmem, RTC_SCRATCH_RESUME_REG * 4,
   428                                             4, (void *)&val);
   429                  }
   430          } else {
   431                  pr_warn("PM: no-rtc available, rtc-only mode disabled.\n");
   432          }
   433  
   434          return 0;
   435  }

regards,
dan carpenter

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] soc: ti: pm33xx: AM437X: Add rtc_only with ddr in self-refresh support
  2019-06-12 11:36 [bug report] soc: ti: pm33xx: AM437X: Add rtc_only with ddr in self-refresh support Dan Carpenter
@ 2019-06-13 11:45 ` Keerthy
  0 siblings, 0 replies; 2+ messages in thread
From: Keerthy @ 2019-06-13 11:45 UTC (permalink / raw)
  To: Dan Carpenter, Dave Gerlach; +Cc: linux-arm-kernel



On 12/06/19 5:06 PM, Dan Carpenter wrote:
> Hello Keerthy,
> 
> The patch 5a99ae0092fe: "soc: ti: pm33xx: AM437X: Add rtc_only with
> ddr in self-refresh support" from Apr 3, 2019, leads to the following
> static checker warnings:

Thanks Dan. I will post a patch to fix these.

> 
> drivers/soc/ti/pm33xx.c:254 am33xx_pm_begin() warn: 'nvmem' is an error pointer or valid
> drivers/soc/ti/pm33xx.c:293 am33xx_pm_end() warn: curly braces intended?
> drivers/soc/ti/pm33xx.c:417 am33xx_pm_rtc_setup() warn: 'nvmem' is an error pointer or valid
> 
> drivers/soc/ti/pm33xx.c
>     247  static int am33xx_pm_begin(suspend_state_t state)
>     248  {
>     249          int ret = -EINVAL;
>     250          struct nvmem_device *nvmem;
>     251
>     252          if (state == PM_SUSPEND_MEM && pm_ops->check_off_mode_enable()) {
>     253                  nvmem = devm_nvmem_device_get(&omap_rtc->dev,
>     254                                                "omap_rtc_scratch0");
>     255                  if (nvmem)
>                              ^^^^^
> This should be if (!IS_ERR(nvmem)).
> 
>     256                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4,
>     257                                             (void *)&rtc_magic_val);
>     258                  rtc_only_idle = 1;
>     259          } else {
>     260                  rtc_only_idle = 0;
>     261          }
>     262
>     263          switch (state) {
>     264          case PM_SUSPEND_MEM:
>     265                  ret = m3_ipc->ops->prepare_low_power(m3_ipc, WKUP_M3_DEEPSLEEP);
>     266                  break;
>     267          case PM_SUSPEND_STANDBY:
>     268                  ret = m3_ipc->ops->prepare_low_power(m3_ipc, WKUP_M3_STANDBY);
>     269                  break;
>     270          }
>     271
>     272          return ret;
>     273  }
>     274
>     275  static void am33xx_pm_end(void)
>     276  {
>     277          u32 val = 0;
>     278          struct nvmem_device *nvmem;
>     279
>     280          nvmem = devm_nvmem_device_get(&omap_rtc->dev, "omap_rtc_scratch0");
> 
> Does this need error handling?
> 
>     281          m3_ipc->ops->finish_low_power(m3_ipc);
>     282          if (rtc_only_idle) {
>     283                  if (retrigger_irq)
> 
> We need curly braces for this if statement.
> 
>     284                          /*
>     285                           * 32 bits of Interrupt Set-Pending correspond to 32
>     286                           * 32 interrupts. Compute the bit offset of the
>     287                           * Interrupt and set that particular bit
>     288                           * Compute the register offset by dividing interrupt
>     289                           * number by 32 and mutiplying by 4
>     290                           */
>     291                          writel_relaxed(1 << (retrigger_irq & 31),
>     292                                         gic_dist_base + GIC_INT_SET_PENDING_BASE
>     293                                         + retrigger_irq / 32 * 4);
>     294                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4,
>     295                                             (void *)&val);
>     296          }
>     297
>     298          rtc_only_idle = 0;
>     299  }
> 
> [ snip ]
> 
>     401  static int am33xx_pm_rtc_setup(void)
>     402  {
>     403          struct device_node *np;
>     404          unsigned long val = 0;
>     405          struct nvmem_device *nvmem;
>     406
>     407          np = of_find_node_by_name(NULL, "rtc");
>     408
>     409          if (of_device_is_available(np)) {
>     410                  omap_rtc = rtc_class_open("rtc0");
>     411                  if (!omap_rtc) {
>     412                          pr_warn("PM: rtc0 not available");
>     413                          return -EPROBE_DEFER;
>     414                  }
>     415
>     416                  nvmem = devm_nvmem_device_get(&omap_rtc->dev,
>     417                                                "omap_rtc_scratch0");
>     418                  if (nvmem) {
> 
> if (!IS_ERR(nvmem)) {
> 
>     419                          nvmem_device_read(nvmem, RTC_SCRATCH_MAGIC_REG * 4,
>     420                                            4, (void *)&rtc_magic_val);
>     421                          if ((rtc_magic_val & 0xffff) != RTC_REG_BOOT_MAGIC)
>     422                                  pr_warn("PM: bootloader does not support rtc-only!\n");
>     423
>     424                          nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4,
>     425                                             4, (void *)&val);
>     426                          val = pm_sram->resume_address;
>     427                          nvmem_device_write(nvmem, RTC_SCRATCH_RESUME_REG * 4,
>     428                                             4, (void *)&val);
>     429                  }
>     430          } else {
>     431                  pr_warn("PM: no-rtc available, rtc-only mode disabled.\n");
>     432          }
>     433
>     434          return 0;
>     435  }
> 
> regards,
> dan carpenter
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-06-13 11:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-12 11:36 [bug report] soc: ti: pm33xx: AM437X: Add rtc_only with ddr in self-refresh support Dan Carpenter
2019-06-13 11:45 ` Keerthy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).