@@ -145,14 +145,16 @@ template <typename WORD_TYPE> struct clic : public memory_elem {
145145 iss::status read_mem (addr_t const & addr, unsigned length, uint8_t * data) {
146146 auto end_addr = addr.val - 1 + length;
147147 if (addr.space == 0 && addr.val <= end_addr && addr.val >= cfg.clic_base && end_addr <= (cfg.clic_base + 0x7fff ))
148- return read_clic (addr.val , length, data);
148+ if ( read_clic (addr.val , length, data) ==iss::Ok)
149+ return iss::Ok;
149150 return down_stream_mem.rd_mem (addr, length, data);
150151 }
151152
152153 iss::status write_mem (addr_t const & addr, unsigned length, uint8_t const * data) {
153154 auto end_addr = addr.val - 1 + length;
154155 if (addr.space == 0 && addr.val <= end_addr && addr.val >= cfg.clic_base && end_addr <= (cfg.clic_base + 0x7fff ))
155- return write_clic (addr.val , length, data);
156+ if ( write_clic (addr.val , length, data) ==iss::Ok)
157+ return iss::Ok;
156158 return down_stream_mem.wr_mem (addr, length, data);
157159 }
158160
@@ -261,33 +263,40 @@ template <typename WORD_TYPE> iss::status clic<WORD_TYPE>::read_clic(uint64_t ad
261263 *data = clic_cfg_reg;
262264 for (auto i = 1 ; i < length; ++i)
263265 *(data + i) = 0 ;
266+ return iss::Ok;
267+ #if 0
264268 } else if(addr >= (cfg.clic_base + 0x40) && (addr + length) <= (cfg.clic_base + 0x40 + cfg.clic_num_trigger * 4)) { // clicinttrig
265269 auto offset = ((addr & 0x7fff) - 0x40) / 4;
266270 read_reg_with_offset(clic_inttrig_reg[offset], addr & 0x3, data, length);
271+ return iss::Ok;
272+ #endif
267273 } else if (addr >= (cfg.clic_base + 0x1000 ) &&
268274 (addr + length) <= (cfg.clic_base + 0x1000 + cfg.clic_num_irq * 4 )) { // clicintip/clicintie/clicintattr/clicintctl
269275 auto offset = ((addr & 0x7fff ) - 0x1000 ) / 4 ;
270276 read_reg_with_offset (clic_int_reg[offset].raw , addr & 0x3 , data, length);
271- } else {
272- for (auto i = 0U ; i < length; ++i)
273- *(data + i) = 0 ;
277+ return iss::Ok;
274278 }
275- return iss::Ok ;
279+ return iss::NotSupported ;
276280}
277281
278282template <typename WORD_TYPE> iss::status clic<WORD_TYPE>::write_clic(uint64_t addr, unsigned length, const uint8_t * const data) {
279283 if (addr == cfg.clic_base ) { // cliccfg
280284 clic_cfg_reg = (clic_cfg_reg & ~0x1e ) | (*data & 0x1e );
285+ return iss::Ok;
286+ #if 0
281287 } else if(addr >= (cfg.clic_base + 0x40) && (addr + length) <= (cfg.clic_base + 0x40 + cfg.clic_num_trigger * 4)) { // clicinttrig
282288 auto offset = ((addr & 0x7fff) - 0x40) / 4;
283289 write_reg_with_offset(clic_inttrig_reg[offset], addr & 0x3, data, length);
290+ return iss::Ok;
291+ #endif
284292 } else if (addr >= (cfg.clic_base + 0x1000 ) &&
285293 (addr + length) <= (cfg.clic_base + 0x1000 + cfg.clic_num_irq * 4 )) { // clicintip/clicintie/clicintattr/clicintctl
286294 auto offset = ((addr & 0x7fff ) - 0x1000 ) / 4 ;
287295 write_reg_with_offset (clic_int_reg[offset].raw , addr & 0x3 , data, length);
288296 clic_int_reg[offset].raw &= 0xf0c70101 ; // clicIntCtlBits->0xf0, clicintattr->0xc7, clicintie->0x1, clicintip->0x1
297+ return iss::Ok;
289298 }
290- return iss::Ok ;
299+ return iss::NotSupported ;
291300}
292301
293302} // namespace mem
0 commit comments