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