blob: 74140fd38abd21d5e8d763f9bec45da7292cf389 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +09002/*
Marek Vasut1f686582024-02-27 17:05:57 +01003 * arch/arm/mach-renesas/cpu_info-rcar.c
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +09004 *
Nobuhiro Iwamatsu091bc062014-03-28 11:07:39 +09005 * Copyright (C) 2013,2014 Renesas Electronics Corporation
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +09006 */
Paul Barker442ce1c2023-11-01 20:05:53 +00007
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +09008#include <asm/io.h>
9
Marek Vasut14cdf952017-05-13 15:57:38 +020010#define PRR_MASK 0x7fff
11#define R8A7796_REV_1_0 0x5200
12#define R8A7796_REV_1_1 0x5210
Biju Das4e93dc92020-09-15 15:15:22 +010013#define R8A7796_REV_1_3 0x5211
Hai Pham289754e2021-05-04 17:43:23 +070014#define R8A77995_REV_1_1 0x5810
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +090015
Marek Vasut40d1ea22024-02-27 17:05:51 +010016static u32 renesas_get_prr(void)
Marek Vasute2985262018-10-18 20:28:19 +020017{
Hai Pham9046b5f2023-02-28 22:22:03 +010018 if (IS_ENABLED(CONFIG_RCAR_64))
Marek Vasut43f5dc02023-02-28 07:27:51 +010019 return readl(0xFFF00044);
20
Marek Vasute2985262018-10-18 20:28:19 +020021 return readl(0xFF000044);
Marek Vasute2985262018-10-18 20:28:19 +020022}
Marek Vasutab7899b2017-11-09 21:49:48 +010023
Marek Vasut30fe98e2024-02-27 17:05:45 +010024u32 renesas_get_cpu_type(void)
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +090025{
Marek Vasut40d1ea22024-02-27 17:05:51 +010026 return (renesas_get_prr() & 0x00007F00) >> 8;
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +090027}
28
Marek Vasut17602322024-02-27 17:05:46 +010029u32 renesas_get_cpu_rev_integer(void)
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +090030{
Marek Vasut40d1ea22024-02-27 17:05:51 +010031 const u32 prr = renesas_get_prr();
Biju Das4e93dc92020-09-15 15:15:22 +010032 const u32 rev = prr & PRR_MASK;
Marek Vasut14cdf952017-05-13 15:57:38 +020033
Hai Pham289754e2021-05-04 17:43:23 +070034 if (rev == R8A7796_REV_1_1 || rev == R8A7796_REV_1_3 ||
35 rev == R8A77995_REV_1_1)
Marek Vasut14cdf952017-05-13 15:57:38 +020036 return 1;
37 else
38 return ((prr & 0x000000F0) >> 4) + 1;
Nobuhiro Iwamatsuc6ccb472013-11-21 17:06:45 +090039}
Nobuhiro Iwamatsu520d06d2014-03-28 11:15:59 +090040
Marek Vasut17602322024-02-27 17:05:46 +010041u32 renesas_get_cpu_rev_fraction(void)
Nobuhiro Iwamatsu520d06d2014-03-28 11:15:59 +090042{
Marek Vasut40d1ea22024-02-27 17:05:51 +010043 const u32 prr = renesas_get_prr();
Biju Das4e93dc92020-09-15 15:15:22 +010044 const u32 rev = prr & PRR_MASK;
Marek Vasut14cdf952017-05-13 15:57:38 +020045
Hai Pham289754e2021-05-04 17:43:23 +070046 if (rev == R8A7796_REV_1_1 || rev == R8A77995_REV_1_1)
Marek Vasut14cdf952017-05-13 15:57:38 +020047 return 1;
Biju Das4e93dc92020-09-15 15:15:22 +010048 else if (rev == R8A7796_REV_1_3)
49 return 3;
Marek Vasut14cdf952017-05-13 15:57:38 +020050 else
51 return prr & 0x0000000F;
Nobuhiro Iwamatsu520d06d2014-03-28 11:15:59 +090052}