soc: ixp4xx: move cpu detection to linux/soc/ixp4xx/cpu.h
authorArnd Bergmann <arnd@arndb.de>
Sun, 25 Aug 2019 19:57:25 +0000 (21:57 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 17 Jun 2021 13:30:54 +0000 (15:30 +0200)
Generic drivers are unable to use the feature macros from mach/cpu.h
or the feature bits from mach/hardware.h, so move these into a global
header file along with some dummy helpers that list these features as
disabled elsewhere.

Cc: David S. Miller <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: netdev@vger.kernel.org
Cc: Zoltan HERPAI <wigyori@uid0.hu>
Cc: Raylynn Knight <rayknight@me.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-ixp4xx/common.c
arch/arm/mach-ixp4xx/include/mach/cpu.h [deleted file]
arch/arm/mach-ixp4xx/include/mach/hardware.h
arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h
drivers/crypto/ixp4xx_crypto.c
drivers/net/ethernet/xscale/ixp4xx_eth.c
drivers/net/ethernet/xscale/ptp_ixp46x.c
drivers/net/wan/ixp4xx_hss.c
drivers/soc/ixp4xx/ixp4xx-npe.c
drivers/soc/ixp4xx/ixp4xx-qmgr.c
include/linux/soc/ixp4xx/cpu.h [new file with mode: 0644]

index 431da1b..a7faf19 100644 (file)
@@ -27,6 +27,7 @@
 #include <linux/cpu.h>
 #include <linux/pci.h>
 #include <linux/sched_clock.h>
+#include <linux/soc/ixp4xx/cpu.h>
 #include <linux/irqchip/irq-ixp4xx.h>
 #include <linux/platform_data/timer-ixp4xx.h>
 #include <linux/dma-map-ops.h>
 
 #include "irqs.h"
 
+u32 ixp4xx_read_feature_bits(void)
+{
+       u32 val = ~__raw_readl(IXP4XX_EXP_CFG2);
+
+       if (cpu_is_ixp42x_rev_a0())
+               return IXP42X_FEATURE_MASK & ~(IXP4XX_FEATURE_RCOMP |
+                                              IXP4XX_FEATURE_AES);
+       if (cpu_is_ixp42x())
+               return val & IXP42X_FEATURE_MASK;
+       if (cpu_is_ixp43x())
+               return val & IXP43X_FEATURE_MASK;
+       return val & IXP46X_FEATURE_MASK;
+}
+EXPORT_SYMBOL(ixp4xx_read_feature_bits);
+
+void ixp4xx_write_feature_bits(u32 value)
+{
+       __raw_writel(~value, IXP4XX_EXP_CFG2);
+}
+EXPORT_SYMBOL(ixp4xx_write_feature_bits);
+
 #define IXP4XX_TIMER_FREQ 66666000
 
 /*************************************************************************
diff --git a/arch/arm/mach-ixp4xx/include/mach/cpu.h b/arch/arm/mach-ixp4xx/include/mach/cpu.h
deleted file mode 100644 (file)
index b872a53..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * arch/arm/mach-ixp4xx/include/mach/cpu.h
- *
- * IXP4XX cpu type detection
- *
- * Copyright (C) 2007 MontaVista Software, Inc.
- */
-
-#ifndef __ASM_ARCH_CPU_H__
-#define __ASM_ARCH_CPU_H__
-
-#include <linux/io.h>
-#include <asm/cputype.h>
-
-/* Processor id value in CP15 Register 0 */
-#define IXP42X_PROCESSOR_ID_VALUE      0x690541c0 /* including unused 0x690541Ex */
-#define IXP42X_PROCESSOR_ID_MASK       0xffffffc0
-
-#define IXP43X_PROCESSOR_ID_VALUE      0x69054040
-#define IXP43X_PROCESSOR_ID_MASK       0xfffffff0
-
-#define IXP46X_PROCESSOR_ID_VALUE      0x69054200 /* including IXP455 */
-#define IXP46X_PROCESSOR_ID_MASK       0xfffffff0
-
-#define cpu_is_ixp42x_rev_a0() ((read_cpuid_id() & (IXP42X_PROCESSOR_ID_MASK | 0xF)) == \
-                               IXP42X_PROCESSOR_ID_VALUE)
-#define cpu_is_ixp42x()        ((read_cpuid_id() & IXP42X_PROCESSOR_ID_MASK) == \
-                        IXP42X_PROCESSOR_ID_VALUE)
-#define cpu_is_ixp43x()        ((read_cpuid_id() & IXP43X_PROCESSOR_ID_MASK) == \
-                        IXP43X_PROCESSOR_ID_VALUE)
-#define cpu_is_ixp46x()        ((read_cpuid_id() & IXP46X_PROCESSOR_ID_MASK) == \
-                        IXP46X_PROCESSOR_ID_VALUE)
-
-static inline u32 ixp4xx_read_feature_bits(void)
-{
-       u32 val = ~__raw_readl(IXP4XX_EXP_CFG2);
-
-       if (cpu_is_ixp42x_rev_a0())
-               return IXP42X_FEATURE_MASK & ~(IXP4XX_FEATURE_RCOMP |
-                                              IXP4XX_FEATURE_AES);
-       if (cpu_is_ixp42x())
-               return val & IXP42X_FEATURE_MASK;
-       if (cpu_is_ixp43x())
-               return val & IXP43X_FEATURE_MASK;
-       return val & IXP46X_FEATURE_MASK;
-}
-
-static inline void ixp4xx_write_feature_bits(u32 value)
-{
-       __raw_writel(~value, IXP4XX_EXP_CFG2);
-}
-
-#endif  /* _ASM_ARCH_CPU_H */
index b884eed..b2b7301 100644 (file)
@@ -23,7 +23,7 @@
 #include "ixp4xx-regs.h"
 
 #ifndef __ASSEMBLER__
-#include <mach/cpu.h>
+#include <linux/soc/ixp4xx/cpu.h>
 #endif
 
 /* Platform helper functions and definitions */
index f375c1c..abb07f1 100644 (file)
 
 #define DCMD_LENGTH    0x01fff         /* length mask (max = 8K - 1) */
 
-/* "fuse" bits of IXP_EXP_CFG2 */
-/* All IXP4xx CPUs */
-#define IXP4XX_FEATURE_RCOMP           (1 << 0)
-#define IXP4XX_FEATURE_USB_DEVICE      (1 << 1)
-#define IXP4XX_FEATURE_HASH            (1 << 2)
-#define IXP4XX_FEATURE_AES             (1 << 3)
-#define IXP4XX_FEATURE_DES             (1 << 4)
-#define IXP4XX_FEATURE_HDLC            (1 << 5)
-#define IXP4XX_FEATURE_AAL             (1 << 6)
-#define IXP4XX_FEATURE_HSS             (1 << 7)
-#define IXP4XX_FEATURE_UTOPIA          (1 << 8)
-#define IXP4XX_FEATURE_NPEB_ETH0       (1 << 9)
-#define IXP4XX_FEATURE_NPEC_ETH                (1 << 10)
-#define IXP4XX_FEATURE_RESET_NPEA      (1 << 11)
-#define IXP4XX_FEATURE_RESET_NPEB      (1 << 12)
-#define IXP4XX_FEATURE_RESET_NPEC      (1 << 13)
-#define IXP4XX_FEATURE_PCI             (1 << 14)
-#define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT        (3 << 16)
-#define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22)
-#define IXP42X_FEATURE_MASK            (IXP4XX_FEATURE_RCOMP            | \
-                                        IXP4XX_FEATURE_USB_DEVICE       | \
-                                        IXP4XX_FEATURE_HASH             | \
-                                        IXP4XX_FEATURE_AES              | \
-                                        IXP4XX_FEATURE_DES              | \
-                                        IXP4XX_FEATURE_HDLC             | \
-                                        IXP4XX_FEATURE_AAL              | \
-                                        IXP4XX_FEATURE_HSS              | \
-                                        IXP4XX_FEATURE_UTOPIA           | \
-                                        IXP4XX_FEATURE_NPEB_ETH0        | \
-                                        IXP4XX_FEATURE_NPEC_ETH         | \
-                                        IXP4XX_FEATURE_RESET_NPEA       | \
-                                        IXP4XX_FEATURE_RESET_NPEB       | \
-                                        IXP4XX_FEATURE_RESET_NPEC       | \
-                                        IXP4XX_FEATURE_PCI              | \
-                                        IXP4XX_FEATURE_UTOPIA_PHY_LIMIT | \
-                                        IXP4XX_FEATURE_XSCALE_MAX_FREQ)
-
-
-/* IXP43x/46x CPUs */
-#define IXP4XX_FEATURE_ECC_TIMESYNC    (1 << 15)
-#define IXP4XX_FEATURE_USB_HOST                (1 << 18)
-#define IXP4XX_FEATURE_NPEA_ETH                (1 << 19)
-#define IXP43X_FEATURE_MASK            (IXP42X_FEATURE_MASK             | \
-                                        IXP4XX_FEATURE_ECC_TIMESYNC     | \
-                                        IXP4XX_FEATURE_USB_HOST         | \
-                                        IXP4XX_FEATURE_NPEA_ETH)
-
-/* IXP46x CPU (including IXP455) only */
-#define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20)
-#define IXP4XX_FEATURE_RSA             (1 << 21)
-#define IXP46X_FEATURE_MASK            (IXP43X_FEATURE_MASK             | \
-                                        IXP4XX_FEATURE_NPEB_ETH_1_TO_3  | \
-                                        IXP4XX_FEATURE_RSA)
-
 #endif
index 0616e36..590689a 100644 (file)
 #include <linux/soc/ixp4xx/npe.h>
 #include <linux/soc/ixp4xx/qmgr.h>
 
+/* Intermittent includes, delete this after v5.14-rc1 */
+#include <linux/soc/ixp4xx/cpu.h>
+#include <mach/ixp4xx-regs.h>
+
 #define MAX_KEYLEN 32
 
 /* hash: cfgword + 2 * digestlen; crypt: keylen + cfgword */
index 3624d92..468cb5c 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/soc/ixp4xx/npe.h>
 #include <linux/soc/ixp4xx/qmgr.h>
 #include <mach/hardware.h>
+#include <linux/soc/ixp4xx/cpu.h>
 
 #include "ixp46x_ts.h"
 
index 9ecc395..99d4d94 100644 (file)
@@ -12,9 +12,8 @@
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
-#include <linux/module.h>
-
 #include <linux/ptp_clock_kernel.h>
+#include <linux/soc/ixp4xx/cpu.h>
 
 #include "ixp46x_ts.h"
 
index ecea09f..7ebe627 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/slab.h>
 #include <linux/soc/ixp4xx/npe.h>
 #include <linux/soc/ixp4xx/qmgr.h>
+#include <linux/soc/ixp4xx/cpu.h>
 
 #define DEBUG_DESC             0
 #define DEBUG_RX               0
index 0a16ac4..925b491 100644 (file)
@@ -21,7 +21,7 @@
 #include <linux/platform_device.h>
 #include <linux/soc/ixp4xx/npe.h>
 #include <mach/hardware.h>
-#include <mach/cpu.h>
+#include <linux/soc/ixp4xx/cpu.h>
 
 #define DEBUG_MSG                      0
 #define DEBUG_FW                       0
index 1b1631a..7149510 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/platform_device.h>
 #include <linux/soc/ixp4xx/qmgr.h>
 #include <mach/hardware.h>
-#include <mach/cpu.h>
+#include <linux/soc/ixp4xx/cpu.h>
 
 static struct qmgr_regs __iomem *qmgr_regs;
 static int qmgr_irq_1;
diff --git a/include/linux/soc/ixp4xx/cpu.h b/include/linux/soc/ixp4xx/cpu.h
new file mode 100644 (file)
index 0000000..88bd8de
--- /dev/null
@@ -0,0 +1,106 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * IXP4XX cpu type detection
+ *
+ * Copyright (C) 2007 MontaVista Software, Inc.
+ */
+
+#ifndef __SOC_IXP4XX_CPU_H__
+#define __SOC_IXP4XX_CPU_H__
+
+#include <linux/io.h>
+#ifdef CONFIG_ARM
+#include <asm/cputype.h>
+#endif
+
+/* Processor id value in CP15 Register 0 */
+#define IXP42X_PROCESSOR_ID_VALUE      0x690541c0 /* including unused 0x690541Ex */
+#define IXP42X_PROCESSOR_ID_MASK       0xffffffc0
+
+#define IXP43X_PROCESSOR_ID_VALUE      0x69054040
+#define IXP43X_PROCESSOR_ID_MASK       0xfffffff0
+
+#define IXP46X_PROCESSOR_ID_VALUE      0x69054200 /* including IXP455 */
+#define IXP46X_PROCESSOR_ID_MASK       0xfffffff0
+
+/* "fuse" bits of IXP_EXP_CFG2 */
+/* All IXP4xx CPUs */
+#define IXP4XX_FEATURE_RCOMP           (1 << 0)
+#define IXP4XX_FEATURE_USB_DEVICE      (1 << 1)
+#define IXP4XX_FEATURE_HASH            (1 << 2)
+#define IXP4XX_FEATURE_AES             (1 << 3)
+#define IXP4XX_FEATURE_DES             (1 << 4)
+#define IXP4XX_FEATURE_HDLC            (1 << 5)
+#define IXP4XX_FEATURE_AAL             (1 << 6)
+#define IXP4XX_FEATURE_HSS             (1 << 7)
+#define IXP4XX_FEATURE_UTOPIA          (1 << 8)
+#define IXP4XX_FEATURE_NPEB_ETH0       (1 << 9)
+#define IXP4XX_FEATURE_NPEC_ETH                (1 << 10)
+#define IXP4XX_FEATURE_RESET_NPEA      (1 << 11)
+#define IXP4XX_FEATURE_RESET_NPEB      (1 << 12)
+#define IXP4XX_FEATURE_RESET_NPEC      (1 << 13)
+#define IXP4XX_FEATURE_PCI             (1 << 14)
+#define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT        (3 << 16)
+#define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22)
+#define IXP42X_FEATURE_MASK            (IXP4XX_FEATURE_RCOMP            | \
+                                        IXP4XX_FEATURE_USB_DEVICE       | \
+                                        IXP4XX_FEATURE_HASH             | \
+                                        IXP4XX_FEATURE_AES              | \
+                                        IXP4XX_FEATURE_DES              | \
+                                        IXP4XX_FEATURE_HDLC             | \
+                                        IXP4XX_FEATURE_AAL              | \
+                                        IXP4XX_FEATURE_HSS              | \
+                                        IXP4XX_FEATURE_UTOPIA           | \
+                                        IXP4XX_FEATURE_NPEB_ETH0        | \
+                                        IXP4XX_FEATURE_NPEC_ETH         | \
+                                        IXP4XX_FEATURE_RESET_NPEA       | \
+                                        IXP4XX_FEATURE_RESET_NPEB       | \
+                                        IXP4XX_FEATURE_RESET_NPEC       | \
+                                        IXP4XX_FEATURE_PCI              | \
+                                        IXP4XX_FEATURE_UTOPIA_PHY_LIMIT | \
+                                        IXP4XX_FEATURE_XSCALE_MAX_FREQ)
+
+
+/* IXP43x/46x CPUs */
+#define IXP4XX_FEATURE_ECC_TIMESYNC    (1 << 15)
+#define IXP4XX_FEATURE_USB_HOST                (1 << 18)
+#define IXP4XX_FEATURE_NPEA_ETH                (1 << 19)
+#define IXP43X_FEATURE_MASK            (IXP42X_FEATURE_MASK             | \
+                                        IXP4XX_FEATURE_ECC_TIMESYNC     | \
+                                        IXP4XX_FEATURE_USB_HOST         | \
+                                        IXP4XX_FEATURE_NPEA_ETH)
+
+/* IXP46x CPU (including IXP455) only */
+#define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20)
+#define IXP4XX_FEATURE_RSA             (1 << 21)
+#define IXP46X_FEATURE_MASK            (IXP43X_FEATURE_MASK             | \
+                                        IXP4XX_FEATURE_NPEB_ETH_1_TO_3  | \
+                                        IXP4XX_FEATURE_RSA)
+
+#ifdef CONFIG_ARCH_IXP4XX
+#define cpu_is_ixp42x_rev_a0() ((read_cpuid_id() & (IXP42X_PROCESSOR_ID_MASK | 0xF)) == \
+                               IXP42X_PROCESSOR_ID_VALUE)
+#define cpu_is_ixp42x()        ((read_cpuid_id() & IXP42X_PROCESSOR_ID_MASK) == \
+                        IXP42X_PROCESSOR_ID_VALUE)
+#define cpu_is_ixp43x()        ((read_cpuid_id() & IXP43X_PROCESSOR_ID_MASK) == \
+                        IXP43X_PROCESSOR_ID_VALUE)
+#define cpu_is_ixp46x()        ((read_cpuid_id() & IXP46X_PROCESSOR_ID_MASK) == \
+                        IXP46X_PROCESSOR_ID_VALUE)
+
+u32 ixp4xx_read_feature_bits(void);
+void ixp4xx_write_feature_bits(u32 value);
+#else
+#define cpu_is_ixp42x_rev_a0()         0
+#define cpu_is_ixp42x()                        0
+#define cpu_is_ixp43x()                        0
+#define cpu_is_ixp46x()                        0
+static inline u32 ixp4xx_read_feature_bits(void)
+{
+       return 0;
+}
+static inline void ixp4xx_write_feature_bits(u32 value)
+{
+}
+#endif
+
+#endif  /* _ASM_ARCH_CPU_H */