mirror of https://gitee.com/openkylin/linux.git
74 lines
1.9 KiB
C
74 lines
1.9 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/*
|
||
|
* Copyright (C) 2020 Linaro Ltd
|
||
|
*/
|
||
|
|
||
|
#ifndef __DRIVERS_INTERCONNECT_QCOM_ICC_RPM_H
|
||
|
#define __DRIVERS_INTERCONNECT_QCOM_ICC_RPM_H
|
||
|
|
||
|
#define RPM_BUS_MASTER_REQ 0x73616d62
|
||
|
#define RPM_BUS_SLAVE_REQ 0x766c7362
|
||
|
|
||
|
#define QCOM_MAX_LINKS 12
|
||
|
|
||
|
#define to_qcom_provider(_provider) \
|
||
|
container_of(_provider, struct qcom_icc_provider, provider)
|
||
|
|
||
|
/**
|
||
|
* struct qcom_icc_provider - Qualcomm specific interconnect provider
|
||
|
* @provider: generic interconnect provider
|
||
|
* @bus_clks: the clk_bulk_data table of bus clocks
|
||
|
* @num_clks: the total number of clk_bulk_data entries
|
||
|
*/
|
||
|
struct qcom_icc_provider {
|
||
|
struct icc_provider provider;
|
||
|
struct clk_bulk_data *bus_clks;
|
||
|
int num_clks;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* struct qcom_icc_node - Qualcomm specific interconnect nodes
|
||
|
* @name: the node name used in debugfs
|
||
|
* @id: a unique node identifier
|
||
|
* @links: an array of nodes where we can go next while traversing
|
||
|
* @num_links: the total number of @links
|
||
|
* @buswidth: width of the interconnect between a node and the bus (bytes)
|
||
|
* @mas_rpm_id: RPM id for devices that are bus masters
|
||
|
* @slv_rpm_id: RPM id for devices that are bus slaves
|
||
|
* @rate: current bus clock rate in Hz
|
||
|
*/
|
||
|
struct qcom_icc_node {
|
||
|
unsigned char *name;
|
||
|
u16 id;
|
||
|
u16 links[QCOM_MAX_LINKS];
|
||
|
u16 num_links;
|
||
|
u16 buswidth;
|
||
|
int mas_rpm_id;
|
||
|
int slv_rpm_id;
|
||
|
u64 rate;
|
||
|
};
|
||
|
|
||
|
struct qcom_icc_desc {
|
||
|
struct qcom_icc_node **nodes;
|
||
|
size_t num_nodes;
|
||
|
};
|
||
|
|
||
|
#define DEFINE_QNODE(_name, _id, _buswidth, _mas_rpm_id, _slv_rpm_id, \
|
||
|
...) \
|
||
|
static struct qcom_icc_node _name = { \
|
||
|
.name = #_name, \
|
||
|
.id = _id, \
|
||
|
.buswidth = _buswidth, \
|
||
|
.mas_rpm_id = _mas_rpm_id, \
|
||
|
.slv_rpm_id = _slv_rpm_id, \
|
||
|
.num_links = ARRAY_SIZE(((int[]){ __VA_ARGS__ })), \
|
||
|
.links = { __VA_ARGS__ }, \
|
||
|
}
|
||
|
|
||
|
|
||
|
int qnoc_probe(struct platform_device *pdev, size_t cd_size, int cd_num,
|
||
|
const struct clk_bulk_data *cd);
|
||
|
int qnoc_remove(struct platform_device *pdev);
|
||
|
|
||
|
#endif
|