From patchwork Mon Dec 16 17:45:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 181752 Delivered-To: patch@linaro.org Received: by 2002:ac9:44c4:0:0:0:0:0 with SMTP id t4csp4615036och; Mon, 16 Dec 2019 09:51:45 -0800 (PST) X-Google-Smtp-Source: APXvYqz8H6e7KsZ6Xw0rxZn+9RznepNHwNakIKXLr3RmcAXWKP0tNfEvzfLlh2H4LpIINDzqVyOZ X-Received: by 2002:a05:6830:2116:: with SMTP id i22mr35173070otc.0.1576518704887; Mon, 16 Dec 2019 09:51:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576518704; cv=none; d=google.com; s=arc-20160816; b=vFST4sYd9YszGLMiOQZQoZPqhWKY8kKbwE4peWWz98EcyIzlAYfilKPUYII0tuGG56 MUEpIAHEzTOgtKi1xm/cxq03ov+x0PHXQ31rmfOmmn1yML83JwuPR3sGDi5RWrKN/TJO eKOLVNLNmLPwT3uMyKf2Nvsvbyg/8GgOjvxBG+uSsAJ5J3uWRUYvHjWWP6C/yuOlWnQo dtJ/fOULo2fovdkom/0bbFhrsQxguqSlFHynQWJ6/tCgOc9Snlv3SDquYiXC79pejT5u h8zA/VPA8LLZfyOatNMV7J9HYPakthMqApKf1+KbDR4Qiw7wUZyvFu82kyMVZFw2Mm6K 30Bw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ij57WLioUSrHsqhZFZpQkqa8E4qVLYlRKZ2vf3bmNlo=; b=zVbcmD1qgK3itCgGvc39UY+yN+6b+XJEn3bSCVnSeUnUOCIfH/CGktZ2M/JHQe2gJ4 sEI1Dj4GOCjOyShAYKe9U7RBOv/JAznuPdTQVOgJqgUXwjICoyhD8QmpYREERxnIbaoh 3p6EGMLC6H2dJH9hO1DGRjmibNZROGdUCA49I8+K3NMlkKHbfKGKhvUoXgTXMbQIQRj7 +fjXVF9L81IoRrNcQDRzKCH4xXxnkxXzu+YMBN/Zoy6CJ9/mvd1smVup8sVXeZOUDBFw RRstrLR/fVftdI0wNtzHOUouoZtwpnI7s09kdnQRYTBxnDAciaJMxVIYJy+kWXYOu4aQ pCPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=XS7JHond; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w15si11218103otm.263.2019.12.16.09.51.44; Mon, 16 Dec 2019 09:51:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=XS7JHond; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727125AbfLPRvn (ORCPT + 14 others); Mon, 16 Dec 2019 12:51:43 -0500 Received: from mail.kernel.org ([198.145.29.99]:42136 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727035AbfLPRvm (ORCPT ); Mon, 16 Dec 2019 12:51:42 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 023C322464; Mon, 16 Dec 2019 17:51:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1576518702; bh=92m9MD0g2AXDPwD4TjpCVW3W2UQi4LGyYLnHE06iveM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XS7JHondk4saeFPUjezqVtzzXtrAJjp9PjLxC4SEUMFu3WdFQ4Ecl4+4EmoZynSyG WuJXheGI3dUcmypCxxuHvkjL7bxqvbqwTEdfMOaRbAAOD77KvBmBqeeIvkq8lgAxTu OBVbJLu4X1h2RvIimeBxB/Fu4MyscvsRyvLn/Bzk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marek Szyprowski , Alexandre Belloni , Sasha Levin Subject: [PATCH 4.14 032/267] rtc: s3c-rtc: Avoid using broken ALMYEAR register Date: Mon, 16 Dec 2019 18:45:58 +0100 Message-Id: <20191216174852.488895969@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191216174848.701533383@linuxfoundation.org> References: <20191216174848.701533383@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Marek Szyprowski [ Upstream commit 50c8aec4212a966817e868056efc9bfbb73337c0 ] (RTC,ALM)YEAR registers of Exynos built-in RTC device contains 3 BCD characters. s3c-rtc driver uses only 2 lower of them and supports years from 2000..2099 range. The third BCD value is typically set to 0, but it looks that handling of it is broken in the hardware. It sometimes defaults to a random (even non-BCD) value. This is not an issue for handling RTCYEAR register, because bcd2bin() properly handles only 8bit values (2 BCD characters, the third one is skipped). The problem is however with ALMYEAR register and proper RTC alarm operation. When YEAREN bit is set for the configured alarm, RTC hardware triggers alarm only when ALMYEAR and RTCYEAR matches. This usually doesn't happen because of the random noise on the third BCD character. Fix this by simply skipping setting ALMYEAR register in alarm configuration. This workaround fixes broken alarm operation on Exynos built-in rtc device. My tests revealed that the issue happens on the following Exynos series: 3250, 4210, 4412, 5250 and 5410. Signed-off-by: Marek Szyprowski Signed-off-by: Alexandre Belloni Signed-off-by: Sasha Levin --- drivers/rtc/rtc-s3c.c | 6 ------ 1 file changed, 6 deletions(-) -- 2.20.1 diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index a8992c227f611..4120a305954af 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -327,7 +327,6 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) struct rtc_time *tm = &alrm->time; unsigned int alrm_en; int ret; - int year = tm->tm_year - 100; dev_dbg(dev, "s3c_rtc_setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n", alrm->enabled, @@ -356,11 +355,6 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm) writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_ALMHOUR); } - if (year < 100 && year >= 0) { - alrm_en |= S3C2410_RTCALM_YEAREN; - writeb(bin2bcd(year), info->base + S3C2410_ALMYEAR); - } - if (tm->tm_mon < 12 && tm->tm_mon >= 0) { alrm_en |= S3C2410_RTCALM_MONEN; writeb(bin2bcd(tm->tm_mon + 1), info->base + S3C2410_ALMMON);