Merge tag 'char-misc-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull char/misc driver updates from Greg KH: "Here is the large set of char/misc driver patches for 5.8-rc1 Included in here are: - habanalabs driver updates, loads - mhi bus driver updates - extcon driver updates - clk driver updates (approved by the clock maintainer) - firmware driver updates - fpga driver updates - gnss driver updates - coresight driver updates - interconnect driver updates - parport driver updates (it's still alive!) - nvmem driver updates - soundwire driver updates - visorbus driver updates - w1 driver updates - various misc driver updates In short, loads of different driver subsystem updates along with the drivers as well. All have been in linux-next for a while with no reported issues" * tag 'char-misc-5.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (233 commits) habanalabs: correctly cast u64 to void* habanalabs: initialize variable to default value extcon: arizona: Fix runtime PM imbalance on error extcon: max14577: Add proper dt-compatible strings extcon: adc-jack: Fix an error handling path in 'adc_jack_probe()' extcon: remove redundant assignment to variable idx w1: omap-hdq: print dev_err if irq flags are not cleared w1: omap-hdq: fix interrupt handling which did show spurious timeouts w1: omap-hdq: fix return value to be -1 if there is a timeout w1: omap-hdq: cleanup to add missing newline for some dev_dbg /dev/mem: Revoke mappings when a driver claims the region misc: xilinx-sdfec: convert get_user_pages() --> pin_user_pages() misc: xilinx-sdfec: cleanup return value in xsdfec_table_write() misc: xilinx-sdfec: improve get_user_pages_fast() error handling nvmem: qfprom: remove incorrect write support habanalabs: handle MMU cache invalidation timeout habanalabs: don't allow hard reset with open processes habanalabs: GAUDI does not support soft-reset habanalabs: add print for soft reset due to event habanalabs: improve MMU cache invalidation code ...
This commit is contained in:
@@ -100,10 +100,12 @@ union coresight_dev_subtype {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct coresight_platform_data - data harvested from the DT specification
|
||||
* @nr_inport: number of input ports for this component.
|
||||
* @nr_outport: number of output ports for this component.
|
||||
* @conns: Array of nr_outport connections from this component
|
||||
* struct coresight_platform_data - data harvested from the firmware
|
||||
* specification.
|
||||
*
|
||||
* @nr_inport: Number of elements for the input connections.
|
||||
* @nr_outport: Number of elements for the output connections.
|
||||
* @conns: Sparse array of nr_outport connections from this component.
|
||||
*/
|
||||
struct coresight_platform_data {
|
||||
int nr_inport;
|
||||
@@ -140,12 +142,28 @@ struct coresight_desc {
|
||||
* @chid_fwnode: remote component's fwnode handle.
|
||||
* @child_dev: a @coresight_device representation of the component
|
||||
connected to @outport.
|
||||
* @link: Representation of the connection as a sysfs link.
|
||||
*/
|
||||
struct coresight_connection {
|
||||
int outport;
|
||||
int child_port;
|
||||
struct fwnode_handle *child_fwnode;
|
||||
struct coresight_device *child_dev;
|
||||
struct coresight_sysfs_link *link;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct coresight_sysfs_link - representation of a connection in sysfs.
|
||||
* @orig: Originating (master) coresight device for the link.
|
||||
* @orig_name: Name to use for the link orig->target.
|
||||
* @target: Target (slave) coresight device for the link.
|
||||
* @target_name: Name to use for the link target->orig.
|
||||
*/
|
||||
struct coresight_sysfs_link {
|
||||
struct coresight_device *orig;
|
||||
const char *orig_name;
|
||||
struct coresight_device *target;
|
||||
const char *target_name;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -165,6 +183,9 @@ struct coresight_connection {
|
||||
* @ea: Device attribute for sink representation under PMU directory.
|
||||
* @ect_dev: Associated cross trigger device. Not part of the trace data
|
||||
* path or connections.
|
||||
* @nr_links: number of sysfs links created to other components from this
|
||||
* device. These will appear in the "connections" group.
|
||||
* @has_conns_grp: Have added a "connections" group for sysfs links.
|
||||
*/
|
||||
struct coresight_device {
|
||||
struct coresight_platform_data *pdata;
|
||||
@@ -180,6 +201,9 @@ struct coresight_device {
|
||||
struct dev_ext_attribute *ea;
|
||||
/* cross trigger handling */
|
||||
struct coresight_device *ect_dev;
|
||||
/* sysfs links between components */
|
||||
int nr_links;
|
||||
bool has_conns_grp;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -142,6 +142,7 @@ enum cpuhp_state {
|
||||
CPUHP_AP_ARM_XEN_STARTING,
|
||||
CPUHP_AP_ARM_KVMPV_STARTING,
|
||||
CPUHP_AP_ARM_CORESIGHT_STARTING,
|
||||
CPUHP_AP_ARM_CORESIGHT_CTI_STARTING,
|
||||
CPUHP_AP_ARM64_ISNDEP_STARTING,
|
||||
CPUHP_AP_SMPCFD_DYING,
|
||||
CPUHP_AP_X86_TBOOT_DYING,
|
||||
|
@@ -54,32 +54,25 @@
|
||||
* Secure monitor software doesn't recognize the request.
|
||||
*
|
||||
* INTEL_SIP_SMC_STATUS_OK:
|
||||
* FPGA configuration completed successfully,
|
||||
* In case of FPGA configuration write operation, it means secure monitor
|
||||
* software can accept the next chunk of FPGA configuration data.
|
||||
* Secure monitor software accepts the service client's request.
|
||||
*
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY:
|
||||
* In case of FPGA configuration write operation, it means secure monitor
|
||||
* software is still processing previous data & can't accept the next chunk
|
||||
* of data. Service driver needs to issue
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE call to query the
|
||||
* completed block(s).
|
||||
* INTEL_SIP_SMC_STATUS_BUSY:
|
||||
* Secure monitor software is still processing service client's request.
|
||||
*
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR:
|
||||
* There is error during the FPGA configuration process.
|
||||
* INTEL_SIP_SMC_STATUS_REJECTED:
|
||||
* Secure monitor software reject the service client's request.
|
||||
*
|
||||
* INTEL_SIP_SMC_REG_ERROR:
|
||||
* There is error during a read or write operation of the protected registers.
|
||||
* INTEL_SIP_SMC_STATUS_ERROR:
|
||||
* There is error during the process of service request.
|
||||
*
|
||||
* INTEL_SIP_SMC_RSU_ERROR:
|
||||
* There is error during a remote status update.
|
||||
* There is error during the process of remote status update request.
|
||||
*/
|
||||
#define INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION 0xFFFFFFFF
|
||||
#define INTEL_SIP_SMC_STATUS_OK 0x0
|
||||
#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY 0x1
|
||||
#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_REJECTED 0x2
|
||||
#define INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR 0x4
|
||||
#define INTEL_SIP_SMC_REG_ERROR 0x5
|
||||
#define INTEL_SIP_SMC_STATUS_BUSY 0x1
|
||||
#define INTEL_SIP_SMC_STATUS_REJECTED 0x2
|
||||
#define INTEL_SIP_SMC_STATUS_ERROR 0x4
|
||||
#define INTEL_SIP_SMC_RSU_ERROR 0x7
|
||||
|
||||
/**
|
||||
@@ -95,7 +88,7 @@
|
||||
* a2-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, or INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, or INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1-3: not used.
|
||||
*/
|
||||
#define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_START 1
|
||||
@@ -115,8 +108,8 @@
|
||||
* a3-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY or
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_BUSY or
|
||||
* INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1: 64bit physical address of 1st completed memory block if any completed
|
||||
* block, otherwise zero value.
|
||||
* a2: 64bit physical address of 2nd completed memory block if any completed
|
||||
@@ -133,15 +126,15 @@
|
||||
*
|
||||
* Sync call used by service driver at EL1 to track the completed write
|
||||
* transactions. This request is called after INTEL_SIP_SMC_FPGA_CONFIG_WRITE
|
||||
* call returns INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY.
|
||||
* call returns INTEL_SIP_SMC_STATUS_BUSY.
|
||||
*
|
||||
* Call register usage:
|
||||
* a0: INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE.
|
||||
* a1-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY or
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FPGA_BUSY or
|
||||
* INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1: 64bit physical address of 1st completed memory block.
|
||||
* a2: 64bit physical address of 2nd completed memory block if
|
||||
* any completed block, otherwise zero value.
|
||||
@@ -164,8 +157,8 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
|
||||
* a1-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FPGA_CONFIG_STATUS_BUSY or
|
||||
* INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_BUSY or
|
||||
* INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1-3: not used.
|
||||
*/
|
||||
#define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_ISDONE 4
|
||||
@@ -183,7 +176,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
|
||||
* a1-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1: start of physical address of reserved memory block.
|
||||
* a2: size of reserved memory block.
|
||||
* a3: not used.
|
||||
@@ -203,7 +196,7 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
|
||||
* a1-7: not used.
|
||||
*
|
||||
* Return status:
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_FPGA_CONFIG_STATUS_ERROR.
|
||||
* a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR.
|
||||
* a1-3: not used.
|
||||
*/
|
||||
#define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK 6
|
||||
|
@@ -18,45 +18,37 @@
|
||||
/**
|
||||
* Status of the sent command, in bit number
|
||||
*
|
||||
* SVC_COMMAND_STATUS_RECONFIG_REQUEST_OK:
|
||||
* Secure firmware accepts the request of FPGA reconfiguration.
|
||||
* SVC_STATUS_OK:
|
||||
* Secure firmware accepts the request issued by one of service clients.
|
||||
*
|
||||
* SVC_STATUS_RECONFIG_BUFFER_SUBMITTED:
|
||||
* Service client successfully submits FPGA configuration
|
||||
* data buffer to secure firmware.
|
||||
* SVC_STATUS_BUFFER_SUBMITTED:
|
||||
* Service client successfully submits data buffer to secure firmware.
|
||||
*
|
||||
* SVC_COMMAND_STATUS_RECONFIG_BUFFER_DONE:
|
||||
* SVC_STATUS_BUFFER_DONE:
|
||||
* Secure firmware completes data process, ready to accept the
|
||||
* next WRITE transaction.
|
||||
*
|
||||
* SVC_COMMAND_STATUS_RECONFIG_COMPLETED:
|
||||
* Secure firmware completes FPGA configuration successfully, FPGA should
|
||||
* be in user mode.
|
||||
* SVC_STATUS_COMPLETED:
|
||||
* Secure firmware completes service request successfully. In case of
|
||||
* FPGA configuration, FPGA should be in user mode.
|
||||
*
|
||||
* SVC_COMMAND_STATUS_RECONFIG_BUSY:
|
||||
* FPGA configuration is still in process.
|
||||
* SVC_COMMAND_STATUS_BUSY:
|
||||
* Service request is still in process.
|
||||
*
|
||||
* SVC_COMMAND_STATUS_RECONFIG_ERROR:
|
||||
* Error encountered during FPGA configuration.
|
||||
* SVC_COMMAND_STATUS_ERROR:
|
||||
* Error encountered during the process of the service request.
|
||||
*
|
||||
* SVC_STATUS_RSU_OK:
|
||||
* Secure firmware accepts the request of remote status update (RSU).
|
||||
*
|
||||
* SVC_STATUS_RSU_ERROR:
|
||||
* Error encountered during remote system update.
|
||||
*
|
||||
* SVC_STATUS_RSU_NO_SUPPORT:
|
||||
* Secure firmware doesn't support RSU retry or notify feature.
|
||||
* SVC_STATUS_NO_SUPPORT:
|
||||
* Secure firmware doesn't support requested features such as RSU retry
|
||||
* or RSU notify.
|
||||
*/
|
||||
#define SVC_STATUS_RECONFIG_REQUEST_OK 0
|
||||
#define SVC_STATUS_RECONFIG_BUFFER_SUBMITTED 1
|
||||
#define SVC_STATUS_RECONFIG_BUFFER_DONE 2
|
||||
#define SVC_STATUS_RECONFIG_COMPLETED 3
|
||||
#define SVC_STATUS_RECONFIG_BUSY 4
|
||||
#define SVC_STATUS_RECONFIG_ERROR 5
|
||||
#define SVC_STATUS_RSU_OK 6
|
||||
#define SVC_STATUS_RSU_ERROR 7
|
||||
#define SVC_STATUS_RSU_NO_SUPPORT 8
|
||||
#define SVC_STATUS_OK 0
|
||||
#define SVC_STATUS_BUFFER_SUBMITTED 1
|
||||
#define SVC_STATUS_BUFFER_DONE 2
|
||||
#define SVC_STATUS_COMPLETED 3
|
||||
#define SVC_STATUS_BUSY 4
|
||||
#define SVC_STATUS_ERROR 5
|
||||
#define SVC_STATUS_NO_SUPPORT 6
|
||||
|
||||
/**
|
||||
* Flag bit for COMMAND_RECONFIG
|
||||
@@ -84,32 +76,29 @@ struct stratix10_svc_chan;
|
||||
* @COMMAND_NOOP: do 'dummy' request for integration/debug/trouble-shooting
|
||||
*
|
||||
* @COMMAND_RECONFIG: ask for FPGA configuration preparation, return status
|
||||
* is SVC_STATUS_RECONFIG_REQUEST_OK
|
||||
* is SVC_STATUS_OK
|
||||
*
|
||||
* @COMMAND_RECONFIG_DATA_SUBMIT: submit buffer(s) of bit-stream data for the
|
||||
* FPGA configuration, return status is SVC_STATUS_RECONFIG_BUFFER_SUBMITTED,
|
||||
* or SVC_STATUS_RECONFIG_ERROR
|
||||
* FPGA configuration, return status is SVC_STATUS_SUBMITTED or SVC_STATUS_ERROR
|
||||
*
|
||||
* @COMMAND_RECONFIG_DATA_CLAIM: check the status of the configuration, return
|
||||
* status is SVC_STATUS_RECONFIG_COMPLETED, or SVC_STATUS_RECONFIG_BUSY, or
|
||||
* SVC_STATUS_RECONFIG_ERROR
|
||||
* status is SVC_STATUS_COMPLETED, or SVC_STATUS_BUSY, or SVC_STATUS_ERROR
|
||||
*
|
||||
* @COMMAND_RECONFIG_STATUS: check the status of the configuration, return
|
||||
* status is SVC_STATUS_RECONFIG_COMPLETED, or SVC_STATUS_RECONFIG_BUSY, or
|
||||
* SVC_STATUS_RECONFIG_ERROR
|
||||
* status is SVC_STATUS_COMPLETED, or SVC_STATUS_BUSY, or SVC_STATUS_ERROR
|
||||
*
|
||||
* @COMMAND_RSU_STATUS: request remote system update boot log, return status
|
||||
* is log data or SVC_STATUS_RSU_ERROR
|
||||
*
|
||||
* @COMMAND_RSU_UPDATE: set the offset of the bitstream to boot after reboot,
|
||||
* return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
|
||||
* return status is SVC_STATUS_OK or SVC_STATUS_ERROR
|
||||
*
|
||||
* @COMMAND_RSU_NOTIFY: report the status of hard processor system
|
||||
* software to firmware, return status is SVC_STATUS_RSU_OK or
|
||||
* SVC_STATUS_RSU_ERROR
|
||||
* software to firmware, return status is SVC_STATUS_OK or
|
||||
* SVC_STATUS_ERROR
|
||||
*
|
||||
* @COMMAND_RSU_RETRY: query firmware for the current image's retry counter,
|
||||
* return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
|
||||
* return status is SVC_STATUS_OK or SVC_STATUS_ERROR
|
||||
*/
|
||||
enum stratix10_svc_command_code {
|
||||
COMMAND_NOOP = 0,
|
||||
|
@@ -42,6 +42,8 @@
|
||||
|
||||
#define ZYNQMP_PM_MAX_QOS 100U
|
||||
|
||||
#define GSS_NUM_REGS (4)
|
||||
|
||||
/* Node capabilities */
|
||||
#define ZYNQMP_PM_CAPABILITY_ACCESS 0x1U
|
||||
#define ZYNQMP_PM_CAPABILITY_CONTEXT 0x2U
|
||||
@@ -62,6 +64,7 @@
|
||||
|
||||
enum pm_api_id {
|
||||
PM_GET_API_VERSION = 1,
|
||||
PM_SYSTEM_SHUTDOWN = 12,
|
||||
PM_REQUEST_NODE = 13,
|
||||
PM_RELEASE_NODE,
|
||||
PM_SET_REQUIREMENT,
|
||||
@@ -107,6 +110,12 @@ enum pm_ioctl_id {
|
||||
IOCTL_GET_PLL_FRAC_MODE,
|
||||
IOCTL_SET_PLL_FRAC_DATA,
|
||||
IOCTL_GET_PLL_FRAC_DATA,
|
||||
IOCTL_WRITE_GGS = 12,
|
||||
IOCTL_READ_GGS = 13,
|
||||
IOCTL_WRITE_PGGS = 14,
|
||||
IOCTL_READ_PGGS = 15,
|
||||
/* Set healthy bit value */
|
||||
IOCTL_SET_BOOT_HEALTH_STATUS = 17,
|
||||
};
|
||||
|
||||
enum pm_query_id {
|
||||
@@ -279,6 +288,18 @@ enum dll_reset_type {
|
||||
PM_DLL_RESET_PULSE,
|
||||
};
|
||||
|
||||
enum zynqmp_pm_shutdown_type {
|
||||
ZYNQMP_PM_SHUTDOWN_TYPE_SHUTDOWN,
|
||||
ZYNQMP_PM_SHUTDOWN_TYPE_RESET,
|
||||
ZYNQMP_PM_SHUTDOWN_TYPE_SETSCOPE_ONLY,
|
||||
};
|
||||
|
||||
enum zynqmp_pm_shutdown_subtype {
|
||||
ZYNQMP_PM_SHUTDOWN_SUBTYPE_SUBSYSTEM,
|
||||
ZYNQMP_PM_SHUTDOWN_SUBTYPE_PS_ONLY,
|
||||
ZYNQMP_PM_SHUTDOWN_SUBTYPE_SYSTEM,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct zynqmp_pm_query_data - PM query data
|
||||
* @qid: query ID
|
||||
@@ -293,49 +314,199 @@ struct zynqmp_pm_query_data {
|
||||
u32 arg3;
|
||||
};
|
||||
|
||||
struct zynqmp_eemi_ops {
|
||||
int (*get_api_version)(u32 *version);
|
||||
int (*get_chipid)(u32 *idcode, u32 *version);
|
||||
int (*fpga_load)(const u64 address, const u32 size, const u32 flags);
|
||||
int (*fpga_get_status)(u32 *value);
|
||||
int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out);
|
||||
int (*clock_enable)(u32 clock_id);
|
||||
int (*clock_disable)(u32 clock_id);
|
||||
int (*clock_getstate)(u32 clock_id, u32 *state);
|
||||
int (*clock_setdivider)(u32 clock_id, u32 divider);
|
||||
int (*clock_getdivider)(u32 clock_id, u32 *divider);
|
||||
int (*clock_setrate)(u32 clock_id, u64 rate);
|
||||
int (*clock_getrate)(u32 clock_id, u64 *rate);
|
||||
int (*clock_setparent)(u32 clock_id, u32 parent_id);
|
||||
int (*clock_getparent)(u32 clock_id, u32 *parent_id);
|
||||
int (*ioctl)(u32 node_id, u32 ioctl_id, u32 arg1, u32 arg2, u32 *out);
|
||||
int (*reset_assert)(const enum zynqmp_pm_reset reset,
|
||||
const enum zynqmp_pm_reset_action assert_flag);
|
||||
int (*reset_get_status)(const enum zynqmp_pm_reset reset, u32 *status);
|
||||
int (*init_finalize)(void);
|
||||
int (*set_suspend_mode)(u32 mode);
|
||||
int (*request_node)(const u32 node,
|
||||
const u32 capabilities,
|
||||
const u32 qos,
|
||||
const enum zynqmp_pm_request_ack ack);
|
||||
int (*release_node)(const u32 node);
|
||||
int (*set_requirement)(const u32 node,
|
||||
const u32 capabilities,
|
||||
const u32 qos,
|
||||
const enum zynqmp_pm_request_ack ack);
|
||||
int (*aes)(const u64 address, u32 *out);
|
||||
};
|
||||
|
||||
int zynqmp_pm_invoke_fn(u32 pm_api_id, u32 arg0, u32 arg1,
|
||||
u32 arg2, u32 arg3, u32 *ret_payload);
|
||||
|
||||
#if IS_REACHABLE(CONFIG_ZYNQMP_FIRMWARE)
|
||||
const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void);
|
||||
int zynqmp_pm_get_api_version(u32 *version);
|
||||
int zynqmp_pm_get_chipid(u32 *idcode, u32 *version);
|
||||
int zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata, u32 *out);
|
||||
int zynqmp_pm_clock_enable(u32 clock_id);
|
||||
int zynqmp_pm_clock_disable(u32 clock_id);
|
||||
int zynqmp_pm_clock_getstate(u32 clock_id, u32 *state);
|
||||
int zynqmp_pm_clock_setdivider(u32 clock_id, u32 divider);
|
||||
int zynqmp_pm_clock_getdivider(u32 clock_id, u32 *divider);
|
||||
int zynqmp_pm_clock_setrate(u32 clock_id, u64 rate);
|
||||
int zynqmp_pm_clock_getrate(u32 clock_id, u64 *rate);
|
||||
int zynqmp_pm_clock_setparent(u32 clock_id, u32 parent_id);
|
||||
int zynqmp_pm_clock_getparent(u32 clock_id, u32 *parent_id);
|
||||
int zynqmp_pm_set_pll_frac_mode(u32 clk_id, u32 mode);
|
||||
int zynqmp_pm_get_pll_frac_mode(u32 clk_id, u32 *mode);
|
||||
int zynqmp_pm_set_pll_frac_data(u32 clk_id, u32 data);
|
||||
int zynqmp_pm_get_pll_frac_data(u32 clk_id, u32 *data);
|
||||
int zynqmp_pm_set_sd_tapdelay(u32 node_id, u32 type, u32 value);
|
||||
int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type);
|
||||
int zynqmp_pm_reset_assert(const enum zynqmp_pm_reset reset,
|
||||
const enum zynqmp_pm_reset_action assert_flag);
|
||||
int zynqmp_pm_reset_get_status(const enum zynqmp_pm_reset reset, u32 *status);
|
||||
int zynqmp_pm_init_finalize(void);
|
||||
int zynqmp_pm_set_suspend_mode(u32 mode);
|
||||
int zynqmp_pm_request_node(const u32 node, const u32 capabilities,
|
||||
const u32 qos, const enum zynqmp_pm_request_ack ack);
|
||||
int zynqmp_pm_release_node(const u32 node);
|
||||
int zynqmp_pm_set_requirement(const u32 node, const u32 capabilities,
|
||||
const u32 qos,
|
||||
const enum zynqmp_pm_request_ack ack);
|
||||
int zynqmp_pm_aes_engine(const u64 address, u32 *out);
|
||||
int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
|
||||
int zynqmp_pm_fpga_get_status(u32 *value);
|
||||
int zynqmp_pm_write_ggs(u32 index, u32 value);
|
||||
int zynqmp_pm_read_ggs(u32 index, u32 *value);
|
||||
int zynqmp_pm_write_pggs(u32 index, u32 value);
|
||||
int zynqmp_pm_read_pggs(u32 index, u32 *value);
|
||||
int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype);
|
||||
int zynqmp_pm_set_boot_health_status(u32 value);
|
||||
#else
|
||||
static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)
|
||||
{
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
static inline int zynqmp_pm_get_api_version(u32 *version)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_get_chipid(u32 *idcode, u32 *version)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_query_data(struct zynqmp_pm_query_data qdata,
|
||||
u32 *out)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_enable(u32 clock_id)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_disable(u32 clock_id)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_getstate(u32 clock_id, u32 *state)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_setdivider(u32 clock_id, u32 divider)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_getdivider(u32 clock_id, u32 *divider)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_setrate(u32 clock_id, u64 rate)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_getrate(u32 clock_id, u64 *rate)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_setparent(u32 clock_id, u32 parent_id)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_clock_getparent(u32 clock_id, u32 *parent_id)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_pll_frac_mode(u32 clk_id, u32 mode)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_get_pll_frac_mode(u32 clk_id, u32 *mode)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_pll_frac_data(u32 clk_id, u32 data)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_get_pll_frac_data(u32 clk_id, u32 *data)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_sd_tapdelay(u32 node_id, u32 type, u32 value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_sd_dll_reset(u32 node_id, u32 type)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_reset_assert(const enum zynqmp_pm_reset reset,
|
||||
const enum zynqmp_pm_reset_action assert_flag)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_reset_get_status(const enum zynqmp_pm_reset reset,
|
||||
u32 *status)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_init_finalize(void)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_suspend_mode(u32 mode)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_request_node(const u32 node, const u32 capabilities,
|
||||
const u32 qos,
|
||||
const enum zynqmp_pm_request_ack ack)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_release_node(const u32 node)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_requirement(const u32 node,
|
||||
const u32 capabilities,
|
||||
const u32 qos,
|
||||
const enum zynqmp_pm_request_ack ack)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_aes_engine(const u64 address, u32 *out)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_fpga_load(const u64 address, const u32 size,
|
||||
const u32 flags)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_fpga_get_status(u32 *value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_write_ggs(u32 index, u32 value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_read_ggs(u32 index, u32 *value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_write_pggs(u32 index, u32 value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_read_pggs(u32 index, u32 *value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_system_shutdown(const u32 type, const u32 subtype)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline int zynqmp_pm_set_boot_health_status(u32 value)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __FIRMWARE_ZYNQMP_H__ */
|
||||
|
@@ -345,7 +345,7 @@ struct gb_cap_get_ims_certificate_request {
|
||||
|
||||
struct gb_cap_get_ims_certificate_response {
|
||||
__u8 result_code;
|
||||
__u8 certificate[0];
|
||||
__u8 certificate[];
|
||||
} __packed;
|
||||
|
||||
/* CAP authenticate request/response */
|
||||
@@ -358,7 +358,7 @@ struct gb_cap_authenticate_request {
|
||||
struct gb_cap_authenticate_response {
|
||||
__u8 result_code;
|
||||
__u8 response[64];
|
||||
__u8 signature[0];
|
||||
__u8 signature[];
|
||||
} __packed;
|
||||
|
||||
|
||||
@@ -642,7 +642,7 @@ struct gb_hid_get_report_request {
|
||||
struct gb_hid_set_report_request {
|
||||
__u8 report_type;
|
||||
__u8 report_id;
|
||||
__u8 report[0];
|
||||
__u8 report[];
|
||||
} __packed;
|
||||
|
||||
/* HID input report request, via interrupt pipe */
|
||||
@@ -680,7 +680,7 @@ struct gb_i2c_transfer_op {
|
||||
|
||||
struct gb_i2c_transfer_request {
|
||||
__le16 op_count;
|
||||
struct gb_i2c_transfer_op ops[0]; /* op_count of these */
|
||||
struct gb_i2c_transfer_op ops[]; /* op_count of these */
|
||||
} __packed;
|
||||
struct gb_i2c_transfer_response {
|
||||
__u8 data[0]; /* inbound data */
|
||||
@@ -908,7 +908,7 @@ struct gb_spi_transfer_request {
|
||||
__u8 chip_select; /* of the spi device */
|
||||
__u8 mode; /* of the spi device */
|
||||
__le16 count;
|
||||
struct gb_spi_transfer transfers[0]; /* count of these */
|
||||
struct gb_spi_transfer transfers[]; /* count of these */
|
||||
} __packed;
|
||||
|
||||
struct gb_spi_transfer_response {
|
||||
@@ -1188,7 +1188,7 @@ struct gb_svc_pwrmon_rail_count_get_response {
|
||||
|
||||
struct gb_svc_pwrmon_rail_names_get_response {
|
||||
__u8 status;
|
||||
__u8 name[0][GB_SVC_PWRMON_RAIL_NAME_BUFSIZE];
|
||||
__u8 name[][GB_SVC_PWRMON_RAIL_NAME_BUFSIZE];
|
||||
} __packed;
|
||||
|
||||
#define GB_SVC_PWRMON_TYPE_CURR 0x01
|
||||
@@ -1281,7 +1281,7 @@ struct gb_svc_intf_oops_request {
|
||||
|
||||
struct gb_raw_send_request {
|
||||
__le32 len;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
|
||||
@@ -1300,7 +1300,7 @@ struct gb_raw_send_request {
|
||||
/* Represents data from AP -> Module */
|
||||
struct gb_uart_send_data_request {
|
||||
__le16 size;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
/* recv-data-request flags */
|
||||
@@ -1313,7 +1313,7 @@ struct gb_uart_send_data_request {
|
||||
struct gb_uart_recv_data_request {
|
||||
__le16 size;
|
||||
__u8 flags;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
struct gb_uart_receive_credits_request {
|
||||
@@ -1382,14 +1382,14 @@ struct gb_loopback_transfer_request {
|
||||
__le32 len;
|
||||
__le32 reserved0;
|
||||
__le32 reserved1;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
struct gb_loopback_transfer_response {
|
||||
__le32 len;
|
||||
__le32 reserved0;
|
||||
__le32 reserved1;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
/* SDIO */
|
||||
@@ -1530,13 +1530,13 @@ struct gb_sdio_transfer_request {
|
||||
|
||||
__le16 data_blocks;
|
||||
__le16 data_blksz;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
struct gb_sdio_transfer_response {
|
||||
__le16 data_blocks;
|
||||
__le16 data_blksz;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
/* event request: generated by module and is defined as unidirectional */
|
||||
@@ -1572,7 +1572,7 @@ struct gb_camera_configure_streams_request {
|
||||
__u8 flags;
|
||||
#define GB_CAMERA_CONFIGURE_STREAMS_TEST_ONLY 0x01
|
||||
__le16 padding;
|
||||
struct gb_camera_stream_config_request config[0];
|
||||
struct gb_camera_stream_config_request config[];
|
||||
} __packed;
|
||||
|
||||
/* Greybus Camera Configure Streams response payload */
|
||||
@@ -1593,7 +1593,7 @@ struct gb_camera_configure_streams_response {
|
||||
__u8 flags;
|
||||
__u8 padding[2];
|
||||
__le32 data_rate;
|
||||
struct gb_camera_stream_config_response config[0];
|
||||
struct gb_camera_stream_config_response config[];
|
||||
};
|
||||
|
||||
/* Greybus Camera Capture request payload - response has no payload */
|
||||
@@ -1602,7 +1602,7 @@ struct gb_camera_capture_request {
|
||||
__u8 streams;
|
||||
__u8 padding;
|
||||
__le16 num_frames;
|
||||
__u8 settings[0];
|
||||
__u8 settings[];
|
||||
} __packed;
|
||||
|
||||
/* Greybus Camera Flush response payload - request has no payload */
|
||||
@@ -1616,7 +1616,7 @@ struct gb_camera_metadata_request {
|
||||
__le16 frame_number;
|
||||
__u8 stream;
|
||||
__u8 padding;
|
||||
__u8 metadata[0];
|
||||
__u8 metadata[];
|
||||
} __packed;
|
||||
|
||||
/* Lights */
|
||||
@@ -1993,7 +1993,7 @@ struct gb_audio_integer64 {
|
||||
struct gb_audio_enumerated {
|
||||
__le32 items;
|
||||
__le16 names_length;
|
||||
__u8 names[0];
|
||||
__u8 names[];
|
||||
} __packed;
|
||||
|
||||
struct gb_audio_ctl_elem_info { /* See snd_ctl_elem_info in Linux source */
|
||||
@@ -2033,7 +2033,7 @@ struct gb_audio_widget {
|
||||
__u8 type; /* GB_AUDIO_WIDGET_TYPE_* */
|
||||
__u8 state; /* GB_AUDIO_WIDGET_STATE_* */
|
||||
__u8 ncontrols;
|
||||
struct gb_audio_control ctl[0]; /* 'ncontrols' entries */
|
||||
struct gb_audio_control ctl[]; /* 'ncontrols' entries */
|
||||
} __packed;
|
||||
|
||||
struct gb_audio_route {
|
||||
@@ -2059,7 +2059,7 @@ struct gb_audio_topology {
|
||||
* struct gb_audio_widget widgets[num_widgets];
|
||||
* struct gb_audio_route routes[num_routes];
|
||||
*/
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
struct gb_audio_get_topology_size_response {
|
||||
@@ -2157,7 +2157,7 @@ struct gb_audio_streaming_event_request {
|
||||
|
||||
struct gb_audio_send_data_request {
|
||||
__le64 timestamp;
|
||||
__u8 data[0];
|
||||
__u8 data[];
|
||||
} __packed;
|
||||
|
||||
|
||||
@@ -2171,7 +2171,7 @@ struct gb_audio_send_data_request {
|
||||
|
||||
struct gb_log_send_log_request {
|
||||
__le16 len;
|
||||
__u8 msg[0];
|
||||
__u8 msg[];
|
||||
} __packed;
|
||||
|
||||
#endif /* __GREYBUS_PROTOCOLS_H */
|
||||
|
@@ -28,7 +28,11 @@ struct device;
|
||||
struct icc_path *icc_get(struct device *dev, const int src_id,
|
||||
const int dst_id);
|
||||
struct icc_path *of_icc_get(struct device *dev, const char *name);
|
||||
struct icc_path *devm_of_icc_get(struct device *dev, const char *name);
|
||||
struct icc_path *of_icc_get_by_index(struct device *dev, int idx);
|
||||
void icc_put(struct icc_path *path);
|
||||
int icc_enable(struct icc_path *path);
|
||||
int icc_disable(struct icc_path *path);
|
||||
int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw);
|
||||
void icc_set_tag(struct icc_path *path, u32 tag);
|
||||
|
||||
@@ -46,10 +50,31 @@ static inline struct icc_path *of_icc_get(struct device *dev,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct icc_path *devm_of_icc_get(struct device *dev,
|
||||
const char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct icc_path *of_icc_get_by_index(struct device *dev, int idx)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void icc_put(struct icc_path *path)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int icc_enable(struct icc_path *path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int icc_disable(struct icc_path *path)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
|
||||
{
|
||||
return 0;
|
||||
|
@@ -302,5 +302,11 @@ struct resource *devm_request_free_mem_region(struct device *dev,
|
||||
struct resource *request_free_mem_region(struct resource *base,
|
||||
unsigned long size, const char *name);
|
||||
|
||||
#ifdef CONFIG_IO_STRICT_DEVMEM
|
||||
void revoke_devmem(struct resource *res);
|
||||
#else
|
||||
static inline void revoke_devmem(struct resource *res) { };
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _LINUX_IOPORT_H */
|
||||
|
@@ -331,8 +331,6 @@ struct mhi_controller_config {
|
||||
* @wlock: Lock for protecting device wakeup
|
||||
* @mhi_link_info: Device bandwidth info
|
||||
* @st_worker: State transition worker
|
||||
* @fw_worker: Firmware download worker
|
||||
* @syserr_worker: System error worker
|
||||
* @state_event: State change event
|
||||
* @status_cb: CB function to notify power states of the device (required)
|
||||
* @wake_get: CB function to assert device wake (optional)
|
||||
@@ -412,8 +410,6 @@ struct mhi_controller {
|
||||
spinlock_t wlock;
|
||||
struct mhi_link_info mhi_link_info;
|
||||
struct work_struct st_worker;
|
||||
struct work_struct fw_worker;
|
||||
struct work_struct syserr_worker;
|
||||
wait_queue_head_t state_event;
|
||||
|
||||
void (*status_cb)(struct mhi_controller *mhi_cntrl,
|
||||
@@ -572,6 +568,13 @@ void mhi_driver_unregister(struct mhi_driver *mhi_drv);
|
||||
void mhi_set_mhi_state(struct mhi_controller *mhi_cntrl,
|
||||
enum mhi_state state);
|
||||
|
||||
/**
|
||||
* mhi_notify - Notify the MHI client driver about client device status
|
||||
* @mhi_dev: MHI device instance
|
||||
* @cb_reason: MHI callback reason
|
||||
*/
|
||||
void mhi_notify(struct mhi_device *mhi_dev, enum mhi_callback cb_reason);
|
||||
|
||||
/**
|
||||
* mhi_prepare_for_power_up - Do pre-initialization before power up.
|
||||
* This is optional, call this before power up if
|
||||
@@ -608,6 +611,18 @@ void mhi_power_down(struct mhi_controller *mhi_cntrl, bool graceful);
|
||||
*/
|
||||
void mhi_unprepare_after_power_down(struct mhi_controller *mhi_cntrl);
|
||||
|
||||
/**
|
||||
* mhi_pm_suspend - Move MHI into a suspended state
|
||||
* @mhi_cntrl: MHI controller
|
||||
*/
|
||||
int mhi_pm_suspend(struct mhi_controller *mhi_cntrl);
|
||||
|
||||
/**
|
||||
* mhi_pm_resume - Resume MHI from suspended state
|
||||
* @mhi_cntrl: MHI controller
|
||||
*/
|
||||
int mhi_pm_resume(struct mhi_controller *mhi_cntrl);
|
||||
|
||||
/**
|
||||
* mhi_download_rddm_img - Download ramdump image from device for
|
||||
* debugging purpose.
|
||||
|
@@ -325,18 +325,10 @@ struct pardev_cb {
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
/* parport_register_device declares that a device is connected to a
|
||||
port, and tells the kernel all it needs to know.
|
||||
- pf is the preemption function (may be NULL for no callback)
|
||||
- kf is the wake-up function (may be NULL for no callback)
|
||||
- irq_func is the interrupt handler (may be NULL for no interrupts)
|
||||
- handle is a user pointer that gets handed to callback functions. */
|
||||
struct pardevice *parport_register_device(struct parport *port,
|
||||
const char *name,
|
||||
int (*pf)(void *), void (*kf)(void *),
|
||||
void (*irq_func)(void *),
|
||||
int flags, void *handle);
|
||||
|
||||
/*
|
||||
* parport_register_dev_model declares that a device is connected to a
|
||||
* port, and tells the kernel all it needs to know.
|
||||
*/
|
||||
struct pardevice *
|
||||
parport_register_dev_model(struct parport *port, const char *name,
|
||||
const struct pardev_cb *par_dev_cb, int cnt);
|
||||
|
@@ -1080,11 +1080,7 @@ struct pcr_ops {
|
||||
void (*stop_cmd)(struct rtsx_pcr *pcr);
|
||||
|
||||
void (*set_aspm)(struct rtsx_pcr *pcr, bool enable);
|
||||
int (*set_ltr_latency)(struct rtsx_pcr *pcr, u32 latency);
|
||||
int (*set_l1off_sub)(struct rtsx_pcr *pcr, u8 val);
|
||||
void (*set_l1off_cfg_sub_d0)(struct rtsx_pcr *pcr, int active);
|
||||
void (*full_on)(struct rtsx_pcr *pcr);
|
||||
void (*power_saving)(struct rtsx_pcr *pcr);
|
||||
void (*enable_ocp)(struct rtsx_pcr *pcr);
|
||||
void (*disable_ocp)(struct rtsx_pcr *pcr);
|
||||
void (*init_ocp)(struct rtsx_pcr *pcr);
|
||||
@@ -1108,13 +1104,6 @@ enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN};
|
||||
#define L1_SNOOZE_TEST_EN BIT(5)
|
||||
#define LTR_L1SS_PWR_GATE_CHECK_CARD_EN BIT(6)
|
||||
|
||||
enum dev_aspm_mode {
|
||||
DEV_ASPM_DYNAMIC,
|
||||
DEV_ASPM_BACKDOOR,
|
||||
DEV_ASPM_STATIC,
|
||||
DEV_ASPM_DISABLE,
|
||||
};
|
||||
|
||||
/*
|
||||
* struct rtsx_cr_option - card reader option
|
||||
* @dev_flags: device flags
|
||||
@@ -1125,7 +1114,6 @@ enum dev_aspm_mode {
|
||||
* @ltr_active_latency: ltr mode active latency
|
||||
* @ltr_idle_latency: ltr mode idle latency
|
||||
* @ltr_l1off_latency: ltr mode l1off latency
|
||||
* @dev_aspm_mode: device aspm mode
|
||||
* @l1_snooze_delay: l1 snooze delay
|
||||
* @ltr_l1off_sspwrgate: ltr l1off sspwrgate
|
||||
* @ltr_l1off_snooze_sspwrgate: ltr l1off snooze sspwrgate
|
||||
@@ -1142,7 +1130,6 @@ struct rtsx_cr_option {
|
||||
u32 ltr_active_latency;
|
||||
u32 ltr_idle_latency;
|
||||
u32 ltr_l1off_latency;
|
||||
enum dev_aspm_mode dev_aspm_mode;
|
||||
u32 l1_snooze_delay;
|
||||
u8 ltr_l1off_sspwrgate;
|
||||
u8 ltr_l1off_snooze_sspwrgate;
|
||||
@@ -1320,18 +1307,6 @@ static inline u8 *rtsx_pci_get_cmd_data(struct rtsx_pcr *pcr)
|
||||
return (u8 *)(pcr->host_cmds_ptr);
|
||||
}
|
||||
|
||||
static inline int rtsx_pci_update_cfg_byte(struct rtsx_pcr *pcr, int addr,
|
||||
u8 mask, u8 append)
|
||||
{
|
||||
int err;
|
||||
u8 val;
|
||||
|
||||
err = pci_read_config_byte(pcr->pci, addr, &val);
|
||||
if (err < 0)
|
||||
return err;
|
||||
return pci_write_config_byte(pcr->pci, addr, (val & mask) | append);
|
||||
}
|
||||
|
||||
static inline void rtsx_pci_write_be32(struct rtsx_pcr *pcr, u16 reg, u32 val)
|
||||
{
|
||||
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg, 0xFF, val >> 24);
|
||||
|
@@ -291,8 +291,8 @@ struct sdw_dpn_audio_mode {
|
||||
* implementation-defined interrupts
|
||||
* @max_ch: Maximum channels supported
|
||||
* @min_ch: Minimum channels supported
|
||||
* @num_ch: Number of discrete channels supported
|
||||
* @ch: Discrete channels supported
|
||||
* @num_channels: Number of discrete channels supported
|
||||
* @channels: Discrete channels supported
|
||||
* @num_ch_combinations: Number of channel combinations supported
|
||||
* @ch_combinations: Channel combinations supported
|
||||
* @modes: SDW mode supported
|
||||
@@ -316,8 +316,8 @@ struct sdw_dpn_prop {
|
||||
u32 imp_def_interrupts;
|
||||
u32 max_ch;
|
||||
u32 min_ch;
|
||||
u32 num_ch;
|
||||
u32 *ch;
|
||||
u32 num_channels;
|
||||
u32 *channels;
|
||||
u32 num_ch_combinations;
|
||||
u32 *ch_combinations;
|
||||
u32 modes;
|
||||
@@ -632,6 +632,19 @@ struct sdw_slave {
|
||||
|
||||
#define dev_to_sdw_dev(_dev) container_of(_dev, struct sdw_slave, dev)
|
||||
|
||||
/**
|
||||
* struct sdw_master_device - SoundWire 'Master Device' representation
|
||||
* @dev: Linux device for this Master
|
||||
* @bus: Bus handle shortcut
|
||||
*/
|
||||
struct sdw_master_device {
|
||||
struct device dev;
|
||||
struct sdw_bus *bus;
|
||||
};
|
||||
|
||||
#define dev_to_sdw_master_device(d) \
|
||||
container_of(d, struct sdw_master_device, dev)
|
||||
|
||||
struct sdw_driver {
|
||||
const char *name;
|
||||
|
||||
@@ -787,8 +800,10 @@ struct sdw_master_ops {
|
||||
|
||||
/**
|
||||
* struct sdw_bus - SoundWire bus
|
||||
* @dev: Master linux device
|
||||
* @dev: Shortcut to &bus->md->dev to avoid changing the entire code.
|
||||
* @md: Master device
|
||||
* @link_id: Link id number, can be 0 to N, unique for each Master
|
||||
* @id: bus system-wide unique id
|
||||
* @slaves: list of Slaves on this bus
|
||||
* @assigned: Bitmap for Slave device numbers.
|
||||
* Bit set implies used number, bit clear implies unused number.
|
||||
@@ -812,7 +827,9 @@ struct sdw_master_ops {
|
||||
*/
|
||||
struct sdw_bus {
|
||||
struct device *dev;
|
||||
struct sdw_master_device *md;
|
||||
unsigned int link_id;
|
||||
int id;
|
||||
struct list_head slaves;
|
||||
DECLARE_BITMAP(assigned, SDW_MAX_DEVICES);
|
||||
struct mutex bus_lock;
|
||||
@@ -832,8 +849,9 @@ struct sdw_bus {
|
||||
bool multi_link;
|
||||
};
|
||||
|
||||
int sdw_add_bus_master(struct sdw_bus *bus);
|
||||
void sdw_delete_bus_master(struct sdw_bus *bus);
|
||||
int sdw_bus_master_add(struct sdw_bus *bus, struct device *parent,
|
||||
struct fwnode_handle *fwnode);
|
||||
void sdw_bus_master_delete(struct sdw_bus *bus);
|
||||
|
||||
/**
|
||||
* sdw_port_config: Master or Slave Port configuration
|
||||
|
@@ -5,6 +5,13 @@
|
||||
#define __SOUNDWIRE_TYPES_H
|
||||
|
||||
extern struct bus_type sdw_bus_type;
|
||||
extern struct device_type sdw_slave_type;
|
||||
extern struct device_type sdw_master_type;
|
||||
|
||||
static inline int is_sdw_slave(const struct device *dev)
|
||||
{
|
||||
return dev->type == &sdw_slave_type;
|
||||
}
|
||||
|
||||
#define drv_to_sdw_driver(_drv) container_of(_drv, struct sdw_driver, driver)
|
||||
|
||||
@@ -14,7 +21,7 @@ extern struct bus_type sdw_bus_type;
|
||||
int __sdw_register_driver(struct sdw_driver *drv, struct module *owner);
|
||||
void sdw_unregister_driver(struct sdw_driver *drv);
|
||||
|
||||
int sdw_slave_modalias(const struct sdw_slave *slave, char *buf, size_t size);
|
||||
int sdw_slave_uevent(struct device *dev, struct kobj_uevent_env *env);
|
||||
|
||||
/**
|
||||
* module_sdw_driver() - Helper macro for registering a Soundwire driver
|
||||
|
Reference in New Issue
Block a user