@@ -392,9 +392,10 @@ static bool gsi_command(struct gsi *gsi, u32 reg, u32 val)
392392static enum gsi_evt_ring_state
393393gsi_evt_ring_state (struct gsi * gsi , u32 evt_ring_id )
394394{
395+ const struct reg * reg = gsi_reg (gsi , EV_CH_E_CNTXT_0 );
395396 u32 val ;
396397
397- val = ioread32 (gsi -> virt + GSI_EV_CH_E_CNTXT_0_OFFSET ( evt_ring_id ));
398+ val = ioread32 (gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
398399
399400 return u32_get_bits (val , EV_CHSTATE_FMASK );
400401}
@@ -690,56 +691,72 @@ static void gsi_channel_de_alloc_command(struct gsi *gsi, u32 channel_id)
690691 */
691692static void gsi_evt_ring_doorbell (struct gsi * gsi , u32 evt_ring_id , u32 index )
692693{
694+ const struct reg * reg = gsi_reg (gsi , EV_CH_E_DOORBELL_0 );
693695 struct gsi_ring * ring = & gsi -> evt_ring [evt_ring_id ].ring ;
694696 u32 val ;
695697
696698 ring -> index = index ; /* Next unused entry */
697699
698700 /* Note: index *must* be used modulo the ring count here */
699701 val = gsi_ring_addr (ring , (index - 1 ) % ring -> count );
700- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_DOORBELL_0_OFFSET ( evt_ring_id ));
702+ iowrite32 (val , gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
701703}
702704
703705/* Program an event ring for use */
704706static void gsi_evt_ring_program (struct gsi * gsi , u32 evt_ring_id )
705707{
706708 struct gsi_evt_ring * evt_ring = & gsi -> evt_ring [evt_ring_id ];
707709 struct gsi_ring * ring = & evt_ring -> ring ;
710+ const struct reg * reg ;
708711 size_t size ;
709712 u32 val ;
710713
714+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_0 );
711715 /* We program all event rings as GPI type/protocol */
712716 val = u32_encode_bits (GSI_CHANNEL_TYPE_GPI , EV_CHTYPE_FMASK );
713717 val |= EV_INTYPE_FMASK ;
714718 val |= u32_encode_bits (GSI_RING_ELEMENT_SIZE , EV_ELEMENT_SIZE_FMASK );
715- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_CNTXT_0_OFFSET ( evt_ring_id ));
719+ iowrite32 (val , gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
716720
721+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_1 );
717722 size = ring -> count * GSI_RING_ELEMENT_SIZE ;
718723 val = ev_ch_e_cntxt_1_length_encode (gsi -> version , size );
719- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_CNTXT_1_OFFSET ( evt_ring_id ));
724+ iowrite32 (val , gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
720725
721726 /* The context 2 and 3 registers store the low-order and
722727 * high-order 32 bits of the address of the event ring,
723728 * respectively.
724729 */
730+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_2 );
725731 val = lower_32_bits (ring -> addr );
726- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_CNTXT_2_OFFSET (evt_ring_id ));
732+ iowrite32 (val , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
733+
734+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_3 );
727735 val = upper_32_bits (ring -> addr );
728- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_CNTXT_3_OFFSET ( evt_ring_id ));
736+ iowrite32 (val , gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
729737
730738 /* Enable interrupt moderation by setting the moderation delay */
739+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_8 );
731740 val = u32_encode_bits (GSI_EVT_RING_INT_MODT , MODT_FMASK );
732741 val |= u32_encode_bits (1 , MODC_FMASK ); /* comes from channel */
733- iowrite32 (val , gsi -> virt + GSI_EV_CH_E_CNTXT_8_OFFSET ( evt_ring_id ));
742+ iowrite32 (val , gsi -> virt + reg_n_offset ( reg , evt_ring_id ));
734743
735744 /* No MSI write data, and MSI address high and low address is 0 */
736- iowrite32 (0 , gsi -> virt + GSI_EV_CH_E_CNTXT_9_OFFSET (evt_ring_id ));
737- iowrite32 (0 , gsi -> virt + GSI_EV_CH_E_CNTXT_10_OFFSET (evt_ring_id ));
738- iowrite32 (0 , gsi -> virt + GSI_EV_CH_E_CNTXT_11_OFFSET (evt_ring_id ));
745+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_9 );
746+ iowrite32 (0 , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
747+
748+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_10 );
749+ iowrite32 (0 , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
750+
751+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_11 );
752+ iowrite32 (0 , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
739753
740754 /* We don't need to get event read pointer updates */
741- iowrite32 (0 , gsi -> virt + GSI_EV_CH_E_CNTXT_12_OFFSET (evt_ring_id ));
742- iowrite32 (0 , gsi -> virt + GSI_EV_CH_E_CNTXT_13_OFFSET (evt_ring_id ));
755+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_12 );
756+ iowrite32 (0 , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
757+
758+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_13 );
759+ iowrite32 (0 , gsi -> virt + reg_n_offset (reg , evt_ring_id ));
743760
744761 /* Finally, tell the hardware our "last processed" event (arbitrary) */
745762 gsi_evt_ring_doorbell (gsi , evt_ring_id , ring -> index );
@@ -1538,6 +1555,7 @@ void gsi_channel_update(struct gsi_channel *channel)
15381555 struct gsi_evt_ring * evt_ring ;
15391556 struct gsi_trans * trans ;
15401557 struct gsi_ring * ring ;
1558+ const struct reg * reg ;
15411559 u32 offset ;
15421560 u32 index ;
15431561
@@ -1547,7 +1565,8 @@ void gsi_channel_update(struct gsi_channel *channel)
15471565 /* See if there's anything new to process; if not, we're done. Note
15481566 * that index always refers to an entry *within* the event ring.
15491567 */
1550- offset = GSI_EV_CH_E_CNTXT_4_OFFSET (evt_ring_id );
1568+ reg = gsi_reg (gsi , EV_CH_E_CNTXT_4 );
1569+ offset = reg_n_offset (reg , evt_ring_id );
15511570 index = gsi_ring_index (ring , ioread32 (gsi -> virt + offset ));
15521571 if (index == ring -> index % ring -> count )
15531572 return ;
0 commit comments