Compare commits
	
		
			1 Commits
		
	
	
		
			39b2788b7e
			...
			febbc4fff0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| febbc4fff0 | 
| @@ -313,7 +313,7 @@ protected: | |||||||
|     iss::status read_ip(unsigned addr, reg_t &val); |     iss::status read_ip(unsigned addr, reg_t &val); | ||||||
|     iss::status read_hartid(unsigned addr, reg_t &val); |     iss::status read_hartid(unsigned addr, reg_t &val); | ||||||
|     iss::status write_epc(unsigned addr, reg_t val); |     iss::status write_epc(unsigned addr, reg_t val); | ||||||
|     iss::status write_intstatus(unsigned addr, reg_t val); |     iss::status read_intstatus(unsigned addr, reg_t& val); | ||||||
|     iss::status write_intthresh(unsigned addr, reg_t val); |     iss::status write_intthresh(unsigned addr, reg_t val); | ||||||
|     iss::status write_xtvt(unsigned addr, reg_t val); |     iss::status write_xtvt(unsigned addr, reg_t val); | ||||||
|     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); |     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); | ||||||
| @@ -421,7 +421,7 @@ riscv_hart_m_p<BASE, FEAT>::riscv_hart_m_p(feature_config cfg) | |||||||
|         csr_wr_cb[mtvt] = &this_class::write_xtvt; |         csr_wr_cb[mtvt] = &this_class::write_xtvt; | ||||||
| //        csr_rd_cb[mxnti] = &this_class::read_csr_reg; | //        csr_rd_cb[mxnti] = &this_class::read_csr_reg; | ||||||
| //        csr_wr_cb[mxnti] = &this_class::write_csr_reg; | //        csr_wr_cb[mxnti] = &this_class::write_csr_reg; | ||||||
|         csr_rd_cb[mintstatus] = &this_class::read_csr_reg; |         csr_rd_cb[mintstatus] = &this_class::read_intstatus; | ||||||
|         csr_wr_cb[mintstatus] = &this_class::write_null; |         csr_wr_cb[mintstatus] = &this_class::write_null; | ||||||
| //        csr_rd_cb[mscratchcsw] = &this_class::read_csr_reg; | //        csr_rd_cb[mscratchcsw] = &this_class::read_csr_reg; | ||||||
| //        csr_wr_cb[mscratchcsw] = &this_class::write_csr_reg; | //        csr_wr_cb[mscratchcsw] = &this_class::write_csr_reg; | ||||||
| @@ -965,6 +965,12 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_m_p<BASE, FEAT> | |||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | template<typename BASE, features_e FEAT> | ||||||
|  | iss::status riscv_hart_m_p<BASE, FEAT>::read_intstatus(unsigned addr, reg_t& val) { | ||||||
|  | 	val = (clic_mprev_lvl&0xff) <<24; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
| template<typename BASE, features_e FEAT> | template<typename BASE, features_e FEAT> | ||||||
| iss::status riscv_hart_m_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | iss::status riscv_hart_m_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | ||||||
|     csr[addr]= (val &0xff) | (1<<(cfg.clic_int_ctl_bits)) - 1; |     csr[addr]= (val &0xff) | (1<<(cfg.clic_int_ctl_bits)) - 1; | ||||||
|   | |||||||
| @@ -330,7 +330,7 @@ protected: | |||||||
|     iss::status write_edeleg(unsigned addr, reg_t val); |     iss::status write_edeleg(unsigned addr, reg_t val); | ||||||
|     iss::status read_hartid(unsigned addr, reg_t &val); |     iss::status read_hartid(unsigned addr, reg_t &val); | ||||||
|     iss::status write_epc(unsigned addr, reg_t val); |     iss::status write_epc(unsigned addr, reg_t val); | ||||||
|     iss::status write_intstatus(unsigned addr, reg_t val); |     iss::status read_intstatus(unsigned addr, reg_t& val); | ||||||
|     iss::status write_intthresh(unsigned addr, reg_t val); |     iss::status write_intthresh(unsigned addr, reg_t val); | ||||||
|     iss::status write_xtvt(unsigned addr, reg_t val); |     iss::status write_xtvt(unsigned addr, reg_t val); | ||||||
|     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); |     iss::status write_dcsr_dcsr(unsigned addr, reg_t val); | ||||||
| @@ -469,7 +469,7 @@ riscv_hart_mu_p<BASE, FEAT>::riscv_hart_mu_p(feature_config cfg) | |||||||
|         csr_wr_cb[mtvt] = &this_class::write_xtvt; |         csr_wr_cb[mtvt] = &this_class::write_xtvt; | ||||||
| //        csr_rd_cb[mxnti] = &this_class::read_csr_reg; | //        csr_rd_cb[mxnti] = &this_class::read_csr_reg; | ||||||
| //        csr_wr_cb[mxnti] = &this_class::write_csr_reg; | //        csr_wr_cb[mxnti] = &this_class::write_csr_reg; | ||||||
|         csr_rd_cb[mintstatus] = &this_class::read_csr_reg; |         csr_rd_cb[mintstatus] = &this_class::read_intstatus; | ||||||
|         csr_wr_cb[mintstatus] = &this_class::write_null; |         csr_wr_cb[mintstatus] = &this_class::write_null; | ||||||
| //        csr_rd_cb[mscratchcsw] = &this_class::read_csr_reg; | //        csr_rd_cb[mscratchcsw] = &this_class::read_csr_reg; | ||||||
| //        csr_wr_cb[mscratchcsw] = &this_class::write_csr_reg; | //        csr_wr_cb[mscratchcsw] = &this_class::write_csr_reg; | ||||||
| @@ -480,7 +480,7 @@ riscv_hart_mu_p<BASE, FEAT>::riscv_hart_mu_p(feature_config cfg) | |||||||
|         if(FEAT & FEAT_EXT_N){ |         if(FEAT & FEAT_EXT_N){ | ||||||
|             csr_rd_cb[utvt] = &this_class::read_csr_reg; |             csr_rd_cb[utvt] = &this_class::read_csr_reg; | ||||||
|             csr_wr_cb[utvt] = &this_class::write_xtvt; |             csr_wr_cb[utvt] = &this_class::write_xtvt; | ||||||
|             csr_rd_cb[uintstatus] = &this_class::read_csr_reg; |             csr_rd_cb[uintstatus] = &this_class::read_intstatus; | ||||||
|             csr_wr_cb[uintstatus] = &this_class::write_null; |             csr_wr_cb[uintstatus] = &this_class::write_null; | ||||||
|             csr_rd_cb[uintthresh] = &this_class::read_csr_reg; |             csr_rd_cb[uintthresh] = &this_class::read_csr_reg; | ||||||
|             csr_wr_cb[uintthresh] = &this_class::write_intthresh; |             csr_wr_cb[uintthresh] = &this_class::write_intthresh; | ||||||
| @@ -1158,6 +1158,15 @@ template <typename BASE, features_e FEAT> iss::status riscv_hart_mu_p<BASE, FEAT | |||||||
|     return iss::Ok; |     return iss::Ok; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | template<typename BASE, features_e FEAT> | ||||||
|  | iss::status riscv_hart_mu_p<BASE, FEAT>::read_intstatus(unsigned addr, reg_t& val) { | ||||||
|  |     auto mode = (addr >> 8) & 0x3; | ||||||
|  |     val = clic_uprev_lvl&0xff; | ||||||
|  |     if(mode==0x3) | ||||||
|  |         val += (clic_mprev_lvl&0xff) <<24; | ||||||
|  |     return iss::Ok; | ||||||
|  | } | ||||||
|  |  | ||||||
| template<typename BASE, features_e FEAT> | template<typename BASE, features_e FEAT> | ||||||
| iss::status riscv_hart_mu_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | iss::status riscv_hart_mu_p<BASE, FEAT>::write_intthresh(unsigned addr, reg_t val) { | ||||||
|     csr[addr]= (val &0xff) | (1<<(cfg.clic_int_ctl_bits)) - 1; |     csr[addr]= (val &0xff) | (1<<(cfg.clic_int_ctl_bits)) - 1; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user