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>
This commit is contained in:
parent
f7821b4934
commit
09aa9aabdc
@ -27,6 +27,7 @@
|
|||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/sched_clock.h>
|
#include <linux/sched_clock.h>
|
||||||
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
#include <linux/irqchip/irq-ixp4xx.h>
|
#include <linux/irqchip/irq-ixp4xx.h>
|
||||||
#include <linux/platform_data/timer-ixp4xx.h>
|
#include <linux/platform_data/timer-ixp4xx.h>
|
||||||
#include <linux/dma-map-ops.h>
|
#include <linux/dma-map-ops.h>
|
||||||
@ -43,6 +44,27 @@
|
|||||||
|
|
||||||
#include "irqs.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
|
#define IXP4XX_TIMER_FREQ 66666000
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
@ -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 */
|
|
@ -23,7 +23,7 @@
|
|||||||
#include "ixp4xx-regs.h"
|
#include "ixp4xx-regs.h"
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
#include <mach/cpu.h>
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Platform helper functions and definitions */
|
/* Platform helper functions and definitions */
|
||||||
|
@ -300,58 +300,4 @@
|
|||||||
|
|
||||||
#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */
|
#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
|
#endif
|
||||||
|
@ -30,6 +30,10 @@
|
|||||||
#include <linux/soc/ixp4xx/npe.h>
|
#include <linux/soc/ixp4xx/npe.h>
|
||||||
#include <linux/soc/ixp4xx/qmgr.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
|
#define MAX_KEYLEN 32
|
||||||
|
|
||||||
/* hash: cfgword + 2 * digestlen; crypt: keylen + cfgword */
|
/* hash: cfgword + 2 * digestlen; crypt: keylen + cfgword */
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <linux/soc/ixp4xx/npe.h>
|
#include <linux/soc/ixp4xx/npe.h>
|
||||||
#include <linux/soc/ixp4xx/qmgr.h>
|
#include <linux/soc/ixp4xx/qmgr.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
|
|
||||||
#include "ixp46x_ts.h"
|
#include "ixp46x_ts.h"
|
||||||
|
|
||||||
|
@ -12,9 +12,8 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
|
||||||
|
|
||||||
#include <linux/ptp_clock_kernel.h>
|
#include <linux/ptp_clock_kernel.h>
|
||||||
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
|
|
||||||
#include "ixp46x_ts.h"
|
#include "ixp46x_ts.h"
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/soc/ixp4xx/npe.h>
|
#include <linux/soc/ixp4xx/npe.h>
|
||||||
#include <linux/soc/ixp4xx/qmgr.h>
|
#include <linux/soc/ixp4xx/qmgr.h>
|
||||||
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
|
|
||||||
#define DEBUG_DESC 0
|
#define DEBUG_DESC 0
|
||||||
#define DEBUG_RX 0
|
#define DEBUG_RX 0
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/soc/ixp4xx/npe.h>
|
#include <linux/soc/ixp4xx/npe.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/cpu.h>
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
|
|
||||||
#define DEBUG_MSG 0
|
#define DEBUG_MSG 0
|
||||||
#define DEBUG_FW 0
|
#define DEBUG_FW 0
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/soc/ixp4xx/qmgr.h>
|
#include <linux/soc/ixp4xx/qmgr.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/cpu.h>
|
#include <linux/soc/ixp4xx/cpu.h>
|
||||||
|
|
||||||
static struct qmgr_regs __iomem *qmgr_regs;
|
static struct qmgr_regs __iomem *qmgr_regs;
|
||||||
static int qmgr_irq_1;
|
static int qmgr_irq_1;
|
||||||
|
106
include/linux/soc/ixp4xx/cpu.h
Normal file
106
include/linux/soc/ixp4xx/cpu.h
Normal file
@ -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 */
|
Loading…
Reference in New Issue
Block a user