mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
ARM: SoC drivers for v5.11
There are a couple of subsystems maintained by other people that merge their drivers through the SoC tree, those changes include: - The SCMI firmware framework gains support for sensor notifications and for controlling voltage domains. - A large update for the Tegra memory controller driver, integrating it better with the interconnect framework - The memory controller subsystem gains support for Mediatek MT8192 - The reset controller framework gains support for sharing pulsed resets For Soc specific drivers in drivers/soc, the main changes are - The Allwinner/sunxi MBUS gets a rework for the way it handles dma_map_ops and offsets between physical and dma address spaces. - An errata fix plus some cleanups for Freescale Layerscape SoCs - A cleanup for renesas drivers regarding MMIO accesses. - New SoC specific drivers for Mediatek MT8192 and MT8183 power domains - New SoC specific drivers for Aspeed AST2600 LPC bus control and SoC identification. - Core Power Domain support for Qualcomm MSM8916, MSM8939, SDM660 and SDX55. - A rework of the TI AM33xx 'genpd' power domain support to use information from DT instead of platform data - Support for TI AM64x SoCs - Allow building some Amlogic drivers as modules instead of built-in Finally, there are numerous cleanups and smaller bug fixes for Mediatek, Tegra, Samsung, Qualcomm, TI OMAP, Amlogic, Rockchips, Renesas, and Xilinx SoCs. There is a trivial conflict in the cedrus driver, with two branches adding the same CEDRUS_CAPABILITY_H265_DEC flag, and another trivial remove/remove conflict in linux/dma-mapping.h. Signed-off-by: Arnd Bergmann <arnd@arndb.de> -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAl/alSUACgkQmmx57+YA GNm7GRAAlNMVi7F0f4Ixf1bEh+J2QUonYIpZfrdxOLFwISGQ+nstGrFW2He/OeQv KAi027tZLl6Sdzjy809cLDPA4Z2IKwjVWhEbBHybvy1+irPYjnixtLd0x3YvPhjH iadlcjQ3uaGue8PvubK6CVnBEy82A+Pp29n9i4A4wX/8w+BVIhVsxwQWUBF8pFXE 3La2UZYZMVMvVZMrpTOqwCgdmLDCk+RLMVZ1IiRqBEBq5/DVq03uIXgjGEOrq8tl PXC89w7K510Is891mbBdBThQf+pZkU1vwORuknDcEJKWs9ngbEha7ebVgp32kbFl pi8DEK205d106WQgfn0Zxkpbsp8XD058wDILwkhBcteXlBaUEL6btGVLDTUCJZuv /pkH8tL4lNGpThQFbCEXC8oHZBp2xk55P+SW9RRZOoA5tAp+sz7hlf3y3YKdCSxv 4xybeeVOAgjl01WtbEC7CuIkqcKVSQ7njhLhC8r5ASteNywDThqxLT6nd0VegcQc YH3Eu9QRXpvFwQ35zMkTMWa27bMG5d60fp90bWT0R5amXZpxJJot87w8trFCxv74 mE5KvCbefCRNsTt8GOBA/WR7hVaG369g07qOvs7g4LjJEM3Nl2h/A4/zVFef9O0t yq3Nm4YCGfDSAQXzGR2SJ3nxiqbDknzJTAtZPf4BmbaMuPOIJ5k= =BjJf -----END PGP SIGNATURE----- Merge tag 'arm-soc-drivers-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc Pull ARM SoC driver updates from Arnd Bergmann: "There are a couple of subsystems maintained by other people that merge their drivers through the SoC tree, those changes include: - The SCMI firmware framework gains support for sensor notifications and for controlling voltage domains. - A large update for the Tegra memory controller driver, integrating it better with the interconnect framework - The memory controller subsystem gains support for Mediatek MT8192 - The reset controller framework gains support for sharing pulsed resets For Soc specific drivers in drivers/soc, the main changes are - The Allwinner/sunxi MBUS gets a rework for the way it handles dma_map_ops and offsets between physical and dma address spaces. - An errata fix plus some cleanups for Freescale Layerscape SoCs - A cleanup for renesas drivers regarding MMIO accesses. - New SoC specific drivers for Mediatek MT8192 and MT8183 power domains - New SoC specific drivers for Aspeed AST2600 LPC bus control and SoC identification. - Core Power Domain support for Qualcomm MSM8916, MSM8939, SDM660 and SDX55. - A rework of the TI AM33xx 'genpd' power domain support to use information from DT instead of platform data - Support for TI AM64x SoCs - Allow building some Amlogic drivers as modules instead of built-in Finally, there are numerous cleanups and smaller bug fixes for Mediatek, Tegra, Samsung, Qualcomm, TI OMAP, Amlogic, Rockchips, Renesas, and Xilinx SoCs" * tag 'arm-soc-drivers-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (222 commits) soc: mediatek: mmsys: Specify HAS_IOMEM dependency for MTK_MMSYS firmware: xilinx: Properly align function parameter firmware: xilinx: Add a blank line after function declaration firmware: xilinx: Remove additional newline firmware: xilinx: Fix kernel-doc warnings firmware: xlnx-zynqmp: fix compilation warning soc: xilinx: vcu: add missing register NUM_CORE soc: xilinx: vcu: use vcu-settings syscon registers dt-bindings: soc: xlnx: extract xlnx, vcu-settings to separate binding soc: xilinx: vcu: drop useless success message clk: samsung: mark PM functions as __maybe_unused soc: samsung: exynos-chipid: initialize later - with arch_initcall soc: samsung: exynos-chipid: order list of SoCs by name memory: jz4780_nemc: Fix potential NULL dereference in jz4780_nemc_probe() memory: ti-emif-sram: only build for ARMv7 memory: tegra30: Support interconnect framework memory: tegra20: Support hardware versioning and clean up OPP table initialization dt-bindings: memory: tegra20-emc: Document opp-supported-hw property soc: rockchip: io-domain: Fix error return code in rockchip_iodomain_probe() reset-controller: ti: force the write operation when assert or deassert ...
This commit is contained in:
commit
48c1c40ab4
182 changed files with 6621 additions and 1357 deletions
|
@ -8,6 +8,7 @@
|
|||
#ifndef _LINUX_SCMI_PROTOCOL_H
|
||||
#define _LINUX_SCMI_PROTOCOL_H
|
||||
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/types.h>
|
||||
|
@ -149,13 +150,180 @@ struct scmi_power_ops {
|
|||
u32 *state);
|
||||
};
|
||||
|
||||
struct scmi_sensor_info {
|
||||
u32 id;
|
||||
u8 type;
|
||||
s8 scale;
|
||||
u8 num_trip_points;
|
||||
bool async;
|
||||
/**
|
||||
* scmi_sensor_reading - represent a timestamped read
|
||||
*
|
||||
* Used by @reading_get_timestamped method.
|
||||
*
|
||||
* @value: The signed value sensor read.
|
||||
* @timestamp: An unsigned timestamp for the sensor read, as provided by
|
||||
* SCMI platform. Set to zero when not available.
|
||||
*/
|
||||
struct scmi_sensor_reading {
|
||||
long long value;
|
||||
unsigned long long timestamp;
|
||||
};
|
||||
|
||||
/**
|
||||
* scmi_range_attrs - specifies a sensor or axis values' range
|
||||
* @min_range: The minimum value which can be represented by the sensor/axis.
|
||||
* @max_range: The maximum value which can be represented by the sensor/axis.
|
||||
*/
|
||||
struct scmi_range_attrs {
|
||||
long long min_range;
|
||||
long long max_range;
|
||||
};
|
||||
|
||||
/**
|
||||
* scmi_sensor_axis_info - describes one sensor axes
|
||||
* @id: The axes ID.
|
||||
* @type: Axes type. Chosen amongst one of @enum scmi_sensor_class.
|
||||
* @scale: Power-of-10 multiplier applied to the axis unit.
|
||||
* @name: NULL-terminated string representing axes name as advertised by
|
||||
* SCMI platform.
|
||||
* @extended_attrs: Flag to indicate the presence of additional extended
|
||||
* attributes for this axes.
|
||||
* @resolution: Extended attribute representing the resolution of the axes.
|
||||
* Set to 0 if not reported by this axes.
|
||||
* @exponent: Extended attribute representing the power-of-10 multiplier that
|
||||
* is applied to the resolution field. Set to 0 if not reported by
|
||||
* this axes.
|
||||
* @attrs: Extended attributes representing minimum and maximum values
|
||||
* measurable by this axes. Set to 0 if not reported by this sensor.
|
||||
*/
|
||||
struct scmi_sensor_axis_info {
|
||||
unsigned int id;
|
||||
unsigned int type;
|
||||
int scale;
|
||||
char name[SCMI_MAX_STR_SIZE];
|
||||
bool extended_attrs;
|
||||
unsigned int resolution;
|
||||
int exponent;
|
||||
struct scmi_range_attrs attrs;
|
||||
};
|
||||
|
||||
/**
|
||||
* scmi_sensor_intervals_info - describes number and type of available update
|
||||
* intervals
|
||||
* @segmented: Flag for segmented intervals' representation. When True there
|
||||
* will be exactly 3 intervals in @desc, with each entry
|
||||
* representing a member of a segment in this order:
|
||||
* {lowest update interval, highest update interval, step size}
|
||||
* @count: Number of intervals described in @desc.
|
||||
* @desc: Array of @count interval descriptor bitmask represented as detailed in
|
||||
* the SCMI specification: it can be accessed using the accompanying
|
||||
* macros.
|
||||
* @prealloc_pool: A minimal preallocated pool of desc entries used to avoid
|
||||
* lesser-than-64-bytes dynamic allocation for small @count
|
||||
* values.
|
||||
*/
|
||||
struct scmi_sensor_intervals_info {
|
||||
bool segmented;
|
||||
unsigned int count;
|
||||
#define SCMI_SENS_INTVL_SEGMENT_LOW 0
|
||||
#define SCMI_SENS_INTVL_SEGMENT_HIGH 1
|
||||
#define SCMI_SENS_INTVL_SEGMENT_STEP 2
|
||||
unsigned int *desc;
|
||||
#define SCMI_SENS_INTVL_GET_SECS(x) FIELD_GET(GENMASK(20, 5), (x))
|
||||
#define SCMI_SENS_INTVL_GET_EXP(x) \
|
||||
({ \
|
||||
int __signed_exp = FIELD_GET(GENMASK(4, 0), (x)); \
|
||||
\
|
||||
if (__signed_exp & BIT(4)) \
|
||||
__signed_exp |= GENMASK(31, 5); \
|
||||
__signed_exp; \
|
||||
})
|
||||
#define SCMI_MAX_PREALLOC_POOL 16
|
||||
unsigned int prealloc_pool[SCMI_MAX_PREALLOC_POOL];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct scmi_sensor_info - represents information related to one of the
|
||||
* available sensors.
|
||||
* @id: Sensor ID.
|
||||
* @type: Sensor type. Chosen amongst one of @enum scmi_sensor_class.
|
||||
* @scale: Power-of-10 multiplier applied to the sensor unit.
|
||||
* @num_trip_points: Number of maximum configurable trip points.
|
||||
* @async: Flag for asynchronous read support.
|
||||
* @update: Flag for continuouos update notification support.
|
||||
* @timestamped: Flag for timestamped read support.
|
||||
* @tstamp_scale: Power-of-10 multiplier applied to the sensor timestamps to
|
||||
* represent it in seconds.
|
||||
* @num_axis: Number of supported axis if any. Reported as 0 for scalar sensors.
|
||||
* @axis: Pointer to an array of @num_axis descriptors.
|
||||
* @intervals: Descriptor of available update intervals.
|
||||
* @sensor_config: A bitmask reporting the current sensor configuration as
|
||||
* detailed in the SCMI specification: it can accessed and
|
||||
* modified through the accompanying macros.
|
||||
* @name: NULL-terminated string representing sensor name as advertised by
|
||||
* SCMI platform.
|
||||
* @extended_scalar_attrs: Flag to indicate the presence of additional extended
|
||||
* attributes for this sensor.
|
||||
* @sensor_power: Extended attribute representing the average power
|
||||
* consumed by the sensor in microwatts (uW) when it is active.
|
||||
* Reported here only for scalar sensors.
|
||||
* Set to 0 if not reported by this sensor.
|
||||
* @resolution: Extended attribute representing the resolution of the sensor.
|
||||
* Reported here only for scalar sensors.
|
||||
* Set to 0 if not reported by this sensor.
|
||||
* @exponent: Extended attribute representing the power-of-10 multiplier that is
|
||||
* applied to the resolution field.
|
||||
* Reported here only for scalar sensors.
|
||||
* Set to 0 if not reported by this sensor.
|
||||
* @scalar_attrs: Extended attributes representing minimum and maximum
|
||||
* measurable values by this sensor.
|
||||
* Reported here only for scalar sensors.
|
||||
* Set to 0 if not reported by this sensor.
|
||||
*/
|
||||
struct scmi_sensor_info {
|
||||
unsigned int id;
|
||||
unsigned int type;
|
||||
int scale;
|
||||
unsigned int num_trip_points;
|
||||
bool async;
|
||||
bool update;
|
||||
bool timestamped;
|
||||
int tstamp_scale;
|
||||
unsigned int num_axis;
|
||||
struct scmi_sensor_axis_info *axis;
|
||||
struct scmi_sensor_intervals_info intervals;
|
||||
unsigned int sensor_config;
|
||||
#define SCMI_SENS_CFG_UPDATE_SECS_MASK GENMASK(31, 16)
|
||||
#define SCMI_SENS_CFG_GET_UPDATE_SECS(x) \
|
||||
FIELD_GET(SCMI_SENS_CFG_UPDATE_SECS_MASK, (x))
|
||||
|
||||
#define SCMI_SENS_CFG_UPDATE_EXP_MASK GENMASK(15, 11)
|
||||
#define SCMI_SENS_CFG_GET_UPDATE_EXP(x) \
|
||||
({ \
|
||||
int __signed_exp = \
|
||||
FIELD_GET(SCMI_SENS_CFG_UPDATE_EXP_MASK, (x)); \
|
||||
\
|
||||
if (__signed_exp & BIT(4)) \
|
||||
__signed_exp |= GENMASK(31, 5); \
|
||||
__signed_exp; \
|
||||
})
|
||||
|
||||
#define SCMI_SENS_CFG_ROUND_MASK GENMASK(10, 9)
|
||||
#define SCMI_SENS_CFG_ROUND_AUTO 2
|
||||
#define SCMI_SENS_CFG_ROUND_UP 1
|
||||
#define SCMI_SENS_CFG_ROUND_DOWN 0
|
||||
|
||||
#define SCMI_SENS_CFG_TSTAMP_ENABLED_MASK BIT(1)
|
||||
#define SCMI_SENS_CFG_TSTAMP_ENABLE 1
|
||||
#define SCMI_SENS_CFG_TSTAMP_DISABLE 0
|
||||
#define SCMI_SENS_CFG_IS_TSTAMP_ENABLED(x) \
|
||||
FIELD_GET(SCMI_SENS_CFG_TSTAMP_ENABLED_MASK, (x))
|
||||
|
||||
#define SCMI_SENS_CFG_SENSOR_ENABLED_MASK BIT(0)
|
||||
#define SCMI_SENS_CFG_SENSOR_ENABLE 1
|
||||
#define SCMI_SENS_CFG_SENSOR_DISABLE 0
|
||||
char name[SCMI_MAX_STR_SIZE];
|
||||
#define SCMI_SENS_CFG_IS_ENABLED(x) FIELD_GET(BIT(0), (x))
|
||||
bool extended_scalar_attrs;
|
||||
unsigned int sensor_power;
|
||||
unsigned int resolution;
|
||||
int exponent;
|
||||
struct scmi_range_attrs scalar_attrs;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -164,11 +332,100 @@ struct scmi_sensor_info {
|
|||
*/
|
||||
enum scmi_sensor_class {
|
||||
NONE = 0x0,
|
||||
UNSPEC = 0x1,
|
||||
TEMPERATURE_C = 0x2,
|
||||
TEMPERATURE_F = 0x3,
|
||||
TEMPERATURE_K = 0x4,
|
||||
VOLTAGE = 0x5,
|
||||
CURRENT = 0x6,
|
||||
POWER = 0x7,
|
||||
ENERGY = 0x8,
|
||||
CHARGE = 0x9,
|
||||
VOLTAMPERE = 0xA,
|
||||
NITS = 0xB,
|
||||
LUMENS = 0xC,
|
||||
LUX = 0xD,
|
||||
CANDELAS = 0xE,
|
||||
KPA = 0xF,
|
||||
PSI = 0x10,
|
||||
NEWTON = 0x11,
|
||||
CFM = 0x12,
|
||||
RPM = 0x13,
|
||||
HERTZ = 0x14,
|
||||
SECS = 0x15,
|
||||
MINS = 0x16,
|
||||
HOURS = 0x17,
|
||||
DAYS = 0x18,
|
||||
WEEKS = 0x19,
|
||||
MILS = 0x1A,
|
||||
INCHES = 0x1B,
|
||||
FEET = 0x1C,
|
||||
CUBIC_INCHES = 0x1D,
|
||||
CUBIC_FEET = 0x1E,
|
||||
METERS = 0x1F,
|
||||
CUBIC_CM = 0x20,
|
||||
CUBIC_METERS = 0x21,
|
||||
LITERS = 0x22,
|
||||
FLUID_OUNCES = 0x23,
|
||||
RADIANS = 0x24,
|
||||
STERADIANS = 0x25,
|
||||
REVOLUTIONS = 0x26,
|
||||
CYCLES = 0x27,
|
||||
GRAVITIES = 0x28,
|
||||
OUNCES = 0x29,
|
||||
POUNDS = 0x2A,
|
||||
FOOT_POUNDS = 0x2B,
|
||||
OUNCE_INCHES = 0x2C,
|
||||
GAUSS = 0x2D,
|
||||
GILBERTS = 0x2E,
|
||||
HENRIES = 0x2F,
|
||||
FARADS = 0x30,
|
||||
OHMS = 0x31,
|
||||
SIEMENS = 0x32,
|
||||
MOLES = 0x33,
|
||||
BECQUERELS = 0x34,
|
||||
PPM = 0x35,
|
||||
DECIBELS = 0x36,
|
||||
DBA = 0x37,
|
||||
DBC = 0x38,
|
||||
GRAYS = 0x39,
|
||||
SIEVERTS = 0x3A,
|
||||
COLOR_TEMP_K = 0x3B,
|
||||
BITS = 0x3C,
|
||||
BYTES = 0x3D,
|
||||
WORDS = 0x3E,
|
||||
DWORDS = 0x3F,
|
||||
QWORDS = 0x40,
|
||||
PERCENTAGE = 0x41,
|
||||
PASCALS = 0x42,
|
||||
COUNTS = 0x43,
|
||||
GRAMS = 0x44,
|
||||
NEWTON_METERS = 0x45,
|
||||
HITS = 0x46,
|
||||
MISSES = 0x47,
|
||||
RETRIES = 0x48,
|
||||
OVERRUNS = 0x49,
|
||||
UNDERRUNS = 0x4A,
|
||||
COLLISIONS = 0x4B,
|
||||
PACKETS = 0x4C,
|
||||
MESSAGES = 0x4D,
|
||||
CHARS = 0x4E,
|
||||
ERRORS = 0x4F,
|
||||
CORRECTED_ERRS = 0x50,
|
||||
UNCORRECTABLE_ERRS = 0x51,
|
||||
SQ_MILS = 0x52,
|
||||
SQ_INCHES = 0x53,
|
||||
SQ_FEET = 0x54,
|
||||
SQ_CM = 0x55,
|
||||
SQ_METERS = 0x56,
|
||||
RADIANS_SEC = 0x57,
|
||||
BPM = 0x58,
|
||||
METERS_SEC_SQUARED = 0x59,
|
||||
METERS_SEC = 0x5A,
|
||||
CUBIC_METERS_SEC = 0x5B,
|
||||
MM_MERCURY = 0x5C,
|
||||
RADIANS_SEC_SQUARED = 0x5D,
|
||||
OEM_UNIT = 0xFF
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -179,6 +436,13 @@ enum scmi_sensor_class {
|
|||
* @info_get: get the information of the specified sensor
|
||||
* @trip_point_config: selects and configures a trip-point of interest
|
||||
* @reading_get: gets the current value of the sensor
|
||||
* @reading_get_timestamped: gets the current value and timestamp, when
|
||||
* available, of the sensor. (as of v3.0 spec)
|
||||
* Supports multi-axis sensors for sensors which
|
||||
* supports it and if the @reading array size of
|
||||
* @count entry equals the sensor num_axis
|
||||
* @config_get: Get sensor current configuration
|
||||
* @config_set: Set sensor current configuration
|
||||
*/
|
||||
struct scmi_sensor_ops {
|
||||
int (*count_get)(const struct scmi_handle *handle);
|
||||
|
@ -188,6 +452,13 @@ struct scmi_sensor_ops {
|
|||
u32 sensor_id, u8 trip_id, u64 trip_value);
|
||||
int (*reading_get)(const struct scmi_handle *handle, u32 sensor_id,
|
||||
u64 *value);
|
||||
int (*reading_get_timestamped)(const struct scmi_handle *handle,
|
||||
u32 sensor_id, u8 count,
|
||||
struct scmi_sensor_reading *readings);
|
||||
int (*config_get)(const struct scmi_handle *handle,
|
||||
u32 sensor_id, u32 *sensor_config);
|
||||
int (*config_set)(const struct scmi_handle *handle,
|
||||
u32 sensor_id, u32 sensor_config);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -451,6 +722,7 @@ enum scmi_notification_events {
|
|||
SCMI_EVENT_PERFORMANCE_LIMITS_CHANGED = 0x0,
|
||||
SCMI_EVENT_PERFORMANCE_LEVEL_CHANGED = 0x1,
|
||||
SCMI_EVENT_SENSOR_TRIP_POINT_EVENT = 0x0,
|
||||
SCMI_EVENT_SENSOR_UPDATE = 0x1,
|
||||
SCMI_EVENT_RESET_ISSUED = 0x0,
|
||||
SCMI_EVENT_BASE_ERROR_EVENT = 0x0,
|
||||
SCMI_EVENT_SYSTEM_POWER_STATE_NOTIFIER = 0x0,
|
||||
|
@ -492,6 +764,14 @@ struct scmi_sensor_trip_point_report {
|
|||
unsigned int trip_point_desc;
|
||||
};
|
||||
|
||||
struct scmi_sensor_update_report {
|
||||
ktime_t timestamp;
|
||||
unsigned int agent_id;
|
||||
unsigned int sensor_id;
|
||||
unsigned int readings_count;
|
||||
struct scmi_sensor_reading readings[];
|
||||
};
|
||||
|
||||
struct scmi_reset_issued_report {
|
||||
ktime_t timestamp;
|
||||
unsigned int agent_id;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue