Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba6728cc authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: add snapshot of PIL, SSR and SYSMON drivers/libraries" into msm-4.8

parents e47abbf1 e45fa029
Loading
Loading
Loading
Loading
+127 −0
Original line number Diff line number Diff line
Qualcomm Technologies Inc MSS QDSP6v5 Peripheral Image Loader

pil-qdsp6v5-mss is a peripheral image loader (PIL) driver. It is used for
loading QDSP6v5 (Hexagon) firmware images for modem subsystems into memory and
preparing the subsystem's processor to execute code. It's also responsible for
shutting down the processor when it's not needed.

Required properties:
- compatible:	      Must be "qcom,pil-q6v5-mss" or "qcom,pil-q6v55-mss" or
			"qcom,pil-q6v56-mss".
- reg:		      Pairs of physical base addresses and region sizes of
		      memory mapped registers.
- reg-names:	      Names of the bases for the above registers. "qdsp6_base",
		      "rmb_base", "restart_reg" or "restart_reg_sec"(optional
		      for secure mode) are expected.
		      If "halt_base" is in same 4K pages this register then
		      this will be defined else "halt_q6", "halt_modem",
		      "halt_nc" is required.
- interrupts:         The modem watchdog interrupt
- vdd_cx-supply:      Reference to the regulator that supplies the vdd_cx domain.
- vdd_cx-voltage:     Voltage corner/level(max) for cx rail.
- vdd_mx-supply:      Reference to the regulator that supplies the memory rail.
- vdd_mx-uV:          Voltage setting for the mx rail.
- qcom,firmware-name: Base name of the firmware image. Ex. "mdsp"

Optional properties:
- vdd_mss-supply:     Reference to the regulator that supplies the processor.
		      This may be a shared regulator that is already voted
		      on in the PIL proxy voting code (and also managed by the
		      modem on its own), hence we mark it as as optional.
- vdd_pll-supply:     Reference to the regulator that supplies the PLL's rail.
- qcom,vdd_pll:       Voltage to be set for the PLL's rail.
- reg-names:          "cxrail_bhs_reg" - control register for modem power
		      domain.
- clocks:	      Array of <clock_controller_phandle clock_reference> listing
		      all the clocks that are accesed by this subsystem.
- qcom,proxy-clock-names:  Names of the clocks that need to be turned on/off during
			   proxy voting/unvoting.
- qcom,active-clock-names: Names of the clocks that need to be turned on for the
			   subsystem to run. Turned off when the subsystem is shutdown.
- clock-names:		   Names of all the clocks that are accessed by the subsystem.
- qcom,is-not-loadable: Boolean- Present if the image does not need to
			be loaded.
- qcom,pil-self-auth: Boolean- True if authentication is required.
- qcom,mem-protect-id: Virtual ID used by PIL to call into TZ/HYP to protect/unprotect
			subsystem related memory.
- qcom,gpio-err-fatal: GPIO used by the modem to indicate error fatal to the apps.
- qcom,gpio-err-ready: GPIO used by the modem to indicate error ready to the apps.
- qcom,gpio-proxy-unvote: GPIO used by the modem to trigger proxy unvoting in
  the apps.
- qcom,gpio-force-stop: GPIO used by the apps to force the modem to shutdown.
- qcom,gpio-stop-ack: GPIO used by the modem to ack force stop or a graceful stop
		      to the apps.
- qcom,gpio-ramdump-disable: GPIO used by the modem to inform the apps that ramdump
			     collection should be disabled.
- qcom,gpio-shutdown-ack: GPIO used by the modem to indicate that it has done the
			  necessary cleanup and that the apps can move forward with
			  the shutdown sequence.
- qcom,restart-group: List of subsystems that will need to restart together.
- qcom,mba-image-is-not-elf:	Boolean- Present if MBA image doesn't use the ELF
				format.
- qcom,ssctl-instance-id: Instance id used by the subsystem to connect with the SSCTL
			  service.
- qcom,sysmon-id:	platform device id that sysmon is probed with for the subsystem.
- qcom,override-acc: Boolean- Present if we need to override the default ACC settings
- qcom,ahb-clk-vote: Boolean- Present if we need to remove the vote for the mss_cfg_ahb
		     clock after the modem boots up
- qcom,pnoc-clk-vote: Boolean- Present if the modem needs the PNOC bus to be
		      clocked before it boots up
- qcom,qdsp6v56-1-3: Boolean- Present if the qdsp version is v56 1.3
- qcom,qdsp6v56-1-5: Boolean- Present if the qdsp version is v56 1.5
- qcom,edge:		GLINK logical name of the remote subsystem
- qcom,pil-force-shutdown: Boolean. If set, the SSR framework will not trigger graceful shutdown
                           on behalf of the subsystem driver.
- qcom,pil-mss-memsetup: Boolean - True if TZ need to be informed of modem start address and size.
- qcom,pas-id:	      pas_id of the subsystem.
- qcom,qdsp6v56-1-8: Boolean- Present if the qdsp version is v56 1.8
- qcom,qdsp6v56-1-8-inrush-current: Boolean- Present if the qdsp version is V56 1.8 and has in-rush
				    current issue.
- qcom,qdsp6v61-1-1: Boolean- Present if the qdsp version is v61 1.1
- qcom,qdsp6v62-1-2: Boolean- Present if the qdsp version is v62 1.2
- qcom,qdsp6v62-1-5: Boolean- Present if the qdsp version is v62 1.5
- qcom,mx-spike-wa: Boolean- Present if we need to assert QDSP6 I/O clamp, memory
		    wordline clamp, and compiler memory clamp during MSS restart.
- qcom,qdsp6v56-1-10: Boolean- Present if the qdsp version is v56 1.10
- qcom,override-acc-1: Override the default ACC settings with this value if present.

Example:
	qcom,mss@fc880000 {
		compatible = "qcom,pil-q6v5-mss";
		reg = <0xfc880000 0x100>,
		      <0xfd485000 0x400>,
		      <0xfc820000 0x020>,
		      <0xfc401680 0x004>;
		reg-names = "qdsp6_base", "halt_base", "rmb_base",
			    "restart_reg";
		interrupts = <0 24 1>;
		vdd_mss-supply = <&pm8841_s3>;
		vdd_cx-supply = <&pm8841_s2>;
		vdd_cx-voltage = <7>;
		vdd_mx-supply = <&pm8841_s1>;
		vdd_mx-uV = <105000>;

		clocks = <&clock_rpm clk_xo_pil_mss_clk>,
			 <&clock_gcc clk_gcc_mss_cfg_ahb_clk>,
			 <&clock_gcc clk_gcc_mss_q6_bimc_axi_clk>,
			 <&clock_gcc clk_gcc_boot_rom_ahb_clk>;
		clock-names = "xo", "iface_clk", "bus_clk", "mem_clk";
		qcom,proxy-clock-names = "xo";
		qcom,active-clock-names = "iface_clk", "bus_clk", "mem_clk";

		qcom,is-not-loadable;
		qcom,firmware-name = "mba";
		qcom,pil-self-auth;
		qcom,mba-image-is-not-elf;
		qcom,override-acc;

		/* GPIO inputs from mss */
		qcom,gpio-err-fatal = <&smp2pgpio_ssr_smp2p_1_in 0 0>;
		qcom,gpio-err-ready = <&smp2pgpio_ssr_smp2p_1_in 1 0>;
		qcom,gpio-proxy-unvote = <&smp2pgpio_ssr_smp2p_1_in 2 0>;

		/* GPIO output to mss */
		qcom,gpio-force-stop = <&smp2pgpio_ssr_smp2p_1_out 0 0>;
		qcom,ssctl-instance-id = <12>;
		qcom,sysmon-id = <0>;
	};
+135 −0
Original line number Diff line number Diff line
* Generic Subsystem Peripheral Image Loader

subsys-pil-tz is a generic peripheral image loader (PIL) driver. It is
used for loading the firmware images of the subsystems into memory and
preparing the subsystem's processor to execute code. It's also responsible
for shutting down the processor when it's not needed.

Required properties:
- compatible:	      Must be "qcom,pil-tz-generic"
- qcom,firmware-name: Base name of the firmware image.

Optional properties:
- reg:		      Pairs of physical base addresses and region sizes of
		      memory mapped registers.
- reg-names:	      Names of the bases for the above registers. Not required for
		      PIL usage. Ex. "wrapper_base", "vbif_base".
- interrupts:	      Subsystem to Apps watchdog bite interrupt.
- vdd_'reg'-supply: Reference to the regulator that supplies the corresponding
		    'reg' domain.
- qcom,proxy-reg-names: Names of the regulators that need to be turned on/off
			during proxy voting/unvoting.
- qcom,active-reg-names: Names of the regulators that need to be turned on for the
			subsystem to run. Turned off when the subsystem is shutdown.
- qcom,vdd_'reg'-uV-uA:    Voltage and current values for the 'reg' regulator.
- qcom,proxy-clock-names:  Names of the clocks that need to be turned on/off during
			   proxy voting/unvoting.
- qcom,active-clock-names: Names of the clocks that need to be turned on for the
			   subsystem to run. Turned off when the subsystem is shutdown.
- clock-names:	      Names of all the clocks that are accessed by the subsystem.
- qcom,<clock-name>-freq: Frequency to be set for that clock in Hz. If the property
			  isn't added for a clock, then the default clock frequency
			  would be set to 19200000 Hz.
- qcom,msm-bus,name:  Name of the bus client for the subsystem.
- qcom,msm-bus,num-cases: Number of use-cases.
- qcom,msm-bus,num-paths: Number of paths.
- qcom,msm-bus,active-only: If not set, uses the dual context by default.
- qcom,msm-bus,vectors-KBps: Vector array of master id, slave id, arbitrated
			     bandwidth and instantaneous bandwidth.
- qcom,pas-id:	      pas_id of the subsystem.
- qcom,proxy-timeout-ms: Proxy vote timeout value for the subsystem.
- qcom,smem-id:	      ID of the SMEM item for the subsystem.
- qcom,is-not-loadable: Boolean. Present if the subsystem's firmware image does not
			need to be loaded.
- qcom,pil-no-auth: Boolean. Present if the subsystem is not authenticated and brought
		    out of reset by using the PIL ops.
- qcom,mem-protect-id: Virtual ID used by PIL to call into TZ/HYP to protect/unprotect
			subsystem related memory.
- qcom,gpio-err-fatal: GPIO used by the subsystem to indicate error fatal to the apps.
- qcom,gpio-err-ready: GPIO used by the subsystem to indicate error ready to the apps.
- qcom,gpio-proxy-unvote: GPIO used by the subsystem to trigger proxy unvoting in
			  the apps.
- qcom,gpio-force-stop: GPIO used by the apps to force the subsystem to shutdown.
- qcom,gpio-stop-ack: GPIO used by the subsystem to ack force stop or a graceful stop
		      to the apps.
- qcom,restart-group: List of subsystems that will need to restart together.
- qcom,keep-proxy-regs-on: Boolean. Present if during proxy unvoting, PIL needs to leave
			the regulators enabled after removing the voltage/current votes.
- qcom,edge:		GLINK logical name of the remote subsystem
- qcom,ssctl-instance-id: Instance id used by the subsystem to connect with the SSCTL
			  service.
- qcom,sysmon-id:	platform device id that sysmon is probed with for the subsystem.
- qcom,pil-force-shutdown: Boolean. If set, the SSR framework will not trigger graceful shutdown
                           on behalf of the subsystem driver.
- qcom,pil-generic-irq-handler: generic interrupt handler used for communication with subsytem
				based on bit values in scsr registers.
- qcom,spss-scsr-bits: array of bit positions into the scsr registers used in generic handler.
- qcom,complete-ramdump: Boolean. If set, complete ramdump i.e. region between start address of
			first segment to end address of last segment will be collected without
			leaving any hole in between.

Example:
	qcom,venus@fdce0000 {
		compatible = "qcom,pil-tz-generic";
		reg = <0xfdce0000 0x4000>,
		      <0xfdc80000 0x400>;

		vdd-supply = <&gdsc_venus>;
		qcom,proxy-reg-names = "vdd";
		clock-names = "core_clk", "iface_clk", "bus_clk", "mem_clk",
				"scm_core_clk", "scm_iface_clk", "scm_bus_clk",
				"scm_core_clk_src";
		qcom,proxy-clock-names = "core_clk", "iface_clk", "bus_clk",
					"mem_clk", "scm_core_clk",
					"scm_iface_clk", "scm_bus_clk",
					"scm_core_clk_src";
		qcom,scm_core_clk_src-freq = <50000000>;

		qcom,msm-bus,name = "pil-venus";
		qcom,msm-bus,num-cases = <2>;
		qcom,msm-bus,num-paths = <1>;
		qcom,msm-bus,active-only = <0>;
		qcom,msm-bus,vectors-KBps =
				<63 512 0 0>,
				<63 512 0 304000>;

		qcom,pas-id = <9>;
		qcom,proxy-timeout-ms = <2000>;
		qcom,firmware-name = "venus";
	};

	qcom,lpass@fe200000 {
		compatible = "qcom,pil-tz-generic";
		reg = <0xfe200000 0x00100>,
		      <0xfd485100 0x00010>,
		      <0xfc4016c0 0x00004>;

		interrupts = <0 162 1>;

		vdd_cx-supply = <&pm8841_s2_corner>;
		qcom,proxy-reg-names = "vdd_cx";
		qcom,vdd_cx-uV-uA = <7 100000>;
		clock-names = "bus_clk", "xo", "scm_core_clk", "scm_iface_clk",
				"scm_bus_clk", "scm_core_clk_src";
		qcom,active-clock-names = "bus_clk";
		qcom,proxy-clock-names = "xo", "scm_core_clk", "scm_iface_clk",
					"scm_bus_clk", "scm_core_clk_src";
		qcom,scm_core_clk_src-freq = <50000000>;

		qcom,smem-id = <423>;
		qcom,pas-id = <1>;
		qcom,proxy-timeout-ms = <10000>;
		qcom,firmware-name = "adsp";
		qcom,edge = "lpass";

		/* GPIO inputs from lpass */
		qcom,gpio-err-fatal = <&smp2pgpio_ssr_smp2p_2_in 0 0>;
		qcom,gpio-proxy-unvote = <&smp2pgpio_ssr_smp2p_2_in 2 0>;
		qcom,gpio-err-ready = <&smp2pgpio_ssr_smp2p_2_in 1 0>;
		qcom,gpio-stop-ack = <&smp2pgpio_ssr_smp2p_2_in 3 0>;

		/* GPIO output to lpass */
		qcom,gpio-force-stop = <&smp2pgpio_ssr_smp2p_2_out 0 0>;
		qcom,ssctl-instance-id = <14>;
		qcom,sysmon-id = <1>;
	};
+49 −0
Original line number Diff line number Diff line
@@ -384,3 +384,52 @@ config MSM_SYSTEM_HEALTH_MONITOR
	  communication failure can request the SHM to perform a system-wide
	  health check. If any failures are detected during the health-check,
	  then a subsystem restart will be triggered for the failed subsystem.

config MSM_SUBSYSTEM_RESTART
       bool "MSM Subsystem Restart"
       help
         This option enables the MSM subsystem restart framework.

         The MSM subsystem restart framework provides support to boot,
         shutdown, and restart subsystems with a reference counted API.
         It also notifies userspace of transitions between these states via
         sysfs.

config MSM_PIL
       bool "Peripheral image loading"
       select FW_LOADER
       default n
       help
         Some peripherals need to be loaded into memory before they can be
         brought out of reset.

         Say yes to support these devices.

config MSM_SYSMON_GLINK_COMM
       bool "MSM System Monitor communication support using GLINK transport"
       depends on MSM_GLINK && MSM_SUBSYSTEM_RESTART
       help
         This option adds support for MSM System Monitor APIs using the GLINK
         transport layer. The APIs provided may be used for notifying
         subsystems within the SoC about other subsystems' power-up/down
         state-changes.

config MSM_PIL_SSR_GENERIC
       tristate "MSM Subsystem Boot Support"
       depends on MSM_PIL && MSM_SUBSYSTEM_RESTART
       help
         Support for booting and shutting down MSM Subsystem processors.
         This driver also monitors the SMSM status bits and the watchdog
         interrupt for the subsystem and restarts it on a watchdog bite
         or a fatal error. Subsystems include LPASS, Venus, VPU, WCNSS and
         BCSS.

config MSM_PIL_MSS_QDSP6V5
       tristate "MSS QDSP6v5 (Hexagon) Boot Support"
       depends on MSM_PIL && MSM_SUBSYSTEM_RESTART
       help
         Support for booting and shutting down QDSP6v5 (Hexagon) processors
         in modem subsystems. If you would like to make or receive phone
         calls then say Y here.

         If unsure, say N.
+11 −0
Original line number Diff line number Diff line
@@ -42,3 +42,14 @@ obj-$(CONFIG_MSM_QMI_INTERFACE) += qmi_interface.o
obj-$(CONFIG_MSM_GLINK_PKT) += msm_glink_pkt.o
obj-$(CONFIG_MSM_SYSTEM_HEALTH_MONITOR)	+=	system_health_monitor_v01.o
obj-$(CONFIG_MSM_SYSTEM_HEALTH_MONITOR)	+=	system_health_monitor.o
obj-$(CONFIG_MSM_SYSMON_GLINK_COMM) += sysmon-glink.o sysmon-qmi.o

obj-$(CONFIG_MSM_PIL_SSR_GENERIC) += subsys-pil-tz.o
obj-$(CONFIG_MSM_PIL_MSS_QDSP6V5) += pil-q6v5.o pil-msa.o pil-q6v5-mss.o
obj-$(CONFIG_MSM_PIL)   +=      peripheral-loader.o

ifdef CONFIG_MSM_SUBSYSTEM_RESTART
       obj-y += subsystem_notif.o
       obj-y += subsystem_restart.o
       obj-y += ramdump.o
endif
+1112 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading