1. 15 May, 2018 3 commits
    • Derek Basehore's avatar
      rockchip/rk3399: Add watchdog support in pmusram · 5b886432
      Derek Basehore authored
      
      
      To catch early hangs in resume, this sets up the watchdog before
      anything else in the pmusram code (ignoring setting up the stack...).
      This uses hard coded settings for the watchdog until the proper
      watchdog restore later on in the firmware/kernel.
      
      This also restores the old watchdog register values before the PLLs
      are restored to make sure we don't temporarily switch over to a 1/3s
      timeout on the watchdog when the pclk_wdt goes from 4MHz to 100MHz.
      
      Change-Id: I8f7652089a88783271b17482117b4609330abe80
      Signed-off-by: default avatarDerek Basehore <dbasehore@chromium.org>
      5b886432
    • Lin Huang's avatar
      rockchip/rk3399: Split M0 binary into two · ff4735cf
      Lin Huang authored
      
      
      All the m0 code run in SRAM before, but we need to watch PMU_POWER_ST
      when SOC enter into FSM, and SRAM will shutdown during this time, so
      this code need run in PMUSRAM. But PMUSRAM only 8K space, we can not
      put all the m0 binary into PMUSRAM, Split the M0 binary into two, dram
      part still run in SRAM, and suspend part run in PMUSRAM.
      
      Change-Id: Ie08bdf3e2b8838f12b9297fe60ab0aad219684b1
      Signed-off-by: default avatarLin Huang <hl@rock-chips.com>
      ff4735cf
    • Lin Huang's avatar
      rockchip/rk3399: improve pmu powermode configure when suspend · 133598cb
      Lin Huang authored
      
      
      we need to enable PMU_WKUP_RST_EN for pmu powermode configure, since
      enable wakeup reset will hold the soc status, so the SOC will not affect
      by some power or other single glitch when resume, and keep the soc in the
      right status. And it not need to enable DDRIO_RET_HW_DE_REQ, the ddr resume
      will do it manual.
      
      Change-Id: Ib4af897ffb3cb63dc2aa9a6002e5d9ef86ee4a49
      Signed-off-by: default avatarLin Huang <hl@rock-chips.com>
      133598cb
  2. 26 Mar, 2018 1 commit
  3. 20 Mar, 2018 1 commit
    • Lin Huang's avatar
      rockchip/rk3399: save/restore watchdog register correctly · 56bf9407
      Lin Huang authored
      
      
      there are two fix for save/restore watchdog register:
      1. watchdog plck will shutdown after secure_watchdog_disable(), so need
         to save register before it and restore after secure_watchdog_enable().
      2. need write 0x76 to cnt_restart to keep watchdog alive when restore
         watchdog register.
      
      Change-Id: I1f6fbceae22186e3b72a87df6332a110adf37479
      Signed-off-by: default avatarLin Huang <hl@rock-chips.com>
      56bf9407
  4. 30 Jan, 2018 1 commit
    • Caesar Wang's avatar
      rockchip/rk3399: Fix memory corruptions or illegal memory access · de3c3007
      Caesar Wang authored
      
      
      Coverity scan done for the coreboot project found the issue:
      Coverity (*** CID 1385418: Memory - illegal accesses (OVERRUN))
      Coverity (*** CID 1385419: Memory - corruptions  (OVERRUN))
      
      Fix the Converity error issue with store_cru[] loop needs to be one
      element bigger.
      
      Fixes: ARM-software/tf-issues#544
      
      Change-Id: I420f0a660b24baaa5fc5e78fca242cf750c9bbc7
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      de3c3007
  5. 24 Jan, 2018 3 commits
  6. 29 Aug, 2017 5 commits
  7. 14 Jul, 2017 1 commit
  8. 30 Jun, 2017 1 commit
    • Caesar Wang's avatar
      rockchip/rk3399: fixes the typo and the WARNINGS during suspend/resume · c3710ee7
      Caesar Wang authored
      
      
      This patch fixes the two things as follows:
      
      1) rk3399_flash_l2_b" seems to be a typo. That's "flush", not "flash".
      
      2) fixes the warnings log.
      We always hit the warnings thing during the suspend, as below log:
      ..
      [   51.022334] CPU5: shutdown
      [   51.025069] psci: CPU5 killed.
      INFO:    sdram_params->ddr_freq = 928000000
      WARNING: rk3399_flash_l2_b:reg 28830380,wait
      
      When the L2 completes the clean and invalidate sequence, it asserts the
      L2FLUSHDONE signal. The SoC can now deassert L2FLUSHREQ signal and then
      the L2 deasserts L2FLUSHDONE.
      
      Then, a loop without a delay isn't really great to measure time. We should
      probably add a udelay(10) or so in there and then maybe replace the WARN()
      after the loop. In the actual tests, the L2 cache will take ~4ms by
      default for big cluster.
      
      In the real world that give 10ms for the enough margin, like the
      ddr/cpu/cci frequency and other factors that will affect it.
      
      Change-Id: I55788c897be232bf72e8c7b0e10cf9b06f7aa50d
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      c3710ee7
  9. 08 Jun, 2017 2 commits
  10. 03 May, 2017 1 commit
  11. 01 Mar, 2017 1 commit
  12. 24 Feb, 2017 4 commits
  13. 07 Nov, 2016 2 commits
    • Caesar Wang's avatar
      rockchip: remove no needed code for rk3399 · 06077161
      Caesar Wang authored
      
      
      We have do something for clocks gate.
      
      Fox example as the below:
      susped:
      clk_gate_con_save();
      clk_gate_con_disable();
      
      resume:
      clk_gate_con_restore();
      --
      
      SO, add the plls_suspend_prepare() and plls_resume_finish() are not
      necessary to S2R, that will save S2R time if remove them.
      
      BRANCH=none
      BUG=chrome-os-partner:58870,chrome-os-partner:55934
      TEST=build kevin, two dogfooders with suspend_stress_test
      passing 3000 cycles and still going on.
      
      Change-Id: Icfbabc0b3ea8d2b5108d4f3de99a803b6d459669
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      06077161
    • Caesar Wang's avatar
      rockchip: disable watchdog during suspend · a14e0916
      Caesar Wang authored
      
      
      The CA53 and CM0 WDT clock gating in rk3399 SGRF, and ATF is in charge of
      it because the kernel can't touch SGRF.
      
      Basically the WDT didn't stop at suspend time, it just switched from the
      24M to the 32k clock. That meant that the WDT would fire if you slept for
      long enough. In other word, the watchdog timer over count will increase to
      750 (24*1000/32) times.
      The RK3399 HW watchdog interval is 21 seconds. When machine enters the
      suspend, the watchdog will reset the system after 35.7 (750/21) hours.
      
      BUG=chrome-os-partner:59257
      TEST=daisydog checked and set value, powerd_dbus_suspend to verify.
      
      Change-Id: I88bb2a05b7d67d5ffd292f9d05d033ae9a6a3593
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      a14e0916
  14. 26 Oct, 2016 1 commit
  15. 24 Oct, 2016 2 commits
    • Caesar Wang's avatar
      rockchip: clear the power mode status via M0 · 7ac52006
      Caesar Wang authored
      
      
      Due to the PMU design, the PMU may not clear the WAKEUP bit after
      wakeup, therefore, the state machine at the power mode may enter
      the infinite loop during WFI.
      
      There is a solution that we can use the M0 to monitor the WAKEUP
      bit and clear it during power mode, then the state machine will be
      recovered immediately. Then, the DUT can exit the WFI normally.
      
      Change-Id: I303628553b728c214bf2d436bd3122032b5e669c
      Signed-off-by: default avatarXing Zheng <zhengxing@rock-chips.com>
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      7ac52006
    • Caesar Wang's avatar
      rockchip: optimize the link mechanism for SRAM code · ec693569
      Caesar Wang authored
      
      
      Add the common extra.ld.S and customized rk3399.ld.S to extend
      to more features for different platforms.
      For example, we can add SRAM section and specific address to
      load there if we need it, and the common bl31.ld.S not need to
      be modified.
      
      Therefore, we can remove the unused codes which copying explicitly
      from the function pmusram_prepare(). It looks like more clear.
      
      Change-Id: Ibffa2da5e8e3d1d2fca80085ebb296ceb967fce8
      Signed-off-by: default avatarXing Zheng <zhengxing@rock-chips.com>
      Signed-off-by: default avatarCaesar Wang <wxt@rock-chips.com>
      ec693569
  16. 13 Sep, 2016 1 commit
    • Caesar Wang's avatar
      rockchip: fixes the gic panic for rk3399 resume · 0587788a
      Caesar Wang authored
      We make sure the resuming of gic need to be enabled.
      Otherwise, The resume will hit the below panic.
      ...
      [   24.230541] CPU0: update max cpu_capacity 451
      [   24.236029] CPU5: update max cpu_capacity 1024
      [   24.236046] CPU4: shutdown
      [   24.243205] psci: CPU4 killed.
      [   24.258730] CPU5: shutdown
      [   24.261472] psci: CPU5 killed.
      [   24.270417] GIC: unable to set SRE (disabled at EL2), panic ahead
      [   24.270417] cat[7801]: undefined instruction: pc=ffffffc0004e65d0
      [   24.270417] Code: b0003940 91274400 97f871af d2801e00 (d5184600)
      [   24.270417] Internal error: Oops - undefined instruction: 0 [#1] PREEMPT
      
      Change-Id: Ie9542c8d5768ba0accfa073453da8bfe06d4f921
      0587788a
  17. 09 Sep, 2016 3 commits
    • Caesar Wang's avatar
      rockchip: fixes some typo · 7e1bedb6
      Caesar Wang authored
      As the checkpatch reports the warning or error.
      
      plat/rockchip/common/plat_pm.c:96:
      ERROR: do not set execute permissions for source files
      plat/rockchip/rk3399/drivers/pmu/pmu.c:294:
      ERROR: do not set execute permissions for source files
      
      plat/rockchip/common/plat_pm.c:286: WARNING: line over 80 characters
      plat/rockchip/common/plat_pm.c:287: WARNING: line over 80 characters
      
      Change-Id: Ib347da21c56551c31df3f90f03777b13c75d5c26
      7e1bedb6
    • Caesar Wang's avatar
      rockchip: set gpio2 ~ gpio4 to input and pull none mode · 2bff35bb
      Caesar Wang authored
      For save power cosumption, if gpio power supply shut down, we need to
      set gpio2 ~ gpio4 to input and HiZ status when suspend, and recovery
      they status when rusume. we do it base on apio pass from loader.
      
      Change-Id: I59fd2395e5e37e63425472a39f519822c9197e4c
      2bff35bb
    • Caesar Wang's avatar
      rockchip: support disable/enable specific gpio when suspend/resume · e550c631
      Caesar Wang authored
      some specific board need to disable/enable specific gpio when
      suspend/resume, so we add this function, bootloader can pass the
      specific gpio, and we can handle these gpios in bl31 suspend/resuem
      function.
      
      Change-Id: I373b03ef9202ee4a05a2b9caacdfa01b47ee2177
      e550c631
  18. 08 Sep, 2016 1 commit
    • Tony Xie's avatar
      rockchip: fix the scu idle for rk3399 · 63ebf051
      Tony Xie authored
      As rk3399 reported the d8/octane scores drop 10% with cpu idle.
      The root cause is thc cpu cluster enter the slow mode.
      We don't need switch the clock to 24MHz if cpu cluster enter the
      retention mode. In order to improve performance, it just needs for
      cluster enter powering off mode.
      
      Also, we shouldn't do anything for hlvl if the system is off.
      
      Change-Id: I2a02962a01343abd0cba47ed63192c1cdf88b119
      63ebf051
  19. 25 Aug, 2016 3 commits
  20. 24 Aug, 2016 1 commit
    • Caesar Wang's avatar
      rockchip: on rk3399 init the PMU counts at boot; set 24M/32k properly · 0786d688
      Caesar Wang authored
      In a previous change we mistakenly thought that PMU_24M_EN_CFG directly
      controlled whether the PMU counts ran off the 32k vs. 24M clock.
      Apparently that's not true.  Real logic is now documented in code.
      
      Also in the previous change we mistaknely though that PMU_24M_EN_CFG was
      normally supposed to be 1 and we should "restore" it at resume time.
      This is a terrible idea and made the system totally unreliable after
      resume.  Apparently PMU_24M_EN_CFG should always be 0 with all the
      current code and settings.
      
      Let's fix the above two problems.  While we're changing all of this,
      let's also:
      
      1. Init at boot time.  Many of these counts are used when the system is
         running normally.  We want the behavior at boot to match the behavior
         after suspend/resume.
      
      2. Init CPU counts to be 1 us.  Although old code was trying to set this
         to 1 ms (1000x slower) at suspend/resume time, we've been testing the
         kernel with 1 us for a long time now.  That's because the kernel (at
         boot time) set these values to 24.  Let's keep at 24 until we know
         that's wrong.
      
      3. Init GPU counts to be 1 us.  Old code wasn't touching the GPU, but as
         documented in comments it makes sense to init here.  Do it.
      
      4. Document the crap out of this code, since the SoC's behavior is
         confusing and poorly documented in the TRM.
      
      5. Increase some stabilization times to 30 ms (from 3 ms).  It's unclear
         that a full 30 ms is needed, but let's be safe for now.
      
      This also inits the counts for the GPU.
      
      (Thanks to Doug's patch that come from https://crosreview.com/372381)
      
      Change-Id: Id1bc159a5a99916aeab043895e5c4585c4adab22
      0786d688
  21. 11 Aug, 2016 2 commits