From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Subject: Re: [PATCH v3 01/18] ram: rk3399: Handle data training return types Date: Tue, 16 Jul 2019 15:36:19 +0800 Message-ID: References: <20190715182856.21688-1-jagan@amarulasolutions.com> <20190715182856.21688-2-jagan@amarulasolutions.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190715182856.21688-2-jagan-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+glpar-linux-rockchip=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: Jagan Teki , Simon Glass , Philipp Tomsich , YouMin Chen , u-boot-0aAXYlwwYIKGBzrmiIFOJg@public.gmane.org Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, gajjar04akash-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-amarula-dyjBcgdgk7Pe9wHmmfpqLFaTQe2KTcn/@public.gmane.org, Manivannan Sadhasivam List-Id: linux-rockchip.vger.kernel.org Ck9uIDIwMTkvNy8xNiDkuIrljYgyOjI4LCBKYWdhbiBUZWtpIHdyb3RlOgo+IGRhdGEgdHJhaW5p bmdzIGNhbGxzIGxpa2UgY2EsIHdsLCByZywgcmwsIHdkcWwgaGF2ZSBwcm9wZXIKPiByZXR1cm4g dHlwZXMgd2l0aCAtRUlPIGFuZCB0aGUgcmV0dXJuIHR5cGUgbWlzc2VkIHRvIGhhbmRsZQo+IGlu IGRhdGFfdHJhaW5pbmcgZnVuY3Rpb24uCj4KPiBUaGlzIHBhdGNoLCBhZGQgcHJvcGVyIHJldHVy biB0eXBlIGNoZWNrcyBhbG9uZyB3aXRoIHVzZWZ1bAo+IGRlYnVnIHN0YXRlbWVudCBvbiBlYWNo IGRhdGEgdHJhaW5pbmcgY2FsbHMuCj4KPiBJbmNpZGVudGFsbHkgdGhpcyB3b3VsZCBoZWxwIHRv IHByZXZlbnQgdGhlIHNkcmFtIGluaXRpYWxpemF0aW9uCj4gaGFuZyBmb3Igc2luZ2xlIGNoYW5u ZWwgZHJhbSBhbmQgd2hlbiB0aGUgY29kZSBpcyB0cnlpbmcgdG8KPiBpbml0aWFsaXplIHNlY29u ZCBjaGFubmVsIHdpdGggcHJvcGVyIHJldHVybiB0eXBlIG9mIHJlbGV2YW50Cj4gZGF0YSB0cmFp bmluZyBjYWxsIG1pZ2h0IGZhaWxlZC4KPgo+IFNpZ25lZC1vZmYtYnk6IEphZ2FuIFRla2kgPGph Z2FuQGFtYXJ1bGFzb2x1dGlvbnMuY29tPgoKUmV2aWV3ZWQtYnk6IEtldmVyIFlhbmcgPEtldmVy LnlhbmdAcm9jay1jaGlwcy5jb20+CgpUaGFua3MsCiDCoC0gS2V2ZXIKPiAtLS0KPiAgIGRyaXZl cnMvcmFtL3JvY2tjaGlwL3NkcmFtX3JrMzM5OS5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlv bnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3JhbS9yb2NrY2hpcC9zZHJhbV9yazMzOTku YyBiL2RyaXZlcnMvcmFtL3JvY2tjaGlwL3NkcmFtX3JrMzM5OS5jCj4gaW5kZXggNDkyYjA5NzVk ZC4uZTljMGZkZjJkNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3JhbS9yb2NrY2hpcC9zZHJhbV9y azMzOTkuYwo+ICsrKyBiL2RyaXZlcnMvcmFtL3JvY2tjaGlwL3NkcmFtX3JrMzM5OS5jCj4gQEAg LTg4Nyw2ICs4ODcsNyBAQCBzdGF0aWMgaW50IGRhdGFfdHJhaW5pbmcoY29uc3Qgc3RydWN0IGNo YW5faW5mbyAqY2hhbiwgdTMyIGNoYW5uZWwsCj4gICAJCQkgdTMyIHRyYWluaW5nX2ZsYWcpCj4g ICB7Cj4gICAJdTMyICpkZW5hbGlfcGh5ID0gY2hhbi0+cHVibC0+ZGVuYWxpX3BoeTsKPiArCWlu dCByZXQ7Cj4gICAKPiAgIAkvKiBQSFlfOTI3IFBIWV9QQURfRFFTX0RSSVZFICBSUFVMTCBvZmZz ZXRfMjIgKi8KPiAgIAlzZXRiaXRzX2xlMzIoJmRlbmFsaV9waHlbOTI3XSwgKDEgPDwgMjIpKTsK PiBAQCAtOTA3LDI0ICs5MDgsNDkgQEAgc3RhdGljIGludCBkYXRhX3RyYWluaW5nKGNvbnN0IHN0 cnVjdCBjaGFuX2luZm8gKmNoYW4sIHUzMiBjaGFubmVsLAo+ICAgCX0KPiAgIAo+ICAgCS8qIGNh IHRyYWluaW5nKExQRERSNCxMUEREUjMgc3VwcG9ydCkgKi8KPiAtCWlmICgodHJhaW5pbmdfZmxh ZyAmIFBJX0NBX1RSQUlOSU5HKSA9PSBQSV9DQV9UUkFJTklORykKPiAtCQlkYXRhX3RyYWluaW5n X2NhKGNoYW4sIGNoYW5uZWwsIHBhcmFtcyk7Cj4gKwlpZiAoKHRyYWluaW5nX2ZsYWcgJiBQSV9D QV9UUkFJTklORykgPT0gUElfQ0FfVFJBSU5JTkcpIHsKPiArCQlyZXQgPSBkYXRhX3RyYWluaW5n X2NhKGNoYW4sIGNoYW5uZWwsIHBhcmFtcyk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGVi dWcoIiVzOiBkYXRhIHRyYWluaW5nIGNhIGZhaWxlZFxuIiwgX19mdW5jX18pOwo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAgIAo+ICAgCS8qIHdyaXRlIGxldmVsaW5nKExQRERSNCxM UEREUjMsRERSMyBzdXBwb3J0KSAqLwo+IC0JaWYgKCh0cmFpbmluZ19mbGFnICYgUElfV1JJVEVf TEVWRUxJTkcpID09IFBJX1dSSVRFX0xFVkVMSU5HKQo+IC0JCWRhdGFfdHJhaW5pbmdfd2woY2hh biwgY2hhbm5lbCwgcGFyYW1zKTsKPiArCWlmICgodHJhaW5pbmdfZmxhZyAmIFBJX1dSSVRFX0xF VkVMSU5HKSA9PSBQSV9XUklURV9MRVZFTElORykgewo+ICsJCXJldCA9IGRhdGFfdHJhaW5pbmdf d2woY2hhbiwgY2hhbm5lbCwgcGFyYW1zKTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlkZWJ1 ZygiJXM6IGRhdGEgdHJhaW5pbmcgd2wgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsJfQo+ICAgCj4gICAJLyogcmVhZCBnYXRlIHRyYWluaW5nKExQRERS NCxMUEREUjMsRERSMyBzdXBwb3J0KSAqLwo+IC0JaWYgKCh0cmFpbmluZ19mbGFnICYgUElfUkVB RF9HQVRFX1RSQUlOSU5HKSA9PSBQSV9SRUFEX0dBVEVfVFJBSU5JTkcpCj4gLQkJZGF0YV90cmFp bmluZ19yZyhjaGFuLCBjaGFubmVsLCBwYXJhbXMpOwo+ICsJaWYgKCh0cmFpbmluZ19mbGFnICYg UElfUkVBRF9HQVRFX1RSQUlOSU5HKSA9PSBQSV9SRUFEX0dBVEVfVFJBSU5JTkcpIHsKPiArCQly ZXQgPSBkYXRhX3RyYWluaW5nX3JnKGNoYW4sIGNoYW5uZWwsIHBhcmFtcyk7Cj4gKwkJaWYgKHJl dCA8IDApIHsKPiArCQkJZGVidWcoIiVzOiBkYXRhIHRyYWluaW5nIHJnIGZhaWxlZFxuIiwgX19m dW5jX18pOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAgIAo+ICAgCS8qIHJlYWQg bGV2ZWxpbmcoTFBERFI0LExQRERSMyxERFIzIHN1cHBvcnQpICovCj4gLQlpZiAoKHRyYWluaW5n X2ZsYWcgJiBQSV9SRUFEX0xFVkVMSU5HKSA9PSBQSV9SRUFEX0xFVkVMSU5HKQo+IC0JCWRhdGFf dHJhaW5pbmdfcmwoY2hhbiwgY2hhbm5lbCwgcGFyYW1zKTsKPiArCWlmICgodHJhaW5pbmdfZmxh ZyAmIFBJX1JFQURfTEVWRUxJTkcpID09IFBJX1JFQURfTEVWRUxJTkcpIHsKPiArCQlyZXQgPSBk YXRhX3RyYWluaW5nX3JsKGNoYW4sIGNoYW5uZWwsIHBhcmFtcyk7Cj4gKwkJaWYgKHJldCA8IDAp IHsKPiArCQkJZGVidWcoIiVzOiBkYXRhIHRyYWluaW5nIHJsIGZhaWxlZFxuIiwgX19mdW5jX18p Owo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAgIAo+ICAgCS8qIHdkcSBsZXZlbGlu ZyhMUEREUjQgc3VwcG9ydCkgKi8KPiAtCWlmICgodHJhaW5pbmdfZmxhZyAmIFBJX1dEUV9MRVZF TElORykgPT0gUElfV0RRX0xFVkVMSU5HKQo+IC0JCWRhdGFfdHJhaW5pbmdfd2RxbChjaGFuLCBj aGFubmVsLCBwYXJhbXMpOwo+ICsJaWYgKCh0cmFpbmluZ19mbGFnICYgUElfV0RRX0xFVkVMSU5H KSA9PSBQSV9XRFFfTEVWRUxJTkcpIHsKPiArCQlyZXQgPSBkYXRhX3RyYWluaW5nX3dkcWwoY2hh biwgY2hhbm5lbCwgcGFyYW1zKTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlkZWJ1ZygiJXM6 IGRhdGEgdHJhaW5pbmcgd2RxbCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKPiArCQkJcmV0dXJuIHJl dDsKPiArCQl9Cj4gKwl9Cj4gICAKPiAgIAkvKiBQSFlfOTI3IFBIWV9QQURfRFFTX0RSSVZFICBS UFVMTCBvZmZzZXRfMjIgKi8KPiAgIAljbHJiaXRzX2xlMzIoJmRlbmFsaV9waHlbOTI3XSwgKDEg PDwgMjIpKTsKPiBAQCAtMTA2Miw3ICsxMDg4LDcgQEAgc3RhdGljIGludCBzd2l0Y2hfdG9fcGh5 X2luZGV4MShzdHJ1Y3QgZHJhbV9pbmZvICpkcmFtLAo+ICAgCQljbHJzZXRiaXRzX2xlMzIoJmRl bmFsaV9waHlbODk2XSwgKDB4MyA8PCA4KSB8IDEsIDEgPDwgOCk7Cj4gICAJCXJldCA9IGRhdGFf dHJhaW5pbmcoJmRyYW0tPmNoYW5bY2hhbm5lbF0sIGNoYW5uZWwsCj4gICAJCQkJICAgIHBhcmFt cywgUElfRlVMTF9UUkFJTklORyk7Cj4gLQkJaWYgKHJldCkgewo+ICsJCWlmIChyZXQgPCAwKSB7 Cj4gICAJCQlkZWJ1ZygiaW5kZXgxIHRyYWluaW5nIGZhaWxlZFxuIik7Cj4gICAJCQlyZXR1cm4g cmV0Owo+ICAgCQl9Cj4gQEAgLTExMDgsNyArMTEzNCw3IEBAIHN0YXRpYyBpbnQgc2RyYW1faW5p dChzdHJ1Y3QgZHJhbV9pbmZvICpkcmFtLAo+ICAgCQkJdWRlbGF5KDEwKTsKPiAgIAo+ICAgCQlp ZiAoZGF0YV90cmFpbmluZyhjaGFuLCBjaGFubmVsLCBwYXJhbXMsIFBJX0ZVTExfVFJBSU5JTkcp KSB7Cj4gLQkJCXByaW50ZigiU0RSQU0gaW5pdGlhbGl6YXRpb24gZmFpbGVkLCByZXNldFxuIik7 Cj4gKwkJCXByaW50ZigiJXM6IGRhdGEgdHJhaW5pbmcgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Cj4g ICAJCQlyZXR1cm4gLUVJTzsKPiAgIAkJfQo+ICAgCgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51 eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kever Yang Date: Tue, 16 Jul 2019 15:36:19 +0800 Subject: [U-Boot] [PATCH v3 01/18] ram: rk3399: Handle data training return types In-Reply-To: <20190715182856.21688-2-jagan@amarulasolutions.com> References: <20190715182856.21688-1-jagan@amarulasolutions.com> <20190715182856.21688-2-jagan@amarulasolutions.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de On 2019/7/16 上午2:28, Jagan Teki wrote: > data trainings calls like ca, wl, rg, rl, wdql have proper > return types with -EIO and the return type missed to handle > in data_training function. > > This patch, add proper return type checks along with useful > debug statement on each data training calls. > > Incidentally this would help to prevent the sdram initialization > hang for single channel dram and when the code is trying to > initialize second channel with proper return type of relevant > data training call might failed. > > Signed-off-by: Jagan Teki Reviewed-by: Kever Yang Thanks,  - Kever > --- > drivers/ram/rockchip/sdram_rk3399.c | 50 ++++++++++++++++++++++------- > 1 file changed, 38 insertions(+), 12 deletions(-) > > diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c > index 492b0975dd..e9c0fdf2d4 100644 > --- a/drivers/ram/rockchip/sdram_rk3399.c > +++ b/drivers/ram/rockchip/sdram_rk3399.c > @@ -887,6 +887,7 @@ static int data_training(const struct chan_info *chan, u32 channel, > u32 training_flag) > { > u32 *denali_phy = chan->publ->denali_phy; > + int ret; > > /* PHY_927 PHY_PAD_DQS_DRIVE RPULL offset_22 */ > setbits_le32(&denali_phy[927], (1 << 22)); > @@ -907,24 +908,49 @@ static int data_training(const struct chan_info *chan, u32 channel, > } > > /* ca training(LPDDR4,LPDDR3 support) */ > - if ((training_flag & PI_CA_TRAINING) == PI_CA_TRAINING) > - data_training_ca(chan, channel, params); > + if ((training_flag & PI_CA_TRAINING) == PI_CA_TRAINING) { > + ret = data_training_ca(chan, channel, params); > + if (ret < 0) { > + debug("%s: data training ca failed\n", __func__); > + return ret; > + } > + } > > /* write leveling(LPDDR4,LPDDR3,DDR3 support) */ > - if ((training_flag & PI_WRITE_LEVELING) == PI_WRITE_LEVELING) > - data_training_wl(chan, channel, params); > + if ((training_flag & PI_WRITE_LEVELING) == PI_WRITE_LEVELING) { > + ret = data_training_wl(chan, channel, params); > + if (ret < 0) { > + debug("%s: data training wl failed\n", __func__); > + return ret; > + } > + } > > /* read gate training(LPDDR4,LPDDR3,DDR3 support) */ > - if ((training_flag & PI_READ_GATE_TRAINING) == PI_READ_GATE_TRAINING) > - data_training_rg(chan, channel, params); > + if ((training_flag & PI_READ_GATE_TRAINING) == PI_READ_GATE_TRAINING) { > + ret = data_training_rg(chan, channel, params); > + if (ret < 0) { > + debug("%s: data training rg failed\n", __func__); > + return ret; > + } > + } > > /* read leveling(LPDDR4,LPDDR3,DDR3 support) */ > - if ((training_flag & PI_READ_LEVELING) == PI_READ_LEVELING) > - data_training_rl(chan, channel, params); > + if ((training_flag & PI_READ_LEVELING) == PI_READ_LEVELING) { > + ret = data_training_rl(chan, channel, params); > + if (ret < 0) { > + debug("%s: data training rl failed\n", __func__); > + return ret; > + } > + } > > /* wdq leveling(LPDDR4 support) */ > - if ((training_flag & PI_WDQ_LEVELING) == PI_WDQ_LEVELING) > - data_training_wdql(chan, channel, params); > + if ((training_flag & PI_WDQ_LEVELING) == PI_WDQ_LEVELING) { > + ret = data_training_wdql(chan, channel, params); > + if (ret < 0) { > + debug("%s: data training wdql failed\n", __func__); > + return ret; > + } > + } > > /* PHY_927 PHY_PAD_DQS_DRIVE RPULL offset_22 */ > clrbits_le32(&denali_phy[927], (1 << 22)); > @@ -1062,7 +1088,7 @@ static int switch_to_phy_index1(struct dram_info *dram, > clrsetbits_le32(&denali_phy[896], (0x3 << 8) | 1, 1 << 8); > ret = data_training(&dram->chan[channel], channel, > params, PI_FULL_TRAINING); > - if (ret) { > + if (ret < 0) { > debug("index1 training failed\n"); > return ret; > } > @@ -1108,7 +1134,7 @@ static int sdram_init(struct dram_info *dram, > udelay(10); > > if (data_training(chan, channel, params, PI_FULL_TRAINING)) { > - printf("SDRAM initialization failed, reset\n"); > + printf("%s: data training failed\n", __func__); > return -EIO; > } >