@@ -30,10 +30,12 @@ Gbt::Gbt(std::shared_ptr<Pda::PdaBar> pdaBar, std::map<int, Link> &linkMap, int
3030{
3131}
3232
33- void Gbt::setMux (Link link , uint32_t mux)
33+ void Gbt::setMux (int index , uint32_t mux)
3434{
35- uint32_t address = Cru::Registers::GBT_MUX_SELECT.address + (link.bank * 4 );
36- mPdaBar ->modifyRegister (address/4 , link.id *4 , 2 , mux);
35+ uint32_t reg = index / 16 ;
36+ uint32_t bitOffset = (index % 16 ) * 2 ;
37+ uint32_t address = Cru::Registers::GBT_MUX_SELECT.address + (reg * 4 );
38+ mPdaBar ->modifyRegister (address/4 , bitOffset, 2 , mux);
3739}
3840
3941void Gbt::setInternalDataGenerator (Link link, uint32_t value)
@@ -100,15 +102,20 @@ void Gbt::getGbtModes()
100102void Gbt::getGbtMuxes ()
101103{
102104 for (auto & el: mLinkMap ) {
105+ int index = el.first ;
103106 auto & link = el.second ;
104- uint32_t txMux = mPdaBar ->readRegister ((Cru::Registers::GBT_MUX_SELECT.address + link.bank * 4 )/4 );
105- txMux = (txMux >> (link.id *4 )) & 0x3 ;
107+ uint32_t reg = (index / 16 );
108+ uint32_t bitOffset = (index % 16 ) * 2 ;
109+ uint32_t txMux = mPdaBar ->readRegister ((Cru::Registers::GBT_MUX_SELECT.address + reg * 4 )/4 );
110+ txMux = (txMux >> bitOffset) & 0x3 ;
106111 if (txMux == Cru::GBT_MUX_TTC) {
107112 link.gbtMux = GbtMux::type::Ttc;
108113 } else if (txMux == Cru::GBT_MUX_DDG) {
109114 link.gbtMux = GbtMux::type::Ddg;
110115 } else if (txMux == Cru::GBT_MUX_SWT) {
111116 link.gbtMux = GbtMux::type::Swt;
117+ } else {
118+ link.gbtMux = GbtMux::type::Na;
112119 }
113120 }
114121}
0 commit comments