Lines Matching +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 */
53 struct sbi_cppc_data *data = (struct sbi_cppc_data *)read_data; in sbi_cppc_read() local
55 data->ret = sbi_ecall(SBI_EXT_CPPC, SBI_CPPC_READ, in sbi_cppc_read()
56 data->reg, 0, 0, 0, 0, 0); in sbi_cppc_read()
61 struct sbi_cppc_data *data = (struct sbi_cppc_data *)write_data; in sbi_cppc_write() local
63 data->ret = sbi_ecall(SBI_EXT_CPPC, SBI_CPPC_WRITE, in sbi_cppc_write()
64 data->reg, data->val, 0, 0, 0, 0); in sbi_cppc_write()
69 struct sbi_cppc_data *data = (struct sbi_cppc_data *)read_data; in cppc_ffh_csr_read() local
71 switch (data->reg) { in cppc_ffh_csr_read()
74 data->ret.value = csr_read(CSR_TIME); in cppc_ffh_csr_read()
75 data->ret.error = 0; in cppc_ffh_csr_read()
78 data->ret.error = -EINVAL; in cppc_ffh_csr_read()
85 struct sbi_cppc_data *data = (struct sbi_cppc_data *)write_data; in cppc_ffh_csr_write() local
87 data->ret.error = -EINVAL; in cppc_ffh_csr_write()
101 struct sbi_cppc_data data; in cpc_read_ffh() local
104 return -EPERM; in cpc_read_ffh()
106 if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_SBI) { in cpc_read_ffh()
108 return -EINVAL; in cpc_read_ffh()
110 data.reg = FFH_CPPC_SBI_REG(reg->address); in cpc_read_ffh()
112 smp_call_function_single(cpu, sbi_cppc_read, &data, 1); in cpc_read_ffh()
114 *val = data.ret.value; in cpc_read_ffh()
116 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_read_ffh()
117 } else if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_CSR) { in cpc_read_ffh()
118 data.reg = FFH_CPPC_CSR_NUM(reg->address); in cpc_read_ffh()
120 smp_call_function_single(cpu, cppc_ffh_csr_read, &data, 1); in cpc_read_ffh()
122 *val = data.ret.value; in cpc_read_ffh()
124 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_read_ffh()
127 return -EINVAL; in cpc_read_ffh()
132 struct sbi_cppc_data data; in cpc_write_ffh() local
135 return -EPERM; in cpc_write_ffh()
137 if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_SBI) { in cpc_write_ffh()
139 return -EINVAL; in cpc_write_ffh()
141 data.reg = FFH_CPPC_SBI_REG(reg->address); in cpc_write_ffh()
142 data.val = val; in cpc_write_ffh()
144 smp_call_function_single(cpu, sbi_cppc_write, &data, 1); in cpc_write_ffh()
146 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_write_ffh()
147 } else if (FFH_CPPC_TYPE(reg->address) == FFH_CPPC_CSR) { in cpc_write_ffh()
148 data.reg = FFH_CPPC_CSR_NUM(reg->address); in cpc_write_ffh()
149 data.val = val; in cpc_write_ffh()
151 smp_call_function_single(cpu, cppc_ffh_csr_write, &data, 1); in cpc_write_ffh()
153 return (data.ret.error) ? sbi_err_map_linux_errno(data.ret.error) : 0; in cpc_write_ffh()
156 return -EINVAL; in cpc_write_ffh()