Lines Matching +full:address +full:- +full:address +full:- +full:data
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Implement CPPC FFH helper routines for RISC-V.
20 /* RISC-V FFH definitions from RISC-V FFH spec */
51 struct sbi_cppc_data *data = (struct sbi_cppc_data *)read_data; in sbi_cppc_read() local
53 data->ret = sbi_ecall(SBI_EXT_CPPC, SBI_CPPC_READ, in sbi_cppc_read()
54 data->reg, 0, 0, 0, 0, 0); in sbi_cppc_read()
59 struct sbi_cppc_data *data = (struct sbi_cppc_data *)write_data; in sbi_cppc_write() local
61 data->ret = sbi_ecall(SBI_EXT_CPPC, SBI_CPPC_WRITE, in sbi_cppc_write()
62 data->reg, data->val, 0, 0, 0, 0); in sbi_cppc_write()
67 struct sbi_cppc_data *data = (struct sbi_cppc_data *)read_data; in cppc_ffh_csr_read() local
69 switch (data->reg) { in cppc_ffh_csr_read()
72 data->ret.value = csr_read(CSR_TIME); in cppc_ffh_csr_read()
73 data->ret.error = 0; in cppc_ffh_csr_read()
76 data->ret.error = -EINVAL; in cppc_ffh_csr_read()
83 struct sbi_cppc_data *data = (struct sbi_cppc_data *)write_data; in cppc_ffh_csr_write() local
85 data->ret.error = -EINVAL; in cppc_ffh_csr_write()
99 struct sbi_cppc_data data; in cpc_read_ffh() local
102 return -EPERM; in cpc_read_ffh()
104 if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_SBI) { in cpc_read_ffh()
106 return -EINVAL; in cpc_read_ffh()
108 data.reg = FFH_CPPC_SBI_REG(reg->address); in cpc_read_ffh()
110 smp_call_function_single(cpu, sbi_cppc_read, &data, 1); in cpc_read_ffh()
112 *val = data.ret.value; in cpc_read_ffh()
114 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_read_ffh()
115 } else if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_CSR) { in cpc_read_ffh()
116 data.reg = FFH_CPPC_CSR_NUM(reg->address); in cpc_read_ffh()
118 smp_call_function_single(cpu, cppc_ffh_csr_read, &data, 1); in cpc_read_ffh()
120 *val = data.ret.value; in cpc_read_ffh()
122 return data.ret.error; in cpc_read_ffh()
125 return -EINVAL; in cpc_read_ffh()
130 struct sbi_cppc_data data; in cpc_write_ffh() local
133 return -EPERM; in cpc_write_ffh()
135 if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_SBI) { in cpc_write_ffh()
137 return -EINVAL; in cpc_write_ffh()
139 data.reg = FFH_CPPC_SBI_REG(reg->address); in cpc_write_ffh()
140 data.val = val; in cpc_write_ffh()
142 smp_call_function_single(cpu, sbi_cppc_write, &data, 1); in cpc_write_ffh()
144 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_write_ffh()
145 } else if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_CSR) { in cpc_write_ffh()
146 data.reg = FFH_CPPC_CSR_NUM(reg->address); in cpc_write_ffh()
147 data.val = val; in cpc_write_ffh()
149 smp_call_function_single(cpu, cppc_ffh_csr_write, &data, 1); in cpc_write_ffh()
151 return data.ret.error; in cpc_write_ffh()
154 return -EINVAL; in cpc_write_ffh()