From nobody Wed Nov 27 18:48:54 2024 Received: from fhigh-a6-smtp.messagingengine.com (fhigh-a6-smtp.messagingengine.com [103.168.172.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1B4B18BBA5; Tue, 8 Oct 2024 08:54:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728377700; cv=none; b=KIPLarXhiDYk2eSTnWPVD9NPHL9/83v3Q+myZeZXyXFj3NajQJU7xPIR6eY4KyfQdEeUB0owj5iYyM1GY+k+AX6kK+lUevkWWavpP3lcNBjkfEeYfYtHE+MGFh0Dt0fiLUhCCPtEiM4F6lGl0htCQc51eQZYqhKpbBvTVdclcQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728377700; c=relaxed/simple; bh=gUbDqpB8Cus8nZqB0o/9ZyNR+emBAsI9l8vRtuoHM2c=; h=To:Cc:Message-Id:In-Reply-To:References:From:Subject:Date; b=IgFCb0IzN30jbl3sQsZmwrE68htZ1VBvyzPi2hWaNc3bzpukclP0rwYN58T3Rrvrr0bcV5w3aiCE2wnm7mTLT8r4ngJTa6SgmnPTkEQQkI1+pqqqoMbM+5jsEwVUSHrGwKkytO38ToefdqXEgzE/H6D49UkJJo+ekg3bciPJEsM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=none smtp.mailfrom=linux-m68k.org; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=kv7u1oob; arc=none smtp.client-ip=103.168.172.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux-m68k.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="kv7u1oob" Received: from phl-compute-07.internal (phl-compute-07.phl.internal [10.202.2.47]) by mailfhigh.phl.internal (Postfix) with ESMTP id EAD86114005D; Tue, 8 Oct 2024 04:54:57 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-07.internal (MEProxy); Tue, 08 Oct 2024 04:54:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1728377697; x= 1728464097; bh=oqL0s3V+ndmvIvwbSBY0P2n5NEr27DGG36gxIQI+AuI=; b=k v7u1oob3EQRanKAfgC6YYu7kHY/CPK209ecL3CsH4ZfL0tmC4purHd7phbeho6Nb Z4S3CqKL5MZ2gVbGxZeIxBNx6dY+jAdwyg6DcRTorbPWtQR36IwSuGWsEVZht7Tn Vas+qLifd06+ROThhv/LlUJq9Dd1si+pUxmyLtpoZg2qzxIBQe7N8yqmr+toSgRs QSk9JWi7zK8NsShh3PcT6fI7vBXKpG+/Hqah95U/kALm3HBAQySLLhbxXuR1D1UT z7IrryCrZoTCgGJlocmfhuBGYN3Xpr0Yv3KOUUWwo2neALGaeDSBJlbDexlMTUq+ PPOLOvO+E0kajFsB8ViSQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdefuddguddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhepvfevkfgjfhfhufffsedttdertddttddtnecuhfhr ohhmpefhihhnnhcuvfhhrghinhcuoehfthhhrghinheslhhinhhugidqmheikehkrdhorh hgqeenucggtffrrghtthgvrhhnpeevgffgtdfhhfefveeuudfgtdeugfeftedtveekieeg gfduleetgeegueehgeffffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmh grihhlfhhrohhmpehfthhhrghinheslhhinhhugidqmheikehkrdhorhhgpdhnsggprhgt phhtthhopeelpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopegurghvvghmsegurg hvvghmlhhofhhtrdhnvghtpdhrtghpthhtoheprghnughrvggrshesghgrihhslhgvrhdr tghomhdprhgtphhtthhopegrlhgvgigrnhgurhgvrdgsvghllhhonhhisegsohhothhlih hnrdgtohhmpdhrtghpthhtohepuggrnhhivghlsedtgidtfhdrtghomhdprhgtphhtthho pehprghvohhnvgesrhgvthhrohguvghvrdgtohhmpdhrtghpthhtoheplhhinhhugidqmh eikehksehlihhsthhsrdhlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehlihhn uhigqdhrthgtsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtohepshhprghrtg hlihhnuhigsehvghgvrhdrkhgvrhhnvghlrdhorhhgpdhrtghpthhtoheplhhinhhugidq khgvrhhnvghlsehvghgvrhdrkhgvrhhnvghlrdhorhhg X-ME-Proxy: Feedback-ID: i58a146ae:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 8 Oct 2024 04:54:54 -0400 (EDT) To: "David S. Miller" , Andreas Larsson , Alexandre Belloni Cc: Daniel Palmer , Michael Pavone , linux-m68k@lists.linux-m68k.org, linux-rtc@vger.kernel.org, sparclinux@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: <41e9f3f320a70b4d0946f7e0c3622f1dd1e8791c.1728377511.git.fthain@linux-m68k.org> In-Reply-To: References: From: Finn Thain Subject: [PATCH v3 1/2] rtc: m48t59: Use platform_data struct for year offset value Date: Tue, 08 Oct 2024 19:51:51 +1100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Instead of hard-coded values and ifdefs, store the year offset in the platform_data struct. Tested-by: Daniel Palmer Signed-off-by: Finn Thain Reviewed-by: Geert Uytterhoeven --- I tested this for regressions using qemu-system-sparc64. Also, Daniel tested the RTC functionality on his MVME147 system. Changed since v2: - Use an int for the year offset in struct m48t59_plat_data. --- arch/sparc/kernel/time_32.c | 1 + arch/sparc/kernel/time_64.c | 1 + drivers/rtc/rtc-m48t59.c | 26 ++++---------------------- include/linux/rtc/m48t59.h | 3 +++ 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/arch/sparc/kernel/time_32.c b/arch/sparc/kernel/time_32.c index 08bbdc458596..578fd0d49f30 100644 --- a/arch/sparc/kernel/time_32.c +++ b/arch/sparc/kernel/time_32.c @@ -255,6 +255,7 @@ static void mostek_write_byte(struct device *dev, u32 o= fs, u8 val) static struct m48t59_plat_data m48t59_data =3D { .read_byte =3D mostek_read_byte, .write_byte =3D mostek_write_byte, + .yy_offset =3D 68, }; =20 /* resource is set at runtime */ diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index 60f1c8cc5363..b32f27f929d1 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c @@ -544,6 +544,7 @@ static void mostek_write_byte(struct device *dev, u32 o= fs, u8 val) static struct m48t59_plat_data m48t59_data =3D { .read_byte =3D mostek_read_byte, .write_byte =3D mostek_write_byte, + .yy_offset =3D 68, }; =20 static struct platform_device m48t59_rtc =3D { diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c index f0f6b9b6daec..4c339fb45b5c 100644 --- a/drivers/rtc/rtc-m48t59.c +++ b/drivers/rtc/rtc-m48t59.c @@ -71,7 +71,7 @@ static int m48t59_rtc_read_time(struct device *dev, struc= t rtc_time *tm) /* Issue the READ command */ M48T59_SET_BITS(M48T59_CNTL_READ, M48T59_CNTL); =20 - tm->tm_year =3D bcd2bin(M48T59_READ(M48T59_YEAR)); + tm->tm_year =3D bcd2bin(M48T59_READ(M48T59_YEAR)) + pdata->yy_offset; /* tm_mon is 0-11 */ tm->tm_mon =3D bcd2bin(M48T59_READ(M48T59_MONTH)) - 1; tm->tm_mday =3D bcd2bin(M48T59_READ(M48T59_MDAY)); @@ -82,10 +82,6 @@ static int m48t59_rtc_read_time(struct device *dev, stru= ct rtc_time *tm) dev_dbg(dev, "Century bit is enabled\n"); tm->tm_year +=3D 100; /* one century */ } -#ifdef CONFIG_SPARC - /* Sun SPARC machines count years since 1968 */ - tm->tm_year +=3D 68; -#endif =20 tm->tm_wday =3D bcd2bin(val & 0x07); tm->tm_hour =3D bcd2bin(M48T59_READ(M48T59_HOUR) & 0x3F); @@ -106,12 +102,7 @@ static int m48t59_rtc_set_time(struct device *dev, str= uct rtc_time *tm) struct m48t59_private *m48t59 =3D dev_get_drvdata(dev); unsigned long flags; u8 val =3D 0; - int year =3D tm->tm_year; - -#ifdef CONFIG_SPARC - /* Sun SPARC machines count years since 1968 */ - year -=3D 68; -#endif + int year =3D tm->tm_year - pdata->yy_offset; =20 dev_dbg(dev, "RTC set time %04d-%02d-%02d %02d/%02d/%02d\n", year + 1900, tm->tm_mon, tm->tm_mday, @@ -162,11 +153,7 @@ static int m48t59_rtc_readalarm(struct device *dev, st= ruct rtc_wkalrm *alrm) /* Issue the READ command */ M48T59_SET_BITS(M48T59_CNTL_READ, M48T59_CNTL); =20 - tm->tm_year =3D bcd2bin(M48T59_READ(M48T59_YEAR)); -#ifdef CONFIG_SPARC - /* Sun SPARC machines count years since 1968 */ - tm->tm_year +=3D 68; -#endif + tm->tm_year =3D bcd2bin(M48T59_READ(M48T59_YEAR)) + pdata->yy_offset; /* tm_mon is 0-11 */ tm->tm_mon =3D bcd2bin(M48T59_READ(M48T59_MONTH)) - 1; =20 @@ -197,12 +184,7 @@ static int m48t59_rtc_setalarm(struct device *dev, str= uct rtc_wkalrm *alrm) struct rtc_time *tm =3D &alrm->time; u8 mday, hour, min, sec; unsigned long flags; - int year =3D tm->tm_year; - -#ifdef CONFIG_SPARC - /* Sun SPARC machines count years since 1968 */ - year -=3D 68; -#endif + int year =3D tm->tm_year - pdata->yy_offset; =20 /* If no irq, we don't support ALARM */ if (m48t59->irq =3D=3D NO_IRQ) diff --git a/include/linux/rtc/m48t59.h b/include/linux/rtc/m48t59.h index 9465d5405fe2..373ba77071c6 100644 --- a/include/linux/rtc/m48t59.h +++ b/include/linux/rtc/m48t59.h @@ -56,6 +56,9 @@ struct m48t59_plat_data { void __iomem *ioaddr; /* offset to RTC registers, automatically set according to the type */ unsigned int offset; + + /* YY digits (in RTC) are offset, i.e. year is 1900 + yy_offset + YY */ + int yy_offset; }; =20 #endif /* _LINUX_RTC_M48T59_H_ */ --=20 2.39.5 From nobody Wed Nov 27 18:48:54 2024 Received: from fout-a8-smtp.messagingengine.com (fout-a8-smtp.messagingengine.com [103.168.172.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4631D1DF27E; Tue, 8 Oct 2024 08:55:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.151 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728377710; cv=none; b=VLj1AbNrhT2eEses4Xa//M1GCorj2GtvK+AuvsIu5M7yTuvTbBbbBD9muNF5EF3e7N8c0UoDh4eHu1Kx4p9xc+fH/43tKt1H5qLpLBFiCwyurF7zTNjYc8VBGnCN/oyuw+p+37LLIGYmYXaotlPYUJkNUdTJO4mv354ZTUJUWrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728377710; c=relaxed/simple; bh=iEvmiQzVFaACDIJubF1zf1z+FounRzHmquv1QSbaYo0=; h=To:Cc:Message-Id:In-Reply-To:References:From:Subject:Date; b=FfSISFmhnDXOR+HfvUr/2wYtkq2Yu/r3kSPYoKpdZxV0zbDlstgOerF45WTY8TZSxPv/MGQmaM8f1PP/FNmZtbwKth2a5c29eo1EItjh2DbtL5fJ6MMin8lugIhs5toO+CmBbURmH20V9P8PVnq5JBAyfrhrEPA1wUzKvid7epw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org; spf=none smtp.mailfrom=linux-m68k.org; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=A9hBnrVv; arc=none smtp.client-ip=103.168.172.151 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux-m68k.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux-m68k.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="A9hBnrVv" Received: from phl-compute-09.internal (phl-compute-09.phl.internal [10.202.2.49]) by mailfout.phl.internal (Postfix) with ESMTP id 659F013806CA; Tue, 8 Oct 2024 04:55:07 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-09.internal (MEProxy); Tue, 08 Oct 2024 04:55:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1728377707; x= 1728464107; bh=OQV1Ml3IQjMOJbT0npBbPfqRVnu/0BS+T7xjD8Hj3r0=; b=A 9hBnrVvkwSUnv9fqAEFFvFwCXrxNBnUmU/XO+mKcshLzgdutBQXe3e402Lg5Ff+t ZmuQcF3N6qyQRiS8zb34lrH+rpqR11PObAndDnGwxXJpDjd9t6XbEeGr++0h1iUN LCVCgIlJ0fZiP8LmV9XLlL4rnT96UT3PkCyyO/nCgshjk8PsoadO41tS2rjP+Ynd aelToXA8hQDqsHtFbgyw4dnt0zJOFDoQOrJAKYn99ucAvL756zrJLrWMP95DIcW/ 5JLTIBSYTCg9iBk5H0IUsLHh9atZgop0t2SW5gjWaOhUteyx7Pa1NQTPrXEnNpIi UnD0VJOgAk8gkROgo+B7g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdefuddguddtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurhepvfevkfgjfhfhufffsedttdertddttddtnecuhfhr ohhmpefhihhnnhcuvfhhrghinhcuoehfthhhrghinheslhhinhhugidqmheikehkrdhorh hgqeenucggtffrrghtthgvrhhnpeevgffgtdfhhfefveeuudfgtdeugfeftedtveekieeg gfduleetgeegueehgeffffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmh grihhlfhhrohhmpehfthhhrghinheslhhinhhugidqmheikehkrdhorhhgpdhnsggprhgt phhtthhopeeipdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehgvggvrhhtsehlih hnuhigqdhmieekkhdrohhrghdprhgtphhtthhopegurghnihgvlhestdigtdhfrdgtohhm pdhrtghpthhtohepphgrvhhonhgvsehrvghtrhhouggvvhdrtghomhdprhgtphhtthhope hlihhnuhigqdhmieekkheslhhishhtshdrlhhinhhugidqmheikehkrdhorhhgpdhrtghp thhtoheplhhinhhugidqrhhttgesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtth hopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: i58a146ae:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 8 Oct 2024 04:55:04 -0400 (EDT) To: Geert Uytterhoeven Cc: Daniel Palmer , Michael Pavone , linux-m68k@lists.linux-m68k.org, linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: In-Reply-To: References: From: Finn Thain Subject: [PATCH v3 2/2] m68k: mvme147, mvme16x: Adopt rtc-m48t59 platform driver Date: Tue, 08 Oct 2024 19:51:51 +1100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Both mvme147 and mvme16x platforms have their own RTC driver implementations that duplicate functionality provided by the rtc-m48t59 driver. Adopt the rtc-m48t59 driver and remove the other ones. Tested-by: Daniel Palmer Signed-off-by: Finn Thain Reviewed-by: Geert Uytterhoeven --- This patch depends upon the m48t59 driver changes in the preceding patch. Changed since v1: - Initialize yy_offset in struct m48t59_plat_data. --- arch/m68k/configs/multi_defconfig | 1 + arch/m68k/configs/mvme147_defconfig | 1 + arch/m68k/configs/mvme16x_defconfig | 1 + arch/m68k/include/asm/mvme147hw.h | 19 +--- arch/m68k/include/asm/mvme16xhw.h | 18 +-- arch/m68k/mvme147/config.c | 55 ++++------ arch/m68k/mvme16x/Makefile | 2 +- arch/m68k/mvme16x/config.c | 57 ++++------ arch/m68k/mvme16x/rtc.c | 165 ---------------------------- 9 files changed, 54 insertions(+), 265 deletions(-) delete mode 100644 arch/m68k/mvme16x/rtc.c diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_de= fconfig index 638df8442c98..617ac93298f3 100644 --- a/arch/m68k/configs/multi_defconfig +++ b/arch/m68k/configs/multi_defconfig @@ -506,6 +506,7 @@ CONFIG_RTC_CLASS=3Dy CONFIG_RTC_DRV_MSM6242=3Dm CONFIG_RTC_DRV_RP5C01=3Dm CONFIG_RTC_DRV_GENERIC=3Dm +CONFIG_RTC_DRV_M48T59=3Dm # CONFIG_VIRTIO_MENU is not set # CONFIG_VHOST_MENU is not set # CONFIG_IOMMU_SUPPORT is not set diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme14= 7_defconfig index 2248db426081..4a0928b3b842 100644 --- a/arch/m68k/configs/mvme147_defconfig +++ b/arch/m68k/configs/mvme147_defconfig @@ -392,6 +392,7 @@ CONFIG_UHID=3Dm CONFIG_RTC_CLASS=3Dy # CONFIG_RTC_NVMEM is not set CONFIG_RTC_DRV_GENERIC=3Dm +CONFIG_RTC_DRV_M48T59=3Dy # CONFIG_VIRTIO_MENU is not set # CONFIG_VHOST_MENU is not set # CONFIG_IOMMU_SUPPORT is not set diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16= x_defconfig index 2975b66521f6..481fb2810f1e 100644 --- a/arch/m68k/configs/mvme16x_defconfig +++ b/arch/m68k/configs/mvme16x_defconfig @@ -393,6 +393,7 @@ CONFIG_UHID=3Dm CONFIG_RTC_CLASS=3Dy # CONFIG_RTC_NVMEM is not set CONFIG_RTC_DRV_GENERIC=3Dm +CONFIG_RTC_DRV_M48T59=3Dy # CONFIG_VIRTIO_MENU is not set # CONFIG_VHOST_MENU is not set # CONFIG_IOMMU_SUPPORT is not set diff --git a/arch/m68k/include/asm/mvme147hw.h b/arch/m68k/include/asm/mvme= 147hw.h index dbf88059e47a..6ad93bac06f9 100644 --- a/arch/m68k/include/asm/mvme147hw.h +++ b/arch/m68k/include/asm/mvme147hw.h @@ -4,24 +4,7 @@ =20 #include =20 -typedef struct { - unsigned char - ctrl, - bcd_sec, - bcd_min, - bcd_hr, - bcd_dow, - bcd_dom, - bcd_mth, - bcd_year; -} MK48T02; - -#define RTC_WRITE 0x80 -#define RTC_READ 0x40 -#define RTC_STOP 0x20 - -#define m147_rtc ((MK48T02 * volatile)0xfffe07f8) - +#define MVME147_RTC_BASE 0xfffe0000 =20 struct pcc_regs { volatile u_long dma_tadr; diff --git a/arch/m68k/include/asm/mvme16xhw.h b/arch/m68k/include/asm/mvme= 16xhw.h index cc7f5ae1220f..ff1126a51fbe 100644 --- a/arch/m68k/include/asm/mvme16xhw.h +++ b/arch/m68k/include/asm/mvme16xhw.h @@ -24,23 +24,7 @@ typedef struct { =20 #define mvmelp ((*(volatile MVMElpPtr)(MVME_LPR_BASE))) =20 -typedef struct { - unsigned char - ctrl, - bcd_sec, - bcd_min, - bcd_hr, - bcd_dow, - bcd_dom, - bcd_mth, - bcd_year; -} MK48T08_t, *MK48T08ptr_t; - -#define RTC_WRITE 0x80 -#define RTC_READ 0x40 -#define RTC_STOP 0x20 - -#define MVME_RTC_BASE 0xfffc1ff8 +#define MVME_RTC_BASE 0xfffc0000 =20 #define MVME_I596_BASE 0xfff46000 =20 diff --git a/arch/m68k/mvme147/config.c b/arch/m68k/mvme147/config.c index aa46a80e65a2..e243f2770b91 100644 --- a/arch/m68k/mvme147/config.c +++ b/arch/m68k/mvme147/config.c @@ -19,8 +19,9 @@ #include #include #include -#include #include +#include +#include =20 #include #include @@ -36,13 +37,9 @@ =20 static void mvme147_get_model(char *model); extern void mvme147_sched_init(void); -extern int mvme147_hwclk (int, struct rtc_time *); extern void mvme147_reset (void); =20 =20 -static int bcd2int (unsigned char b); - - int __init mvme147_parse_bootinfo(const struct bi_record *bi) { uint16_t tag =3D be16_to_cpu(bi->tag); @@ -80,7 +77,6 @@ void __init config_mvme147(void) { mach_sched_init =3D mvme147_sched_init; mach_init_IRQ =3D mvme147_init_IRQ; - mach_hwclk =3D mvme147_hwclk; mach_reset =3D mvme147_reset; mach_get_model =3D mvme147_get_model; =20 @@ -89,6 +85,28 @@ void __init config_mvme147(void) vme_brdtype =3D VME_TYPE_MVME147; } =20 +static struct resource m48t59_rsrc[] =3D { + DEFINE_RES_MEM(MVME147_RTC_BASE, 0x800), +}; + +static struct m48t59_plat_data m48t59_data =3D { + .type =3D M48T59RTC_TYPE_M48T02, + .yy_offset =3D 70, +}; + +static int __init mvme147_platform_init(void) +{ + if (!MACH_IS_MVME147) + return 0; + + platform_device_register_resndata(NULL, "rtc-m48t59", -1, + m48t59_rsrc, ARRAY_SIZE(m48t59_rsrc), + &m48t59_data, sizeof(m48t59_data)); + return 0; +} + +arch_initcall(mvme147_platform_init); + static u64 mvme147_read_clk(struct clocksource *cs); =20 static struct clocksource mvme147_clk =3D { @@ -162,31 +180,6 @@ static u64 mvme147_read_clk(struct clocksource *cs) return ticks; } =20 -static int bcd2int (unsigned char b) -{ - return ((b>>4)*10 + (b&15)); -} - -int mvme147_hwclk(int op, struct rtc_time *t) -{ - if (!op) { - m147_rtc->ctrl =3D RTC_READ; - t->tm_year =3D bcd2int (m147_rtc->bcd_year); - t->tm_mon =3D bcd2int(m147_rtc->bcd_mth) - 1; - t->tm_mday =3D bcd2int (m147_rtc->bcd_dom); - t->tm_hour =3D bcd2int (m147_rtc->bcd_hr); - t->tm_min =3D bcd2int (m147_rtc->bcd_min); - t->tm_sec =3D bcd2int (m147_rtc->bcd_sec); - m147_rtc->ctrl =3D 0; - if (t->tm_year < 70) - t->tm_year +=3D 100; - } else { - /* FIXME Setting the time is not yet supported */ - return -EOPNOTSUPP; - } - return 0; -} - #define SCC_DELAY do { __asm__ __volatile__ ("nop; nop;"); } while (0) =20 static void scc_write(char ch) diff --git a/arch/m68k/mvme16x/Makefile b/arch/m68k/mvme16x/Makefile index a8a368c2cbea..02f9e4ad8209 100644 --- a/arch/m68k/mvme16x/Makefile +++ b/arch/m68k/mvme16x/Makefile @@ -3,4 +3,4 @@ # Makefile for Linux arch/m68k/mvme16x source directory # =20 -obj-y :=3D config.o rtc.o +obj-y :=3D config.o diff --git a/arch/m68k/mvme16x/config.c b/arch/m68k/mvme16x/config.c index d1fbd1704d65..99768fe8da73 100644 --- a/arch/m68k/mvme16x/config.c +++ b/arch/m68k/mvme16x/config.c @@ -21,9 +21,10 @@ #include #include #include -#include #include #include +#include +#include =20 #include #include @@ -39,16 +40,10 @@ =20 extern t_bdid mvme_bdid; =20 -static MK48T08ptr_t volatile rtc =3D (MK48T08ptr_t)MVME_RTC_BASE; - static void mvme16x_get_model(char *model); extern void mvme16x_sched_init(void); -extern int mvme16x_hwclk (int, struct rtc_time *); extern void mvme16x_reset (void); =20 -int bcd2int (unsigned char b); - - unsigned short mvme16x_config; EXPORT_SYMBOL(mvme16x_config); =20 @@ -268,7 +263,6 @@ void __init config_mvme16x(void) =20 mach_sched_init =3D mvme16x_sched_init; mach_init_IRQ =3D mvme16x_init_IRQ; - mach_hwclk =3D mvme16x_hwclk; mach_reset =3D mvme16x_reset; mach_get_model =3D mvme16x_get_model; mach_get_hardware_list =3D mvme16x_get_hardware_list; @@ -312,6 +306,28 @@ void __init config_mvme16x(void) } } =20 +static struct resource m48t59_rsrc[] =3D { + DEFINE_RES_MEM(MVME_RTC_BASE, 0x2000), +}; + +static struct m48t59_plat_data m48t59_data =3D { + .type =3D M48T59RTC_TYPE_M48T08, + .yy_offset =3D 70, +}; + +static int __init mvme16x_platform_init(void) +{ + if (!MACH_IS_MVME16x) + return 0; + + platform_device_register_resndata(NULL, "rtc-m48t59", -1, + m48t59_rsrc, ARRAY_SIZE(m48t59_rsrc), + &m48t59_data, sizeof(m48t59_data)); + return 0; +} + +arch_initcall(mvme16x_platform_init); + static irqreturn_t mvme16x_abort_int (int irq, void *dev_id) { unsigned long *new =3D (unsigned long *)vectors; @@ -426,28 +442,3 @@ static u64 mvme16x_read_clk(struct clocksource *cs) =20 return ticks; } - -int bcd2int (unsigned char b) -{ - return ((b>>4)*10 + (b&15)); -} - -int mvme16x_hwclk(int op, struct rtc_time *t) -{ - if (!op) { - rtc->ctrl =3D RTC_READ; - t->tm_year =3D bcd2int (rtc->bcd_year); - t->tm_mon =3D bcd2int(rtc->bcd_mth) - 1; - t->tm_mday =3D bcd2int (rtc->bcd_dom); - t->tm_hour =3D bcd2int (rtc->bcd_hr); - t->tm_min =3D bcd2int (rtc->bcd_min); - t->tm_sec =3D bcd2int (rtc->bcd_sec); - rtc->ctrl =3D 0; - if (t->tm_year < 70) - t->tm_year +=3D 100; - } else { - /* FIXME Setting the time is not yet supported */ - return -EOPNOTSUPP; - } - return 0; -} diff --git a/arch/m68k/mvme16x/rtc.c b/arch/m68k/mvme16x/rtc.c deleted file mode 100644 index ccbaae1125e6..000000000000 --- a/arch/m68k/mvme16x/rtc.c +++ /dev/null @@ -1,165 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Real Time Clock interface for Linux on the MVME16x - * - * Based on the PC driver by Paul Gortmaker. - */ - -#define RTC_VERSION "1.00" - -#include -#include -#include -#include -#include -#include -#include -#include -#include /* For struct rtc_time and ioctls, etc */ -#include -#include - -#include -#include -#include - -/* - * We sponge a minor off of the misc major. No need slurping - * up another valuable major dev number for this. If you add - * an ioctl, make sure you don't conflict with SPARC's RTC - * ioctls. - */ - -static const unsigned char days_in_mo[] =3D -{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; - -static atomic_t rtc_ready =3D ATOMIC_INIT(1); - -static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long a= rg) -{ - volatile MK48T08ptr_t rtc =3D (MK48T08ptr_t)MVME_RTC_BASE; - unsigned long flags; - struct rtc_time wtime; - void __user *argp =3D (void __user *)arg; - - switch (cmd) { - case RTC_RD_TIME: /* Read the time/date from RTC */ - { - local_irq_save(flags); - /* Ensure clock and real-time-mode-register are accessible */ - rtc->ctrl =3D RTC_READ; - memset(&wtime, 0, sizeof(struct rtc_time)); - wtime.tm_sec =3D bcd2bin(rtc->bcd_sec); - wtime.tm_min =3D bcd2bin(rtc->bcd_min); - wtime.tm_hour =3D bcd2bin(rtc->bcd_hr); - wtime.tm_mday =3D bcd2bin(rtc->bcd_dom); - wtime.tm_mon =3D bcd2bin(rtc->bcd_mth)-1; - wtime.tm_year =3D bcd2bin(rtc->bcd_year); - if (wtime.tm_year < 70) - wtime.tm_year +=3D 100; - wtime.tm_wday =3D bcd2bin(rtc->bcd_dow)-1; - rtc->ctrl =3D 0; - local_irq_restore(flags); - return copy_to_user(argp, &wtime, sizeof wtime) ? - -EFAULT : 0; - } - case RTC_SET_TIME: /* Set the RTC */ - { - struct rtc_time rtc_tm; - unsigned char mon, day, hrs, min, sec, leap_yr; - unsigned int yrs; - - if (!capable(CAP_SYS_ADMIN)) - return -EACCES; - - if (copy_from_user(&rtc_tm, argp, sizeof(struct rtc_time))) - return -EFAULT; - - yrs =3D rtc_tm.tm_year; - if (yrs < 1900) - yrs +=3D 1900; - mon =3D rtc_tm.tm_mon + 1; /* tm_mon starts at zero */ - day =3D rtc_tm.tm_mday; - hrs =3D rtc_tm.tm_hour; - min =3D rtc_tm.tm_min; - sec =3D rtc_tm.tm_sec; - - leap_yr =3D ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); - - if ((mon > 12) || (day =3D=3D 0)) - return -EINVAL; - - if (day > (days_in_mo[mon] + ((mon =3D=3D 2) && leap_yr))) - return -EINVAL; - - if ((hrs >=3D 24) || (min >=3D 60) || (sec >=3D 60)) - return -EINVAL; - - if (yrs >=3D 2070) - return -EINVAL; - - local_irq_save(flags); - rtc->ctrl =3D RTC_WRITE; - - rtc->bcd_sec =3D bin2bcd(sec); - rtc->bcd_min =3D bin2bcd(min); - rtc->bcd_hr =3D bin2bcd(hrs); - rtc->bcd_dom =3D bin2bcd(day); - rtc->bcd_mth =3D bin2bcd(mon); - rtc->bcd_year =3D bin2bcd(yrs%100); - - rtc->ctrl =3D 0; - local_irq_restore(flags); - return 0; - } - default: - return -EINVAL; - } -} - -/* - * We enforce only one user at a time here with the open/close. - */ -static int rtc_open(struct inode *inode, struct file *file) -{ - if( !atomic_dec_and_test(&rtc_ready) ) - { - atomic_inc( &rtc_ready ); - return -EBUSY; - } - return 0; -} - -static int rtc_release(struct inode *inode, struct file *file) -{ - atomic_inc( &rtc_ready ); - return 0; -} - -/* - * The various file operations we support. - */ - -static const struct file_operations rtc_fops =3D { - .unlocked_ioctl =3D rtc_ioctl, - .open =3D rtc_open, - .release =3D rtc_release, - .llseek =3D noop_llseek, -}; - -static struct miscdevice rtc_dev=3D -{ - .minor =3D RTC_MINOR, - .name =3D "rtc", - .fops =3D &rtc_fops -}; - -static int __init rtc_MK48T08_init(void) -{ - if (!MACH_IS_MVME16x) - return -ENODEV; - - pr_info("MK48T08 Real Time Clock Driver v%s\n", RTC_VERSION); - return misc_register(&rtc_dev); -} -device_initcall(rtc_MK48T08_init); --=20 2.39.5