Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

soc: ixp4xx: move cpu detection to linux/soc/ixp4xx/cpu.h

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>

authored by

Arnd Bergmann and committed by
Linus Walleij
09aa9aab f7821b49

+138 -113
+22
arch/arm/mach-ixp4xx/common.c
··· 27 27 #include <linux/cpu.h> 28 28 #include <linux/pci.h> 29 29 #include <linux/sched_clock.h> 30 + #include <linux/soc/ixp4xx/cpu.h> 30 31 #include <linux/irqchip/irq-ixp4xx.h> 31 32 #include <linux/platform_data/timer-ixp4xx.h> 32 33 #include <linux/dma-map-ops.h> ··· 43 42 #include <asm/mach/time.h> 44 43 45 44 #include "irqs.h" 45 + 46 + u32 ixp4xx_read_feature_bits(void) 47 + { 48 + u32 val = ~__raw_readl(IXP4XX_EXP_CFG2); 49 + 50 + if (cpu_is_ixp42x_rev_a0()) 51 + return IXP42X_FEATURE_MASK & ~(IXP4XX_FEATURE_RCOMP | 52 + IXP4XX_FEATURE_AES); 53 + if (cpu_is_ixp42x()) 54 + return val & IXP42X_FEATURE_MASK; 55 + if (cpu_is_ixp43x()) 56 + return val & IXP43X_FEATURE_MASK; 57 + return val & IXP46X_FEATURE_MASK; 58 + } 59 + EXPORT_SYMBOL(ixp4xx_read_feature_bits); 60 + 61 + void ixp4xx_write_feature_bits(u32 value) 62 + { 63 + __raw_writel(~value, IXP4XX_EXP_CFG2); 64 + } 65 + EXPORT_SYMBOL(ixp4xx_write_feature_bits); 46 66 47 67 #define IXP4XX_TIMER_FREQ 66666000 48 68
-54
arch/arm/mach-ixp4xx/include/mach/cpu.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0-only */ 2 - /* 3 - * arch/arm/mach-ixp4xx/include/mach/cpu.h 4 - * 5 - * IXP4XX cpu type detection 6 - * 7 - * Copyright (C) 2007 MontaVista Software, Inc. 8 - */ 9 - 10 - #ifndef __ASM_ARCH_CPU_H__ 11 - #define __ASM_ARCH_CPU_H__ 12 - 13 - #include <linux/io.h> 14 - #include <asm/cputype.h> 15 - 16 - /* Processor id value in CP15 Register 0 */ 17 - #define IXP42X_PROCESSOR_ID_VALUE 0x690541c0 /* including unused 0x690541Ex */ 18 - #define IXP42X_PROCESSOR_ID_MASK 0xffffffc0 19 - 20 - #define IXP43X_PROCESSOR_ID_VALUE 0x69054040 21 - #define IXP43X_PROCESSOR_ID_MASK 0xfffffff0 22 - 23 - #define IXP46X_PROCESSOR_ID_VALUE 0x69054200 /* including IXP455 */ 24 - #define IXP46X_PROCESSOR_ID_MASK 0xfffffff0 25 - 26 - #define cpu_is_ixp42x_rev_a0() ((read_cpuid_id() & (IXP42X_PROCESSOR_ID_MASK | 0xF)) == \ 27 - IXP42X_PROCESSOR_ID_VALUE) 28 - #define cpu_is_ixp42x() ((read_cpuid_id() & IXP42X_PROCESSOR_ID_MASK) == \ 29 - IXP42X_PROCESSOR_ID_VALUE) 30 - #define cpu_is_ixp43x() ((read_cpuid_id() & IXP43X_PROCESSOR_ID_MASK) == \ 31 - IXP43X_PROCESSOR_ID_VALUE) 32 - #define cpu_is_ixp46x() ((read_cpuid_id() & IXP46X_PROCESSOR_ID_MASK) == \ 33 - IXP46X_PROCESSOR_ID_VALUE) 34 - 35 - static inline u32 ixp4xx_read_feature_bits(void) 36 - { 37 - u32 val = ~__raw_readl(IXP4XX_EXP_CFG2); 38 - 39 - if (cpu_is_ixp42x_rev_a0()) 40 - return IXP42X_FEATURE_MASK & ~(IXP4XX_FEATURE_RCOMP | 41 - IXP4XX_FEATURE_AES); 42 - if (cpu_is_ixp42x()) 43 - return val & IXP42X_FEATURE_MASK; 44 - if (cpu_is_ixp43x()) 45 - return val & IXP43X_FEATURE_MASK; 46 - return val & IXP46X_FEATURE_MASK; 47 - } 48 - 49 - static inline void ixp4xx_write_feature_bits(u32 value) 50 - { 51 - __raw_writel(~value, IXP4XX_EXP_CFG2); 52 - } 53 - 54 - #endif /* _ASM_ARCH_CPU_H */
+1 -1
arch/arm/mach-ixp4xx/include/mach/hardware.h
··· 23 23 #include "ixp4xx-regs.h" 24 24 25 25 #ifndef __ASSEMBLER__ 26 - #include <mach/cpu.h> 26 + #include <linux/soc/ixp4xx/cpu.h> 27 27 #endif 28 28 29 29 /* Platform helper functions and definitions */
-54
arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h
··· 300 300 301 301 #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ 302 302 303 - /* "fuse" bits of IXP_EXP_CFG2 */ 304 - /* All IXP4xx CPUs */ 305 - #define IXP4XX_FEATURE_RCOMP (1 << 0) 306 - #define IXP4XX_FEATURE_USB_DEVICE (1 << 1) 307 - #define IXP4XX_FEATURE_HASH (1 << 2) 308 - #define IXP4XX_FEATURE_AES (1 << 3) 309 - #define IXP4XX_FEATURE_DES (1 << 4) 310 - #define IXP4XX_FEATURE_HDLC (1 << 5) 311 - #define IXP4XX_FEATURE_AAL (1 << 6) 312 - #define IXP4XX_FEATURE_HSS (1 << 7) 313 - #define IXP4XX_FEATURE_UTOPIA (1 << 8) 314 - #define IXP4XX_FEATURE_NPEB_ETH0 (1 << 9) 315 - #define IXP4XX_FEATURE_NPEC_ETH (1 << 10) 316 - #define IXP4XX_FEATURE_RESET_NPEA (1 << 11) 317 - #define IXP4XX_FEATURE_RESET_NPEB (1 << 12) 318 - #define IXP4XX_FEATURE_RESET_NPEC (1 << 13) 319 - #define IXP4XX_FEATURE_PCI (1 << 14) 320 - #define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT (3 << 16) 321 - #define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22) 322 - #define IXP42X_FEATURE_MASK (IXP4XX_FEATURE_RCOMP | \ 323 - IXP4XX_FEATURE_USB_DEVICE | \ 324 - IXP4XX_FEATURE_HASH | \ 325 - IXP4XX_FEATURE_AES | \ 326 - IXP4XX_FEATURE_DES | \ 327 - IXP4XX_FEATURE_HDLC | \ 328 - IXP4XX_FEATURE_AAL | \ 329 - IXP4XX_FEATURE_HSS | \ 330 - IXP4XX_FEATURE_UTOPIA | \ 331 - IXP4XX_FEATURE_NPEB_ETH0 | \ 332 - IXP4XX_FEATURE_NPEC_ETH | \ 333 - IXP4XX_FEATURE_RESET_NPEA | \ 334 - IXP4XX_FEATURE_RESET_NPEB | \ 335 - IXP4XX_FEATURE_RESET_NPEC | \ 336 - IXP4XX_FEATURE_PCI | \ 337 - IXP4XX_FEATURE_UTOPIA_PHY_LIMIT | \ 338 - IXP4XX_FEATURE_XSCALE_MAX_FREQ) 339 - 340 - 341 - /* IXP43x/46x CPUs */ 342 - #define IXP4XX_FEATURE_ECC_TIMESYNC (1 << 15) 343 - #define IXP4XX_FEATURE_USB_HOST (1 << 18) 344 - #define IXP4XX_FEATURE_NPEA_ETH (1 << 19) 345 - #define IXP43X_FEATURE_MASK (IXP42X_FEATURE_MASK | \ 346 - IXP4XX_FEATURE_ECC_TIMESYNC | \ 347 - IXP4XX_FEATURE_USB_HOST | \ 348 - IXP4XX_FEATURE_NPEA_ETH) 349 - 350 - /* IXP46x CPU (including IXP455) only */ 351 - #define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20) 352 - #define IXP4XX_FEATURE_RSA (1 << 21) 353 - #define IXP46X_FEATURE_MASK (IXP43X_FEATURE_MASK | \ 354 - IXP4XX_FEATURE_NPEB_ETH_1_TO_3 | \ 355 - IXP4XX_FEATURE_RSA) 356 - 357 303 #endif
+4
drivers/crypto/ixp4xx_crypto.c
··· 30 30 #include <linux/soc/ixp4xx/npe.h> 31 31 #include <linux/soc/ixp4xx/qmgr.h> 32 32 33 + /* Intermittent includes, delete this after v5.14-rc1 */ 34 + #include <linux/soc/ixp4xx/cpu.h> 35 + #include <mach/ixp4xx-regs.h> 36 + 33 37 #define MAX_KEYLEN 32 34 38 35 39 /* hash: cfgword + 2 * digestlen; crypt: keylen + cfgword */
+1
drivers/net/ethernet/xscale/ixp4xx_eth.c
··· 38 38 #include <linux/soc/ixp4xx/npe.h> 39 39 #include <linux/soc/ixp4xx/qmgr.h> 40 40 #include <mach/hardware.h> 41 + #include <linux/soc/ixp4xx/cpu.h> 41 42 42 43 #include "ixp46x_ts.h" 43 44
+1 -2
drivers/net/ethernet/xscale/ptp_ixp46x.c
··· 12 12 #include <linux/io.h> 13 13 #include <linux/irq.h> 14 14 #include <linux/kernel.h> 15 - #include <linux/module.h> 16 - 17 15 #include <linux/ptp_clock_kernel.h> 16 + #include <linux/soc/ixp4xx/cpu.h> 18 17 19 18 #include "ixp46x_ts.h" 20 19
+1
drivers/net/wan/ixp4xx_hss.c
··· 22 22 #include <linux/slab.h> 23 23 #include <linux/soc/ixp4xx/npe.h> 24 24 #include <linux/soc/ixp4xx/qmgr.h> 25 + #include <linux/soc/ixp4xx/cpu.h> 25 26 26 27 #define DEBUG_DESC 0 27 28 #define DEBUG_RX 0
+1 -1
drivers/soc/ixp4xx/ixp4xx-npe.c
··· 21 21 #include <linux/platform_device.h> 22 22 #include <linux/soc/ixp4xx/npe.h> 23 23 #include <mach/hardware.h> 24 - #include <mach/cpu.h> 24 + #include <linux/soc/ixp4xx/cpu.h> 25 25 26 26 #define DEBUG_MSG 0 27 27 #define DEBUG_FW 0
+1 -1
drivers/soc/ixp4xx/ixp4xx-qmgr.c
··· 13 13 #include <linux/platform_device.h> 14 14 #include <linux/soc/ixp4xx/qmgr.h> 15 15 #include <mach/hardware.h> 16 - #include <mach/cpu.h> 16 + #include <linux/soc/ixp4xx/cpu.h> 17 17 18 18 static struct qmgr_regs __iomem *qmgr_regs; 19 19 static int qmgr_irq_1;
+106
include/linux/soc/ixp4xx/cpu.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0-only */ 2 + /* 3 + * IXP4XX cpu type detection 4 + * 5 + * Copyright (C) 2007 MontaVista Software, Inc. 6 + */ 7 + 8 + #ifndef __SOC_IXP4XX_CPU_H__ 9 + #define __SOC_IXP4XX_CPU_H__ 10 + 11 + #include <linux/io.h> 12 + #ifdef CONFIG_ARM 13 + #include <asm/cputype.h> 14 + #endif 15 + 16 + /* Processor id value in CP15 Register 0 */ 17 + #define IXP42X_PROCESSOR_ID_VALUE 0x690541c0 /* including unused 0x690541Ex */ 18 + #define IXP42X_PROCESSOR_ID_MASK 0xffffffc0 19 + 20 + #define IXP43X_PROCESSOR_ID_VALUE 0x69054040 21 + #define IXP43X_PROCESSOR_ID_MASK 0xfffffff0 22 + 23 + #define IXP46X_PROCESSOR_ID_VALUE 0x69054200 /* including IXP455 */ 24 + #define IXP46X_PROCESSOR_ID_MASK 0xfffffff0 25 + 26 + /* "fuse" bits of IXP_EXP_CFG2 */ 27 + /* All IXP4xx CPUs */ 28 + #define IXP4XX_FEATURE_RCOMP (1 << 0) 29 + #define IXP4XX_FEATURE_USB_DEVICE (1 << 1) 30 + #define IXP4XX_FEATURE_HASH (1 << 2) 31 + #define IXP4XX_FEATURE_AES (1 << 3) 32 + #define IXP4XX_FEATURE_DES (1 << 4) 33 + #define IXP4XX_FEATURE_HDLC (1 << 5) 34 + #define IXP4XX_FEATURE_AAL (1 << 6) 35 + #define IXP4XX_FEATURE_HSS (1 << 7) 36 + #define IXP4XX_FEATURE_UTOPIA (1 << 8) 37 + #define IXP4XX_FEATURE_NPEB_ETH0 (1 << 9) 38 + #define IXP4XX_FEATURE_NPEC_ETH (1 << 10) 39 + #define IXP4XX_FEATURE_RESET_NPEA (1 << 11) 40 + #define IXP4XX_FEATURE_RESET_NPEB (1 << 12) 41 + #define IXP4XX_FEATURE_RESET_NPEC (1 << 13) 42 + #define IXP4XX_FEATURE_PCI (1 << 14) 43 + #define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT (3 << 16) 44 + #define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22) 45 + #define IXP42X_FEATURE_MASK (IXP4XX_FEATURE_RCOMP | \ 46 + IXP4XX_FEATURE_USB_DEVICE | \ 47 + IXP4XX_FEATURE_HASH | \ 48 + IXP4XX_FEATURE_AES | \ 49 + IXP4XX_FEATURE_DES | \ 50 + IXP4XX_FEATURE_HDLC | \ 51 + IXP4XX_FEATURE_AAL | \ 52 + IXP4XX_FEATURE_HSS | \ 53 + IXP4XX_FEATURE_UTOPIA | \ 54 + IXP4XX_FEATURE_NPEB_ETH0 | \ 55 + IXP4XX_FEATURE_NPEC_ETH | \ 56 + IXP4XX_FEATURE_RESET_NPEA | \ 57 + IXP4XX_FEATURE_RESET_NPEB | \ 58 + IXP4XX_FEATURE_RESET_NPEC | \ 59 + IXP4XX_FEATURE_PCI | \ 60 + IXP4XX_FEATURE_UTOPIA_PHY_LIMIT | \ 61 + IXP4XX_FEATURE_XSCALE_MAX_FREQ) 62 + 63 + 64 + /* IXP43x/46x CPUs */ 65 + #define IXP4XX_FEATURE_ECC_TIMESYNC (1 << 15) 66 + #define IXP4XX_FEATURE_USB_HOST (1 << 18) 67 + #define IXP4XX_FEATURE_NPEA_ETH (1 << 19) 68 + #define IXP43X_FEATURE_MASK (IXP42X_FEATURE_MASK | \ 69 + IXP4XX_FEATURE_ECC_TIMESYNC | \ 70 + IXP4XX_FEATURE_USB_HOST | \ 71 + IXP4XX_FEATURE_NPEA_ETH) 72 + 73 + /* IXP46x CPU (including IXP455) only */ 74 + #define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20) 75 + #define IXP4XX_FEATURE_RSA (1 << 21) 76 + #define IXP46X_FEATURE_MASK (IXP43X_FEATURE_MASK | \ 77 + IXP4XX_FEATURE_NPEB_ETH_1_TO_3 | \ 78 + IXP4XX_FEATURE_RSA) 79 + 80 + #ifdef CONFIG_ARCH_IXP4XX 81 + #define cpu_is_ixp42x_rev_a0() ((read_cpuid_id() & (IXP42X_PROCESSOR_ID_MASK | 0xF)) == \ 82 + IXP42X_PROCESSOR_ID_VALUE) 83 + #define cpu_is_ixp42x() ((read_cpuid_id() & IXP42X_PROCESSOR_ID_MASK) == \ 84 + IXP42X_PROCESSOR_ID_VALUE) 85 + #define cpu_is_ixp43x() ((read_cpuid_id() & IXP43X_PROCESSOR_ID_MASK) == \ 86 + IXP43X_PROCESSOR_ID_VALUE) 87 + #define cpu_is_ixp46x() ((read_cpuid_id() & IXP46X_PROCESSOR_ID_MASK) == \ 88 + IXP46X_PROCESSOR_ID_VALUE) 89 + 90 + u32 ixp4xx_read_feature_bits(void); 91 + void ixp4xx_write_feature_bits(u32 value); 92 + #else 93 + #define cpu_is_ixp42x_rev_a0() 0 94 + #define cpu_is_ixp42x() 0 95 + #define cpu_is_ixp43x() 0 96 + #define cpu_is_ixp46x() 0 97 + static inline u32 ixp4xx_read_feature_bits(void) 98 + { 99 + return 0; 100 + } 101 + static inline void ixp4xx_write_feature_bits(u32 value) 102 + { 103 + } 104 + #endif 105 + 106 + #endif /* _ASM_ARCH_CPU_H */