1. 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
  2. 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
  3. 23 Jan, 2020 1 commit
  4. 05 Sep, 2019 1 commit
  5. 15 Aug, 2019 1 commit
  6. 03 Apr, 2019 1 commit
  7. 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
  8. 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
  9. 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
  10. 18 Jan, 2019 9 commits
    • Harvey Hsieh's avatar
      Tegra: memctrl: clean MC INT status before exit to bootloader · 650d9c52
      Harvey Hsieh authored
      
      
      This patch cleans the Memory controller's interrupt status
      register, before exiting to the non-secure world during
      cold boot. This is required as we observed that the MC's
      arbitration bit is set before exiting the secure world.
      
      Change-Id: Iacd01994d03b3b9cbd7b8a57fe7ab5b04e607a9f
      Signed-off-by: default avatarHarvey Hsieh <hhsieh@nvidia.com>
      650d9c52
    • Harvey Hsieh's avatar
      Tegra: memctrl_v2: pack TZDRAM base into SCRATCH54_LO · 70da35b0
      Harvey Hsieh authored
      
      
      This patch moves the TZDRAM base address to SCRATCH55_LO due
      to security concerns. The HI and LO address bits are packed
      into SCRATCH55_LO for the warmboot firmware to restore.
      SCRATCH54_HI is still being used for backward compatibility,
      but would be removed eventually.
      
      The scratch registers are populated as:
      * RSV55_0 = CFG1[12:0] | CFG0[31:20]
      * RSV55_1 = CFG3[1:0]
      * RSV54_1 = CFG1[12:0]
      
      Change-Id: Idc20d165d8117488010fcc8dfd946f7ad475da58
      Signed-off-by: default avatarHarvey Hsieh <hhsieh@nvidia.com>
      70da35b0
    • Peter De Schrijver's avatar
      Tegra: bpmp: Increase timeout to 2ms · c09c63ee
      Peter De Schrijver authored
      
      
      To deal with upcoming EMC periodic compensation, increase the BPMP timeout
      to 2ms.
      
      Change-Id: I8572c031168defd15504d905c4d625f44dd7fa3d
      Signed-off-by: default avatarPeter De Schrijver <pdeschrijver@nvidia.com>
      c09c63ee
    • Varun Wadekar's avatar
      Tegra: memctrl: assert if dynamic memmap fails · 7a6e0537
      Varun Wadekar authored
      
      
      This patch adds an assert in case the dynamic memmap routine fails.
      
      Change-Id: Idd20debbb8944340f5928c6f2cfea973a63a7b1c
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      7a6e0537
    • Anthony Zhou's avatar
      Tegra: fix defects flagged by MISRA Rule 10.3 · aa64c5fb
      Anthony Zhou authored
      
      
      MISRA 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.
      
      The essential type of a enum member is anonymous enum, the enum member
      should be casted to the right type when using it.
      
      Both UL and ULL suffix equal to uint64_t constant in compiler
      aarch64-linux-gnu-gcc, to avoid confusing, only keep U and ULL suffix
      in platform code. So in some case, cast a constant to uint32_t is
      necessary.
      
      Change-Id: I1aae8cba81ef47481736e7f95f53570de7013187
      Signed-off-by: default avatarAnthony Zhou <anzhou@nvidia.com>
      aa64c5fb
    • Steven Kao's avatar
      Tegra: smmu: add a hook to get number of devices · bc5a86f7
      Steven Kao authored
      
      
      This patch adds a hook to get the number of smmu devices and
      removes the NUM_SMMU_DEVICES macro.
      
      Change-Id: Ia8dba7e9304224976b5da688b9e4b5438f11cc41
      Signed-off-by: default avatarSteven Kao <skao@nvidia.com>
      bc5a86f7
    • Anthony Zhou's avatar
      Tegra: common: fix defects flagged by MISRA scan · 4c994002
      Anthony Zhou authored
      
      
      Macro assert(e) request 'e' is a bool type, if useing other
      type, MISRA report a "The Essential Type Model" violation,
      Add a judgement to fix the defects, if 'e' is not bool type.
      
      Remove unused code [Rule 2.5]
      Fix the essential type model violation [Rule 10.6, 10.7]
      Use local parameter to raplace function parameter [Rule 17.8]
      
      Change-Id: Ifce932addbb0a4b063ef6b38349d886c051d81c0
      Signed-off-by: default avatarAnthony Zhou <anzhou@nvidia.com>
      4c994002
    • Anthony Zhou's avatar
      Tegra: common: drivers: fix MISRA defects · 61beb3e0
      Anthony Zhou authored
      
      
      Main fixes:
      
      Add suffix U for constant [Rule 10.1]
      
      Match the operands type [Rule 10.4]
      
      Use UL replace U for that constant define that need do "~"
      operation [Rule 12.4]
      
      Voided non c-library functions whose return types are not used
       [Rule 17.7]
      
      Change-Id: Ia1e814ca3890eab7904be9c79030502408f30936
      Signed-off-by: default avatarAnthony Zhou <anzhou@nvidia.com>
      61beb3e0
    • Varun Wadekar's avatar
      Tegra: gpcdma: driver for general purpose DMA · 647d4a03
      Varun Wadekar authored
      
      
      This patch adds the driver for the general purpose DMA hardware
      block on newer Tegra SoCs. The GPCDMA is a special purpose DMA
      used to speed up memory copy operations to/from DRAM and TZSRAM.
      
      This patch introduces a macro 'USE_GPC_DMA' to allow platforms
      to override CPU based memory operations.
      
      Change-Id: I3170d409c83b77e785437b1002a8d70188fabbeb
      Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
      647d4a03
  11. 16 Jan, 2019 2 commits