1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2010-2015, Intel Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 */
15
16#ifndef __SP_PRIVATE_H_INCLUDED__
17#define __SP_PRIVATE_H_INCLUDED__
18
19#include "sp_public.h"
20
21#include "device_access.h"
22
23#include "assert_support.h"
24
25STORAGE_CLASS_SP_C void sp_ctrl_store(
26    const sp_ID_t		ID,
27    const hrt_address	reg,
28    const hrt_data		value)
29{
30	assert(ID < N_SP_ID);
31	assert(SP_CTRL_BASE[ID] != (hrt_address)-1);
32	ia_css_device_store_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data), value);
33	return;
34}
35
36STORAGE_CLASS_SP_C hrt_data sp_ctrl_load(
37    const sp_ID_t		ID,
38    const hrt_address	reg)
39{
40	assert(ID < N_SP_ID);
41	assert(SP_CTRL_BASE[ID] != (hrt_address)-1);
42	return ia_css_device_load_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data));
43}
44
45STORAGE_CLASS_SP_C bool sp_ctrl_getbit(
46    const sp_ID_t		ID,
47    const hrt_address	reg,
48    const unsigned int	bit)
49{
50	hrt_data val = sp_ctrl_load(ID, reg);
51
52	return (val & (1UL << bit)) != 0;
53}
54
55STORAGE_CLASS_SP_C void sp_ctrl_setbit(
56    const sp_ID_t		ID,
57    const hrt_address	reg,
58    const unsigned int	bit)
59{
60	hrt_data	data = sp_ctrl_load(ID, reg);
61
62	sp_ctrl_store(ID, reg, (data | (1UL << bit)));
63	return;
64}
65
66STORAGE_CLASS_SP_C void sp_ctrl_clearbit(
67    const sp_ID_t		ID,
68    const hrt_address	reg,
69    const unsigned int	bit)
70{
71	hrt_data	data = sp_ctrl_load(ID, reg);
72
73	sp_ctrl_store(ID, reg, (data & ~(1UL << bit)));
74	return;
75}
76
77STORAGE_CLASS_SP_C void sp_dmem_store(
78    const sp_ID_t		ID,
79    hrt_address		addr,
80    const void			*data,
81    const size_t		size)
82{
83	assert(ID < N_SP_ID);
84	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
85	ia_css_device_store(SP_DMEM_BASE[ID] + addr, data, size);
86	return;
87}
88
89STORAGE_CLASS_SP_C void sp_dmem_load(
90    const sp_ID_t		ID,
91    const hrt_address	addr,
92    void				*data,
93    const size_t		size)
94{
95	assert(ID < N_SP_ID);
96	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
97	ia_css_device_load(SP_DMEM_BASE[ID] + addr, data, size);
98	return;
99}
100
101STORAGE_CLASS_SP_C void sp_dmem_store_uint8(
102    const sp_ID_t		ID,
103    hrt_address		addr,
104    const uint8_t		data)
105{
106	assert(ID < N_SP_ID);
107	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
108	(void)ID;
109	ia_css_device_store_uint8(SP_DMEM_BASE[SP0_ID] + addr, data);
110	return;
111}
112
113STORAGE_CLASS_SP_C void sp_dmem_store_uint16(
114    const sp_ID_t		ID,
115    hrt_address		addr,
116    const uint16_t		data)
117{
118	assert(ID < N_SP_ID);
119	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
120	(void)ID;
121	ia_css_device_store_uint16(SP_DMEM_BASE[SP0_ID] + addr, data);
122	return;
123}
124
125STORAGE_CLASS_SP_C void sp_dmem_store_uint32(
126    const sp_ID_t		ID,
127    hrt_address		addr,
128    const uint32_t		data)
129{
130	assert(ID < N_SP_ID);
131	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
132	(void)ID;
133	ia_css_device_store_uint32(SP_DMEM_BASE[SP0_ID] + addr, data);
134	return;
135}
136
137STORAGE_CLASS_SP_C uint8_t sp_dmem_load_uint8(
138    const sp_ID_t		ID,
139    const hrt_address	addr)
140{
141	assert(ID < N_SP_ID);
142	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
143	(void)ID;
144	return ia_css_device_load_uint8(SP_DMEM_BASE[SP0_ID] + addr);
145}
146
147STORAGE_CLASS_SP_C uint16_t sp_dmem_load_uint16(
148    const sp_ID_t		ID,
149    const hrt_address	addr)
150{
151	assert(ID < N_SP_ID);
152	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
153	(void)ID;
154	return ia_css_device_load_uint16(SP_DMEM_BASE[SP0_ID] + addr);
155}
156
157STORAGE_CLASS_SP_C uint32_t sp_dmem_load_uint32(
158    const sp_ID_t		ID,
159    const hrt_address	addr)
160{
161	assert(ID < N_SP_ID);
162	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
163	(void)ID;
164	return ia_css_device_load_uint32(SP_DMEM_BASE[SP0_ID] + addr);
165}
166
167#endif /* __SP_PRIVATE_H_INCLUDED__ */
168