ARM: SoC drivers for 6.0
The SoC driver updates contain changes to improve support for
additional SoC variants, as well as cleanups an minor bugfixes
in a number of existing drivers.
Notable updates this time include:
- Support for Qualcomm MSM8909 (Snapdragon 210) in various drivers
- Updates for interconnect drivers on Qualcomm Snapdragon
- A new driver support for NMI interrupts on Fujitsu A64fx
- A rework of Broadcom BCMBCA Kconfig dependencies
- Improved support for BCM2711 (Raspberry Pi 4) power management
to allow the use of the V3D GPU
- Cleanups to the NXP guts driver
- Arm SCMI firmware driver updates to add tracing support, and
use the firmware interfaces for system power control and for
power capping.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmLo+0UACgkQmmx57+YA
GNkkFw//eyeMxsJ/pqp0HeXTX7s2p0+39IQiak0hjFNe3XN12PIMRAHHtutKlt7F
K0fKksokY9p+o1M86/5D4l7v7S6DcHQk2MdUD5AeMu/If7cfL0TI2mdIAVnoad4o
p54ABR0q2Tr/Dr/2GK8kZPTnXkPPLd951mgCG/jwrlPgG3KjTgjhEWg86+F2s/B/
P8ryYakCYfsxPJGnZqyw63JuVet9Tnv87jySxabukNfSRR8RbJ+OVKXxaBBmvYkA
+UuDEkcuPtlrEyUoNe+WtM07BdxP6tl/jRwZ4EenQtFDSLCQnapgHK3bVRbLs/WL
naKJZgI7OOwU8fjRi90/zYoPBW6UQ9OoxcmshNwgFM5yBLJtVgGM+Fp8XNfPIvm0
BYvE7jf8cEtFDAOYWuB8jCdvBen8qzt5eeUpV+uOjHDxiWwfif15yUDxCE3GB7Ov
vSPRpuTec/6Ry5hIbqcsrTcZRihnJbAJqDOHdlSVX3M+ohXcf5OMLd+IbD+oHgpo
vSKvitkDnCKvdR6Uw1GSNAgeVm1ItMBlcL/8VsurOEUXR301pFNGdHEGuuxDu1Mm
rEzk37ajYmiol5uBYIU8mdYrlK2+52sWd5/22zIwhMIEgQbuPbouYWPfUSP9bb+U
9NlvjGVxK5U73UqcU/56nn7W9uRt0ArzSzON53wnBW3WjkcgMLk=
=0dZI
-----END PGP SIGNATURE-----
Merge tag 'arm-drivers-6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC drivers from Arnd Bergmann:
"The SoC driver updates contain changes to improve support for
additional SoC variants, as well as cleanups an minor bugfixes
in a number of existing drivers.
Notable updates this time include:
- Support for Qualcomm MSM8909 (Snapdragon 210) in various drivers
- Updates for interconnect drivers on Qualcomm Snapdragon
- A new driver support for NMI interrupts on Fujitsu A64fx
- A rework of Broadcom BCMBCA Kconfig dependencies
- Improved support for BCM2711 (Raspberry Pi 4) power management to
allow the use of the V3D GPU
- Cleanups to the NXP guts driver
- Arm SCMI firmware driver updates to add tracing support, and use
the firmware interfaces for system power control and for power
capping"
* tag 'arm-drivers-6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (125 commits)
soc: a64fx-diag: disable modular build
dt-bindings: soc: qcom: qcom,smd-rpm: add power-controller
dt-bindings: soc: qcom: aoss: document qcom,sm8450-aoss-qmp
dt-bindings: soc: qcom,rpmh-rsc: simplify qcom,tcs-config
ARM: mach-qcom: Add support for MSM8909
dt-bindings: arm: cpus: Document "qcom,msm8909-smp" enable-method
soc: qcom: spm: Add CPU data for MSM8909
dt-bindings: soc: qcom: spm: Add MSM8909 CPU compatible
soc: qcom: rpmpd: Add compatible for MSM8909
dt-bindings: power: qcom-rpmpd: Add MSM8909 power domains
soc: qcom: smd-rpm: Add compatible for MSM8909
dt-bindings: soc: qcom: smd-rpm: Add MSM8909
soc: qcom: icc-bwmon: Remove unnecessary print function dev_err()
soc: fujitsu: Add A64FX diagnostic interrupt driver
soc: qcom: socinfo: Fix the id of SA8540P SoC
soc: qcom: Make QCOM_RPMPD depend on PM
tty: serial: bcm63xx: bcmbca: Replace ARCH_BCM_63XX with ARCH_BCMBCA
spi: bcm63xx-hsspi: bcmbca: Replace ARCH_BCM_63XX with ARCH_BCMBCA
clk: bcm: bcmbca: Replace ARCH_BCM_63XX with ARCH_BCMBCA
hwrng: bcm2835: bcmbca: Replace ARCH_BCM_63XX with ARCH_BCMBCA
...
This commit is contained in:
commit
47b62edcd4
105 changed files with 6418 additions and 588 deletions
|
|
@ -9,6 +9,7 @@ struct bcm2835_pm {
|
|||
struct device *dev;
|
||||
void __iomem *base;
|
||||
void __iomem *asb;
|
||||
void __iomem *rpivid_asb;
|
||||
};
|
||||
|
||||
#endif /* BCM2835_MFD_PM_H */
|
||||
|
|
|
|||
|
|
@ -560,6 +560,116 @@ struct scmi_voltage_proto_ops {
|
|||
s32 *volt_uV);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_powercap_info - Describe one available Powercap domain
|
||||
*
|
||||
* @id: Domain ID as advertised by the platform.
|
||||
* @notify_powercap_cap_change: CAP change notification support.
|
||||
* @notify_powercap_measurement_change: MEASUREMENTS change notifications
|
||||
* support.
|
||||
* @async_powercap_cap_set: Asynchronous CAP set support.
|
||||
* @powercap_cap_config: CAP configuration support.
|
||||
* @powercap_monitoring: Monitoring (measurements) support.
|
||||
* @powercap_pai_config: PAI configuration support.
|
||||
* @powercap_scale_mw: Domain reports power data in milliwatt units.
|
||||
* @powercap_scale_uw: Domain reports power data in microwatt units.
|
||||
* Note that, when both @powercap_scale_mw and
|
||||
* @powercap_scale_uw are set to false, the domain
|
||||
* reports power data on an abstract linear scale.
|
||||
* @name: name assigned to the Powercap Domain by platform.
|
||||
* @min_pai: Minimum configurable PAI.
|
||||
* @max_pai: Maximum configurable PAI.
|
||||
* @pai_step: Step size between two consecutive PAI values.
|
||||
* @min_power_cap: Minimum configurable CAP.
|
||||
* @max_power_cap: Maximum configurable CAP.
|
||||
* @power_cap_step: Step size between two consecutive CAP values.
|
||||
* @sustainable_power: Maximum sustainable power consumption for this domain
|
||||
* under normal conditions.
|
||||
* @accuracy: The accuracy with which the power is measured and reported in
|
||||
* integral multiples of 0.001 percent.
|
||||
* @parent_id: Identifier of the containing parent power capping domain, or the
|
||||
* value 0xFFFFFFFF if this powercap domain is a root domain not
|
||||
* contained in any other domain.
|
||||
*/
|
||||
struct scmi_powercap_info {
|
||||
unsigned int id;
|
||||
bool notify_powercap_cap_change;
|
||||
bool notify_powercap_measurement_change;
|
||||
bool async_powercap_cap_set;
|
||||
bool powercap_cap_config;
|
||||
bool powercap_monitoring;
|
||||
bool powercap_pai_config;
|
||||
bool powercap_scale_mw;
|
||||
bool powercap_scale_uw;
|
||||
bool fastchannels;
|
||||
char name[SCMI_MAX_STR_SIZE];
|
||||
unsigned int min_pai;
|
||||
unsigned int max_pai;
|
||||
unsigned int pai_step;
|
||||
unsigned int min_power_cap;
|
||||
unsigned int max_power_cap;
|
||||
unsigned int power_cap_step;
|
||||
unsigned int sustainable_power;
|
||||
unsigned int accuracy;
|
||||
#define SCMI_POWERCAP_ROOT_ZONE_ID 0xFFFFFFFFUL
|
||||
unsigned int parent_id;
|
||||
struct scmi_fc_info *fc_info;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_powercap_proto_ops - represents the various operations provided
|
||||
* by SCMI Powercap Protocol
|
||||
*
|
||||
* @num_domains_get: get the count of powercap domains provided by SCMI.
|
||||
* @info_get: get the information for the specified domain.
|
||||
* @cap_get: get the current CAP value for the specified domain.
|
||||
* @cap_set: set the CAP value for the specified domain to the provided value;
|
||||
* if the domain supports setting the CAP with an asynchronous command
|
||||
* this request will finally trigger an asynchronous transfer, but, if
|
||||
* @ignore_dresp here is set to true, this call will anyway return
|
||||
* immediately without waiting for the related delayed response.
|
||||
* @pai_get: get the current PAI value for the specified domain.
|
||||
* @pai_set: set the PAI value for the specified domain to the provided value.
|
||||
* @measurements_get: retrieve the current average power measurements for the
|
||||
* specified domain and the related PAI upon which is
|
||||
* calculated.
|
||||
* @measurements_threshold_set: set the desired low and high power thresholds
|
||||
* to be used when registering for notification
|
||||
* of type POWERCAP_MEASUREMENTS_NOTIFY with this
|
||||
* powercap domain.
|
||||
* Note that this must be called at least once
|
||||
* before registering any callback with the usual
|
||||
* @scmi_notify_ops; moreover, in case this method
|
||||
* is called with measurement notifications already
|
||||
* enabled it will also trigger, transparently, a
|
||||
* proper update of the power thresholds configured
|
||||
* in the SCMI backend server.
|
||||
* @measurements_threshold_get: get the currently configured low and high power
|
||||
* thresholds used when registering callbacks for
|
||||
* notification POWERCAP_MEASUREMENTS_NOTIFY.
|
||||
*/
|
||||
struct scmi_powercap_proto_ops {
|
||||
int (*num_domains_get)(const struct scmi_protocol_handle *ph);
|
||||
const struct scmi_powercap_info __must_check *(*info_get)
|
||||
(const struct scmi_protocol_handle *ph, u32 domain_id);
|
||||
int (*cap_get)(const struct scmi_protocol_handle *ph, u32 domain_id,
|
||||
u32 *power_cap);
|
||||
int (*cap_set)(const struct scmi_protocol_handle *ph, u32 domain_id,
|
||||
u32 power_cap, bool ignore_dresp);
|
||||
int (*pai_get)(const struct scmi_protocol_handle *ph, u32 domain_id,
|
||||
u32 *pai);
|
||||
int (*pai_set)(const struct scmi_protocol_handle *ph, u32 domain_id,
|
||||
u32 pai);
|
||||
int (*measurements_get)(const struct scmi_protocol_handle *ph,
|
||||
u32 domain_id, u32 *average_power, u32 *pai);
|
||||
int (*measurements_threshold_set)(const struct scmi_protocol_handle *ph,
|
||||
u32 domain_id, u32 power_thresh_low,
|
||||
u32 power_thresh_high);
|
||||
int (*measurements_threshold_get)(const struct scmi_protocol_handle *ph,
|
||||
u32 domain_id, u32 *power_thresh_low,
|
||||
u32 *power_thresh_high);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_notify_ops - represents notifications' operations provided by
|
||||
* SCMI core
|
||||
|
|
@ -624,6 +734,9 @@ struct scmi_notify_ops {
|
|||
*
|
||||
* @dev: pointer to the SCMI device
|
||||
* @version: pointer to the structure containing SCMI version information
|
||||
* @devm_protocol_acquire: devres managed method to get hold of a protocol,
|
||||
* causing its initialization and related resource
|
||||
* accounting
|
||||
* @devm_protocol_get: devres managed method to acquire a protocol and get specific
|
||||
* operations and a dedicated protocol handler
|
||||
* @devm_protocol_put: devres managed method to release a protocol
|
||||
|
|
@ -642,6 +755,8 @@ struct scmi_handle {
|
|||
struct device *dev;
|
||||
struct scmi_revision_info *version;
|
||||
|
||||
int __must_check (*devm_protocol_acquire)(struct scmi_device *sdev,
|
||||
u8 proto);
|
||||
const void __must_check *
|
||||
(*devm_protocol_get)(struct scmi_device *sdev, u8 proto,
|
||||
struct scmi_protocol_handle **ph);
|
||||
|
|
@ -661,6 +776,7 @@ enum scmi_std_protocol {
|
|||
SCMI_PROTOCOL_SENSOR = 0x15,
|
||||
SCMI_PROTOCOL_RESET = 0x16,
|
||||
SCMI_PROTOCOL_VOLTAGE = 0x17,
|
||||
SCMI_PROTOCOL_POWERCAP = 0x18,
|
||||
};
|
||||
|
||||
enum scmi_system_events {
|
||||
|
|
@ -762,6 +878,8 @@ enum scmi_notification_events {
|
|||
SCMI_EVENT_RESET_ISSUED = 0x0,
|
||||
SCMI_EVENT_BASE_ERROR_EVENT = 0x0,
|
||||
SCMI_EVENT_SYSTEM_POWER_STATE_NOTIFIER = 0x0,
|
||||
SCMI_EVENT_POWERCAP_CAP_CHANGED = 0x0,
|
||||
SCMI_EVENT_POWERCAP_MEASUREMENTS_CHANGED = 0x1,
|
||||
};
|
||||
|
||||
struct scmi_power_state_changed_report {
|
||||
|
|
@ -781,8 +899,10 @@ struct scmi_clock_rate_notif_report {
|
|||
struct scmi_system_power_state_notifier_report {
|
||||
ktime_t timestamp;
|
||||
unsigned int agent_id;
|
||||
#define SCMI_SYSPOWER_IS_REQUEST_GRACEFUL(flags) ((flags) & BIT(0))
|
||||
unsigned int flags;
|
||||
unsigned int system_state;
|
||||
unsigned int timeout;
|
||||
};
|
||||
|
||||
struct scmi_perf_limits_report {
|
||||
|
|
@ -830,4 +950,18 @@ struct scmi_base_error_report {
|
|||
unsigned long long reports[];
|
||||
};
|
||||
|
||||
struct scmi_powercap_cap_changed_report {
|
||||
ktime_t timestamp;
|
||||
unsigned int agent_id;
|
||||
unsigned int domain_id;
|
||||
unsigned int power_cap;
|
||||
unsigned int pai;
|
||||
};
|
||||
|
||||
struct scmi_powercap_meas_changed_report {
|
||||
ktime_t timestamp;
|
||||
unsigned int agent_id;
|
||||
unsigned int domain_id;
|
||||
unsigned int power;
|
||||
};
|
||||
#endif /* _LINUX_SCMI_PROTOCOL_H */
|
||||
|
|
|
|||
|
|
@ -10,11 +10,33 @@ struct regmap;
|
|||
struct device;
|
||||
struct mtk_mutex;
|
||||
|
||||
enum mtk_mutex_mod_index {
|
||||
/* MDP table index */
|
||||
MUTEX_MOD_IDX_MDP_RDMA0,
|
||||
MUTEX_MOD_IDX_MDP_RSZ0,
|
||||
MUTEX_MOD_IDX_MDP_RSZ1,
|
||||
MUTEX_MOD_IDX_MDP_TDSHP0,
|
||||
MUTEX_MOD_IDX_MDP_WROT0,
|
||||
MUTEX_MOD_IDX_MDP_WDMA,
|
||||
MUTEX_MOD_IDX_MDP_AAL0,
|
||||
MUTEX_MOD_IDX_MDP_CCORR0,
|
||||
|
||||
MUTEX_MOD_IDX_MAX /* ALWAYS keep at the end */
|
||||
};
|
||||
|
||||
enum mtk_mutex_sof_index {
|
||||
MUTEX_SOF_IDX_SINGLE_MODE,
|
||||
|
||||
MUTEX_SOF_IDX_MAX /* ALWAYS keep at the end */
|
||||
};
|
||||
|
||||
struct mtk_mutex *mtk_mutex_get(struct device *dev);
|
||||
int mtk_mutex_prepare(struct mtk_mutex *mutex);
|
||||
void mtk_mutex_add_comp(struct mtk_mutex *mutex,
|
||||
enum mtk_ddp_comp_id id);
|
||||
void mtk_mutex_enable(struct mtk_mutex *mutex);
|
||||
int mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex,
|
||||
void *pkt);
|
||||
void mtk_mutex_disable(struct mtk_mutex *mutex);
|
||||
void mtk_mutex_remove_comp(struct mtk_mutex *mutex,
|
||||
enum mtk_ddp_comp_id id);
|
||||
|
|
@ -22,5 +44,10 @@ void mtk_mutex_unprepare(struct mtk_mutex *mutex);
|
|||
void mtk_mutex_put(struct mtk_mutex *mutex);
|
||||
void mtk_mutex_acquire(struct mtk_mutex *mutex);
|
||||
void mtk_mutex_release(struct mtk_mutex *mutex);
|
||||
int mtk_mutex_write_mod(struct mtk_mutex *mutex,
|
||||
enum mtk_mutex_mod_index idx,
|
||||
bool clear);
|
||||
int mtk_mutex_write_sof(struct mtk_mutex *mutex,
|
||||
enum mtk_mutex_sof_index idx);
|
||||
|
||||
#endif /* MTK_MUTEX_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue