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 
7 #ifndef __SP_PRIVATE_H_INCLUDED__
8 #define __SP_PRIVATE_H_INCLUDED__
9 
10 #include "sp_public.h"
11 
12 #include "device_access.h"
13 
14 #include "assert_support.h"
15 
sp_ctrl_store(const sp_ID_t ID,const hrt_address reg,const hrt_data value)16 STORAGE_CLASS_SP_C void sp_ctrl_store(
17     const sp_ID_t		ID,
18     const hrt_address	reg,
19     const hrt_data		value)
20 {
21 	assert(ID < N_SP_ID);
22 	assert(SP_CTRL_BASE[ID] != (hrt_address)-1);
23 	ia_css_device_store_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data), value);
24 	return;
25 }
26 
sp_ctrl_load(const sp_ID_t ID,const hrt_address reg)27 STORAGE_CLASS_SP_C hrt_data sp_ctrl_load(
28     const sp_ID_t		ID,
29     const hrt_address	reg)
30 {
31 	assert(ID < N_SP_ID);
32 	assert(SP_CTRL_BASE[ID] != (hrt_address)-1);
33 	return ia_css_device_load_uint32(SP_CTRL_BASE[ID] + reg * sizeof(hrt_data));
34 }
35 
sp_ctrl_getbit(const sp_ID_t ID,const hrt_address reg,const unsigned int bit)36 STORAGE_CLASS_SP_C bool sp_ctrl_getbit(
37     const sp_ID_t		ID,
38     const hrt_address	reg,
39     const unsigned int	bit)
40 {
41 	hrt_data val = sp_ctrl_load(ID, reg);
42 
43 	return (val & (1UL << bit)) != 0;
44 }
45 
sp_ctrl_setbit(const sp_ID_t ID,const hrt_address reg,const unsigned int bit)46 STORAGE_CLASS_SP_C void sp_ctrl_setbit(
47     const sp_ID_t		ID,
48     const hrt_address	reg,
49     const unsigned int	bit)
50 {
51 	hrt_data	data = sp_ctrl_load(ID, reg);
52 
53 	sp_ctrl_store(ID, reg, (data | (1UL << bit)));
54 	return;
55 }
56 
sp_ctrl_clearbit(const sp_ID_t ID,const hrt_address reg,const unsigned int bit)57 STORAGE_CLASS_SP_C void sp_ctrl_clearbit(
58     const sp_ID_t		ID,
59     const hrt_address	reg,
60     const unsigned int	bit)
61 {
62 	hrt_data	data = sp_ctrl_load(ID, reg);
63 
64 	sp_ctrl_store(ID, reg, (data & ~(1UL << bit)));
65 	return;
66 }
67 
sp_dmem_store(const sp_ID_t ID,hrt_address addr,const void * data,const size_t size)68 STORAGE_CLASS_SP_C void sp_dmem_store(
69     const sp_ID_t		ID,
70     hrt_address		addr,
71     const void			*data,
72     const size_t		size)
73 {
74 	assert(ID < N_SP_ID);
75 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
76 	ia_css_device_store(SP_DMEM_BASE[ID] + addr, data, size);
77 	return;
78 }
79 
sp_dmem_load(const sp_ID_t ID,const hrt_address addr,void * data,const size_t size)80 STORAGE_CLASS_SP_C void sp_dmem_load(
81     const sp_ID_t		ID,
82     const hrt_address	addr,
83     void				*data,
84     const size_t		size)
85 {
86 	assert(ID < N_SP_ID);
87 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
88 	ia_css_device_load(SP_DMEM_BASE[ID] + addr, data, size);
89 	return;
90 }
91 
sp_dmem_store_uint8(const sp_ID_t ID,hrt_address addr,const uint8_t data)92 STORAGE_CLASS_SP_C void sp_dmem_store_uint8(
93     const sp_ID_t		ID,
94     hrt_address		addr,
95     const uint8_t		data)
96 {
97 	assert(ID < N_SP_ID);
98 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
99 	(void)ID;
100 	ia_css_device_store_uint8(SP_DMEM_BASE[SP0_ID] + addr, data);
101 	return;
102 }
103 
sp_dmem_store_uint16(const sp_ID_t ID,hrt_address addr,const uint16_t data)104 STORAGE_CLASS_SP_C void sp_dmem_store_uint16(
105     const sp_ID_t		ID,
106     hrt_address		addr,
107     const uint16_t		data)
108 {
109 	assert(ID < N_SP_ID);
110 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
111 	(void)ID;
112 	ia_css_device_store_uint16(SP_DMEM_BASE[SP0_ID] + addr, data);
113 	return;
114 }
115 
sp_dmem_store_uint32(const sp_ID_t ID,hrt_address addr,const uint32_t data)116 STORAGE_CLASS_SP_C void sp_dmem_store_uint32(
117     const sp_ID_t		ID,
118     hrt_address		addr,
119     const uint32_t		data)
120 {
121 	assert(ID < N_SP_ID);
122 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
123 	(void)ID;
124 	ia_css_device_store_uint32(SP_DMEM_BASE[SP0_ID] + addr, data);
125 	return;
126 }
127 
sp_dmem_load_uint8(const sp_ID_t ID,const hrt_address addr)128 STORAGE_CLASS_SP_C uint8_t sp_dmem_load_uint8(
129     const sp_ID_t		ID,
130     const hrt_address	addr)
131 {
132 	assert(ID < N_SP_ID);
133 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
134 	(void)ID;
135 	return ia_css_device_load_uint8(SP_DMEM_BASE[SP0_ID] + addr);
136 }
137 
sp_dmem_load_uint16(const sp_ID_t ID,const hrt_address addr)138 STORAGE_CLASS_SP_C uint16_t sp_dmem_load_uint16(
139     const sp_ID_t		ID,
140     const hrt_address	addr)
141 {
142 	assert(ID < N_SP_ID);
143 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
144 	(void)ID;
145 	return ia_css_device_load_uint16(SP_DMEM_BASE[SP0_ID] + addr);
146 }
147 
sp_dmem_load_uint32(const sp_ID_t ID,const hrt_address addr)148 STORAGE_CLASS_SP_C uint32_t sp_dmem_load_uint32(
149     const sp_ID_t		ID,
150     const hrt_address	addr)
151 {
152 	assert(ID < N_SP_ID);
153 	assert(SP_DMEM_BASE[ID] != (hrt_address)-1);
154 	(void)ID;
155 	return ia_css_device_load_uint32(SP_DMEM_BASE[SP0_ID] + addr);
156 }
157 
158 #endif /* __SP_PRIVATE_H_INCLUDED__ */
159