In this letter, we propose a novel joint channel estimation and data detection scheme for massive multiple-input multiple-output (MIMO) uplink, which operates in a time-varying fading channel. More specifically, at the receiver of the proposed scheme, a data frame is divided into multiple blocks, and in each block, a demodulated data block is used for updating channel state information (CSI) in an iterative manner. Furthermore, the initial CSI in the block of interest is given by the estimated CSI in the previous block, hence allowing accurate tracking of CSI in a time-varying channel without imposing additional pilot insertion inside the data frame. Since the length of the divided blocks affects both the achievable channel tracking and data detection performances, it is optimized so as to maximize the discrete-input continuous-output memoryless channel’s (DCMC) capacity derived in this letter. It is demonstrated that the DCMC capacity of the proposed scheme is capable of nearly achieving those of the perfect CSI counterpart without imposing any substantial pilot overhead.