Message ID | 1588193551-31439-10-git-send-email-bbhatt@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Bug fixes and improved logging in MHI | expand |
On 4/29/2020 2:52 PM, Bhaumik Bhatt wrote: > While writing any sequence or session identifiers, it is possible that > the host could write a zero value, whereas only non-zero values are > supported writes to those registers. Ensure that host does not write a > non-zero value for those cases. > > Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org> > --- > drivers/bus/mhi/core/boot.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c > index 0bc9c50..c9971d4 100644 > --- a/drivers/bus/mhi/core/boot.c > +++ b/drivers/bus/mhi/core/boot.c > @@ -199,6 +199,9 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, > mhi_write_reg(mhi_cntrl, base, BHIE_TXVECSIZE_OFFS, mhi_buf->len); > > sequence_id = prandom_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK; > + if (unlikely(!sequence_id)) > + sequence_id = 1; Seems like you could use prandom_u32_max(), and add 1 to the result to eliminate the conditional. What do you think? > + > mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS, > BHIE_TXVECDB_SEQNUM_BMSK, BHIE_TXVECDB_SEQNUM_SHFT, > sequence_id); > @@ -254,6 +257,9 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, > lower_32_bits(dma_addr)); > mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); > session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK; > + if (unlikely(!session_id)) > + session_id = 1; > + > mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, session_id); > read_unlock_bh(pm_lock); > >
On 2020-04-30 08:12, Jeffrey Hugo wrote: > On 4/29/2020 2:52 PM, Bhaumik Bhatt wrote: >> While writing any sequence or session identifiers, it is possible that >> the host could write a zero value, whereas only non-zero values are >> supported writes to those registers. Ensure that host does not write a >> non-zero value for those cases. >> >> Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org> >> --- >> drivers/bus/mhi/core/boot.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c >> index 0bc9c50..c9971d4 100644 >> --- a/drivers/bus/mhi/core/boot.c >> +++ b/drivers/bus/mhi/core/boot.c >> @@ -199,6 +199,9 @@ static int mhi_fw_load_amss(struct mhi_controller >> *mhi_cntrl, >> mhi_write_reg(mhi_cntrl, base, BHIE_TXVECSIZE_OFFS, mhi_buf->len); >> sequence_id = prandom_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK; >> + if (unlikely(!sequence_id)) >> + sequence_id = 1; > > Seems like you could use prandom_u32_max(), and add 1 to the result to > eliminate the conditional. What do you think? > Agreed. Done using an internal macro in those places. >> + >> mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS, >> BHIE_TXVECDB_SEQNUM_BMSK, BHIE_TXVECDB_SEQNUM_SHFT, >> sequence_id); >> @@ -254,6 +257,9 @@ static int mhi_fw_load_sbl(struct mhi_controller >> *mhi_cntrl, >> lower_32_bits(dma_addr)); >> mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); >> session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK; >> + if (unlikely(!session_id)) >> + session_id = 1; >> + >> mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, session_id); >> read_unlock_bh(pm_lock); >>
diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c index 0bc9c50..c9971d4 100644 --- a/drivers/bus/mhi/core/boot.c +++ b/drivers/bus/mhi/core/boot.c @@ -199,6 +199,9 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, mhi_write_reg(mhi_cntrl, base, BHIE_TXVECSIZE_OFFS, mhi_buf->len); sequence_id = prandom_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK; + if (unlikely(!sequence_id)) + sequence_id = 1; + mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS, BHIE_TXVECDB_SEQNUM_BMSK, BHIE_TXVECDB_SEQNUM_SHFT, sequence_id); @@ -254,6 +257,9 @@ static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, lower_32_bits(dma_addr)); mhi_write_reg(mhi_cntrl, base, BHI_IMGSIZE, size); session_id = prandom_u32() & BHI_TXDB_SEQNUM_BMSK; + if (unlikely(!session_id)) + session_id = 1; + mhi_write_reg(mhi_cntrl, base, BHI_IMGTXDB, session_id); read_unlock_bh(pm_lock);
While writing any sequence or session identifiers, it is possible that the host could write a zero value, whereas only non-zero values are supported writes to those registers. Ensure that host does not write a non-zero value for those cases. Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org> --- drivers/bus/mhi/core/boot.c | 6 ++++++ 1 file changed, 6 insertions(+)