1. 22 Mar, 2020 3 commits
    • Varun Wadekar's avatar
      Tegra: memctrl_v2: remove support to secure TZSRAM · 71376951
      Varun Wadekar authored
      
      
      This patch removes support to secure the on-chip TZSRAM memory for
      Tegra186 and Tegra194 platforms as the previous bootloader does that
      for them.
      
      Change-Id: I50c7b7f9694285fe31135ada09baed1cfedaaf07
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      71376951
    • Ken Chang's avatar
      Tegra: memctrl: map video memory as uncached · 9b51aa87
      Ken Chang authored
      
      
      Memmap video memory as uncached normal memory by adding flag
      'MT_NON_CACHEABLE' in mmap_add_dynamic_region().
      This improves the time taken for clearing the non-overlapping video
      memory:
      
      test conditions: 32MB memory size, EMC running at 1866MHz, t186
      1) without MT_NON_CACHEABLE: 30ms ~ 40ms
      <3>[  133.852885]  vpr-heap: update vpr base to 0x00000000c6000000, size=e000000
      <3>[  133.860471] _tegra_set_vpr_params[120]: begin
      <3>[  133.896481] _tegra_set_vpr_params[123]: end
      <3>[  133.908944]  vpr-heap: update vpr base to 0x00000000c6000000, size=c000000
      <3>[  133.916397] _tegra_set_vpr_params[120]: begin
      <3>[  133.956369] _tegra_set_vpr_params[123]: end
      <3>[  133.970394]  vpr-heap: update vpr base to 0x00000000c6000000, size=a000000
      <3>[  133.977934] _tegra_set_vpr_params[120]: begin
      <3>[  134.013874] _tegra_set_vpr_params[123]: end
      <3>[  134.025666]  vpr-heap: update vpr base to 0x00000000c6000000, size=8000000
      <3>[  134.033512] _tegra_set_vpr_params[120]: begin
      <3>[  134.065996] _tegra_set_vpr_params[123]: end
      <3>[  134.075465]  vpr-heap: update vpr base to 0x00000000c6000000, size=6000000
      <3>[  134.082923] _tegra_set_vpr_params[120]: begin
      <3>[  134.113119] _tegra_set_vpr_params[123]: end
      <3>[  134.123448]  vpr-heap: update vpr base to 0x00000000c6000000, size=4000000
      <3>[  134.130790] _tegra_set_vpr_params[120]: begin
      <3>[  134.162523] _tegra_set_vpr_params[123]: end
      <3>[  134.172413]  vpr-heap: update vpr base to 0x00000000c6000000, size=2000000
      <3>[  134.179772] _tegra_set_vpr_params[120]: begin
      <3>[  134.209142] _tegra_set_vpr_params[123]: end
      
      2) with MT_NON_CACHEABLE: 10ms ~ 18ms
      <3>[  102.108702]  vpr-heap: update vpr base to 0x00000000c6000000, size=e000000
      <3>[  102.116296] _tegra_set_vpr_params[120]: begin
      <3>[  102.134272] _tegra_set_vpr_params[123]: end
      <3>[  102.145839]  vpr-heap: update vpr base to 0x00000000c6000000, size=c000000
      <3>[  102.153226] _tegra_set_vpr_params[120]: begin
      <3>[  102.164201] _tegra_set_vpr_params[123]: end
      <3>[  102.172275]  vpr-heap: update vpr base to 0x00000000c6000000, size=a000000
      <3>[  102.179638] _tegra_set_vpr_params[120]: begin
      <3>[  102.190342] _tegra_set_vpr_params[123]: end
      <3>[  102.197524]  vpr-heap: update vpr base to 0x00000000c6000000, size=8000000
      <3>[  102.205085] _tegra_set_vpr_params[120]: begin
      <3>[  102.216112] _tegra_set_vpr_params[123]: end
      <3>[  102.224080]  vpr-heap: update vpr base to 0x00000000c6000000, size=6000000
      <3>[  102.231387] _tegra_set_vpr_params[120]: begin
      <3>[  102.241775] _tegra_set_vpr_params[123]: end
      <3>[  102.248825]  vpr-heap: update vpr base to 0x00000000c6000000, size=4000000
      <3>[  102.256069] _tegra_set_vpr_params[120]: begin
      <3>[  102.266368] _tegra_set_vpr_params[123]: end
      <3>[  102.273400]  vpr-heap: update vpr base to 0x00000000c6000000, size=2000000
      <3>[  102.280672] _tegra_set_vpr_params[120]: begin
      <3>[  102.290929] _tegra_set_vpr_params[123]: end
      
      Change-Id: I5f604064ce7b8b73ea9ad5860156ae5e2c6cc42a
      Signed-off-by: default avatarKen Chang <kenc@nvidia.com>
      9b51aa87
    • Varun Wadekar's avatar
      Tegra: include missing stdbool.h · a5bfcad8
      Varun Wadekar authored
      
      
      This patch includes the missing stdbool.h header from flowctrl.h
      and bpmp_ivc.c files.
      
      Change-Id: If60d19142b1cb8ae663fbdbdf1ffe45cbbdbc1b2
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      a5bfcad8
  2. 11 Mar, 2020 2 commits
    • Varun Wadekar's avatar
      Tegra: smmu: export handlers to read/write SMMU registers · 91dd7edd
      Varun Wadekar authored
      
      
      This patch exports the SMMU register read/write handlers for platforms.
      
      Change-Id: If92f0d3ce820e4997c090b48be7614407bb582da
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      91dd7edd
    • Pritesh Raithatha's avatar
      Tegra: smmu: remove context save sequence · a391d494
      Pritesh Raithatha authored
      
      
      SMMU and MC registers are saved as part of the System Suspend sequence.
      The register list includes some NS world SMMU registers that need to be
      saved by NS world software instead. All that remains as a result are
      the MC registers.
      
      This patch moves code to MC file as a result and renames all the
      variables and defines to use the MC prefix instead of SMMU. The
      Tegra186 and Tegra194 platform ports are updated to provide the MC
      context register list to the parent driver. The memory required for
      context save is reduced due to removal of the SMMU registers.
      
      Change-Id: I83a05079039f52f9ce91c938ada6cd6dfd9c843f
      Signed-off-by: default avatarPritesh Raithatha <praithatha@nvidia.com>
      a391d494
  3. 05 Mar, 2020 1 commit
    • Varun Wadekar's avatar
      Tegra: spe: use CONSOLE_T_BASE to save MMIO base address · 9e7e9867
      Varun Wadekar authored
      Commit ac71344e
      
       moved the base address
      for the MMIO aperture of the console inside the console_t struct. As
      a result, the driver should now save the MMIO base address to console_t
      at offset marked by the CONSOLE_T_BASE macro.
      
      This patch updates the SPE console driver to use the CONSOLE_T_BASE macro
      to save/access the MMIO base address.
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      Change-Id: I42afc2608372687832932269108ed642f218fd40
      9e7e9867
  4. 25 Feb, 2020 1 commit
  5. 20 Feb, 2020 2 commits
    • Varun Wadekar's avatar
      Tegra: spe: uninit console on a timeout · 8a47fe43
      Varun Wadekar authored
      
      
      There are chances a denial-of-service attack, if an attacker
      removes the SPE firmware from the system. The console driver
      would end up waiting for the firmware to respond indefinitely.
      The console driver must detect such scenarios and uninit the
      interface as a result.
      
      This patch adds a timeout to the interaction with the SPE
      firmware and uninits the interface if it times out.
      
      Change-Id: I06f27a858baed25711d41105b4110865f1a01727
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      8a47fe43
    • Varun Wadekar's avatar
      Tegra: bpmp_ipc: improve cyclomatic complexity · 21368290
      Varun Wadekar authored
      
      
      Code complexity is a good indication of maintainability versus
      testability of a piece of software.
      
      ISO26262 introduces the following thresholds:
      
          complexity < 10 is accepted
          10 <= complexity < 20 has to be justified
          complexity >= 20 cannot be accepted
      
      Rationale is that number of test cases to fully test a piece of
      software can (depending on the coverage metrics) grow exponentially
      with the number of branches in the software.
      
      This patch removes redundant conditionals from 'ipc_send_req_atomic'
      handler to reduce the McCabe Cyclomatic Complexity for this function
      
      Change-Id: I20fef79a771301e1c824aea72a45ff83f97591d5
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      21368290
  6. 31 Jan, 2020 2 commits
    • Varun Wadekar's avatar
      Tegra: bpmp: fix multiple MISRA issues · 64aa08fb
      Varun Wadekar authored
      
      
      This patch fixes violations for the following MISRA rules
      
      * Rule 5.7  "A tag name shall be a unique identifier"
      * Rule 10.1 "Operands shall not be of an inappropriate essential type"
      * Rule 10.3 "The value of an expression shall not be assigned to an object
                   with a narrower essential type or of a different essential type
                   category"
      * Rule 10.4 "Both operands of an operator in which the usual arithmetic
                   conversions are performed shall have the same essential type
                   category"
      * Rule 20.7 "Expressions resulting from the expansion of macro parameters
                   shall be enclosed in parentheses"
      * Rule 21.1 "#define and #undef shall not be used on a reserved identifier
                   or reserved macro name"
      
      Change-Id: I83cbe659c2d72e76dd4759959870b57c58adafdf
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      64aa08fb
    • Varun Wadekar's avatar
      Tegra: memctrl_v2: remove weakly defined TZDRAM setup handler · f561a179
      Varun Wadekar authored
      
      
      This patch removes the per-platform, weakly defined TZDRAM setup handler,
      as all affected platforms implement the actual handler.
      
      Change-Id: I95d04b2a771bc5d673e56b097d45c493fa388ee8
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      f561a179
  7. 23 Jan, 2020 1 commit
  8. 05 Sep, 2019 1 commit
  9. 15 Aug, 2019 1 commit
  10. 03 Apr, 2019 1 commit
  11. 05 Feb, 2019 1 commit
    • Varun Wadekar's avatar
      Tegra: spe: prepend '\r' to '\n' · 843d0aad
      Varun Wadekar authored
      
      
      This patch udpates the SPE console driver to prepend '\r' to
      '\n'. This fixes the alignment of prints seen by the host
      machines on their UART ports.
      
      Tested by collecting the logs from host PC using Cutecom
      
      Reported by: Mustafa Bilgen <mbilgen@nvidia.com>
      
      Change-Id: I6e0b412bd71ff5eb889582071df8c157da5175ed
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      843d0aad
  12. 31 Jan, 2019 9 commits
    • Varun Wadekar's avatar
      Tegra: bpmp: mark device "not present" on boot timeout · e6712cf5
      Varun Wadekar authored
      
      
      This patch updates the state machine to "not present" if the bpmp
      firmware is not found in the system during boot. The suspend
      handler also checks now if the interface exists, before updating
      the internal state machine.
      
      Reported by: Kalyani Chidambaram Vaidyanathan <kalyanic@nvidia.com>
      
      Change-Id: If8fd7f8e412bb603944555c24826855226e7f48c
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      e6712cf5
    • kalyani chidambaram's avatar
      Tegra210: clear PMC_DPD registers on resume · da0f4743
      kalyani chidambaram authored
      
      
      This patch clears the PMC's DPD registers on resuming from System
      Suspend, for all Tegra210 platforms that support the sc7entry-fw.
      
      Change-Id: I7881ef0a5f609ed28b158bc2f4016abea3c7f305
      Signed-off-by: default avatarkalyani chidambaram <kalyanic@nvidia.com>
      da0f4743
    • Varun Wadekar's avatar
      Tegra: bpmp: suspend/resume handlers · d37a1322
      Varun Wadekar authored
      
      
      This patch adds suspend and resume handlers for the BPMP
      interface. Mark the interface as "suspended" before entering
      System Suspend and verify that BPMP is alive on exit.
      
      Change-Id: I74ccbc86125079b46d06360fc4c7e8a5acfbdfb2
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      d37a1322
    • Varun Wadekar's avatar
      Tegra: support for System Suspend using sc7entry-fw binary · 3ca3c27c
      Varun Wadekar authored
      
      
      This patch adds support to enter System Suspend on Tegra210 platforms
      without the traditional BPMP firmware. The BPMP firmware will no longer
      be supported on Tegra210 platforms and its functionality will be
      divided across the CPU and sc7entry-fw.
      
      The sc7entry-fw takes care of performing the hardware sequence required
      to enter System Suspend (SC7 power state) from the COP. The CPU is required
      to load this firmware to the internal RAM of the COP and start the sequence.
      The CPU also make sure that the COP is off after cold boot and is only
      powered on when we want to start the actual System Suspend sequence.
      
      The previous bootloader loads the firmware to TZDRAM and passes its base and
      size as part of the boot parameters. The EL3 layer is supposed to sanitize
      the parameters before touching the firmware blob.
      
      To assist the warmboot code with the PMIC discovery, EL3 is also supposed to
      program PMC's scratch register #210, with appropriate values. Without these
      settings the warmboot code wont be able to get the device out of System
      Suspend.
      
      Change-Id: I5a7b868512dbfd6cfefd55acf3978a1fd7ebf1e2
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      3ca3c27c
    • Varun Wadekar's avatar
      Tegra: pmc: helper function to find last ON CPU · a7a63e0e
      Varun Wadekar authored
      
      
      This patch adds a helper function to find the last standing CPU
      in a cluster.
      
      Change-Id: Id018f1958f458c772c7b0c52af8ddf7532b1cec5
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      a7a63e0e
    • Varun Wadekar's avatar
      Tegra: flowctrl: helper functions to assist with cluster power states · 1483d4e0
      Varun Wadekar authored
      
      
      This patch adds helper functions to help platforms with cluster state entry
      and exit decisions.
      
      * tegra_fc_ccplex_pgexit_lock(): lock CPU power ungate
      * tegra_fc_ccplex_pgexit_unlock(): unlock CPU power ungate
      * tegra_fc_is_ccx_allowed(): CCx state entry allowed on this CPU?
      
      Change-Id: I6490d34bf380dc03ae203eb3028f61984f06931c
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      1483d4e0
    • Varun Wadekar's avatar
      Tegra: bpmp: remove bpmp init failed error print · fdb82faa
      Varun Wadekar authored
      
      
      This patch removes the error print displayed when bpmp init
      fails. On platforms that do not load the bpmp firmware, this
      print is seen on every cluster idle and powerdown request,
      cluttering the logs.
      
      Change-Id: I9e30007a913080406052fc32d5360ff70a019d75
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      fdb82faa
    • Varun Wadekar's avatar
      Tegra: flowctrl: support to enable/disable WDT's legacy FIQ routing · 2ed09b1e
      Varun Wadekar authored
      
      
      On earlier Tegra platforms, e.g. Tegra210, the watchdog timer's FIQ interrupt
      is not direclty wired to the GICD. It goes to the flow controller instead, for
      power state management. But the flow controller can route the FIQ to the GICD,
      as a PPI, which can then get routed to the target CPU.
      
      This patch adds routines to enable/disable routing the legacy FIQ used by
      the watchdog timers, to the GICD.
      
      Change-Id: Idd07c88c8d730b5f0e93e3a6e4fdc59bdcb2161b
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      2ed09b1e
    • steven kao's avatar
      Tegra: bpmp_ipc: support to enable/disable module clocks · ff605ba2
      steven kao authored
      
      
      This patch adds support to the bpmp_ipc driver to allow clients to
      enable/disable clocks to hardware blocks. Currently, the API only
      supports SE devices.
      
      Change-Id: I9a361e380c0bcda59f5a92ca51c86a46555b2e90
      Signed-off-by: default avatarsteven kao <skao@nvidia.com>
      ff605ba2
  13. 23 Jan, 2019 11 commits
    • Varun Wadekar's avatar
      Tegra: memctrl_v2: remove usage of ENABLE_SMMU_DEVICE config · fc5adf7d
      Varun Wadekar authored
      
      
      This patch removes the usage of this platform config, as it is always
      enabled by all the supported platforms.
      
      Change-Id: Ie7adb641adeb3604b177b6960b797722d60addfa
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      fc5adf7d
    • Varun Wadekar's avatar
      Tegra: spe: shared console for Tegra platforms · dd20f5b3
      Varun Wadekar authored
      
      
      There are Tegra platforms which have limited UART ports and so
      all the components have to share the console. The SPE helps out
      by collecting all the logs in such cases and prints them on the
      shared UART port.
      
      This patch adds a driver to communicate with the SPE driver, which
      in turn provides the console.
      
      Change-Id: Ie750520b936b8bed0ab1d876f03fc0a3490a85a3
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      dd20f5b3
    • Varun Wadekar's avatar
      Tegra: smmu: change exit criteria for context size calculation · 2ad1bddc
      Varun Wadekar authored
      
      
      Tegra SoCs currently do not have a SMMU register at address 0xFFFFFFFF.
      This patch changes the search criteria, to look for this marker, to
      calculate the size of the saved context.
      
      Change-Id: I15d91945ecb78267f91c45f37985dbb2327ca3ae
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      2ad1bddc
    • Steven Kao's avatar
      Tegra: memctrl_v2: platform handler for TZDRAM setup · c63ec263
      Steven Kao authored
      
      
      The Tegra memctrl driver sets up the TZDRAM fence during boot and
      system suspend exit. This patch provides individual platforms with
      handlers to perform custom steps during TZDRAM setup.
      
      Change-Id: Iee094d6ca189c6dd24f1147003c33c99ff3a953b
      Signed-off-by: default avatarSteven Kao <skao@nvidia.com>
      c63ec263
    • Varun Wadekar's avatar
      Tegra: bpmp: return error if BPMP init fails · d7be5e2e
      Varun Wadekar authored
      
      
      This patch returns error if BPMP initialization fails. The platform
      code marks the cluster as "runnning" since we wont be able to get
      it into the low power state without BPMP.
      
      Change-Id: I86f51d478626240bb7b4ccede8907674290c5dc1
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      d7be5e2e
    • Steven Kao's avatar
      Tegra: rename secure scratch register macros · 601a8e54
      Steven Kao authored
      
      
      This patch renames all the secure scratch registers to reflect their
      usage.
      
      This is a list of all the macros being renamed:
      
      - SECURE_SCRATCH_RSV1_* -> SCRATCH_RESET_VECTOR_*
      - SECURE_SCRATCH_RSV6 -> SCRATCH_SECURE_BOOTP_FCFG
      - SECURE_SCRATCH_RSV11_* -> SCRATCH_SMMU_TABLE_ADDR_*
      - SECURE_SCRATCH_RSV53_* -> SCRATCH_BOOT_PARAMS_ADDR_*
      - SECURE_SCRATCH_RSV55_* -> SCRATCH_TZDRAM_ADDR_*
      
      NOTE: Future SoCs will have to define these macros to
            keep the drivers functioning.
      
      Change-Id: Ib3ba40dd32e77b92b47825f19c420e6fdfa8b987
      Signed-off-by: default avatarSteven Kao <skao@nvidia.com>
      601a8e54
    • Varun Wadekar's avatar
      Tegra: memctrl_v2: platform handler for TZDRAM settings · d5bd0de6
      Varun Wadekar authored
      
      
      The Tegra memctrl driver sets up the TZDRAM fence during boot and
      system suspend exit. This patch provides individual platforms with
      handlers to perform platform specific steps, e.g. enable encryption,
      save base/size to secure scratch registers.
      
      Change-Id: Ifaa2e0eac20b50f77ec734256544c36dd511bd63
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      d5bd0de6
    • Varun Wadekar's avatar
      Tegra: bpmp_ipc: IPC driver to communicate with BPMP firmware · 26e2b93a
      Varun Wadekar authored
      
      
      This patch adds the driver to communicate with the BPMP firmware on Tegra
      SoCs, starting Tegra186. BPMP firmware is responsible for clock enable/
      disable requests, module resets among other things.
      
      MRQ is short for Message ReQuest. This is the general purpose, multi channel
      messaging protocol that is widely used to communicate with BPMP. This is further
      divided into a common high level protocol and a peer-specific low level protocol.
      The higher level protocol specifies the peer identification, channel definition
      and allocation, message structure, message semantics and message dispatch process
      whereas the lower level protocol defines actual message transfer implementation
      details. Currently, BPMP supports two lower level protocols - Token Mail Operations
      (TMO), IVC Mail Operations (IMO).
      
      This driver implements the IMO protocol. IMO is implemented using the IVC (Inter-VM
      Communication) protocol which is a lockless, shared memory messaging queue management
      protocol.
      
      The IVC peer is expected to perform the following as part of establishing a connection
      with BPMP.
      
      1. Initialize the channels with tegra_ivc_init() or its equivalent.
      2. Reset the channel with tegra_ivc_channel_reset. The peer should also ensure that
         BPMP is notified via the doorbell.
      3. Poll until the channel connection is established [tegra_ivc_channel_notified() return
         0]. Interrupt BPMP with doorbell each time after tegra_ivc_channel_notified() return
         non zero.
      
      The IPC driver currently supports reseting the GPCDMAand XUSB_PADCTL hardware blocks. In
      future, more hardware blocks would be supported.
      
      Change-Id: I52a4bd3a853de6c4fa410904b6614ff1c63df364
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      26e2b93a
    • Steven Kao's avatar
      Tegra: memctrl_v2: allow CPU accesses to TZRAM · d6306d14
      Steven Kao authored
      
      
      This patch enables CPU access configuration register to allow
      accesses to the TZRAM aperture on chips after Tegra186.
      
      Change-Id: I0898582f8bd6fd35360ecf8ca5cee21fe35f7aab
      Signed-off-by: default avatarSteven Kao <skao@nvidia.com>
      d6306d14
    • Harvey Hsieh's avatar
      Tegra: memctrl_v2: pack TZDRAM base to RSVD55_SCRATCH · b886c7c5
      Harvey Hsieh authored
      
      
      This patch saves the TZDRAM_BASE value to secure RSVD55
      scratch register. The warmboot code uses this register to
      restore the settings on exiting System Suspend.
      
      Change-Id: Id76175c2a7d931227589468511365599e2908411
      Signed-off-by: default avatarHarvey Hsieh <hhsieh@nvidia.com>
      b886c7c5
    • Puneet Saxena's avatar
      Tegra: memctrl_v2: platform handlers to program MSS · ab2eb455
      Puneet Saxena authored
      
      
      Introduce platform handlers to program the MSS settings.
      This allows the current driver to scale to future chips.
      
      Change-Id: I40a27648a1a3c73b1ce38dafddc1babb6f0b0d9b
      Signed-off-by: default avatarPuneet Saxena <puneets@nvidia.com>
      Signed-off-by: default avatarKrishna Reddy <vdumpa@nvidia.com>
      ab2eb455
  14. 18 Jan, 2019 4 commits