Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
b0063446b8
@ -17,7 +17,7 @@ menu "Target Images"
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_lantiq
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx
|
||||
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips
|
||||
default TARGET_INITRAMFS_COMPRESSION_ZSTD if TARGET_ipq807x
|
||||
default TARGET_INITRAMFS_COMPRESSION_ZSTD if TARGET_qualcommax
|
||||
default TARGET_INITRAMFS_COMPRESSION_XZ if USES_SEPARATE_INITRAMFS
|
||||
default TARGET_INITRAMFS_COMPRESSION_NONE
|
||||
depends on TARGET_ROOTFS_INITRAMFS
|
||||
|
@ -363,7 +363,7 @@ config KERNEL_DEBUG_INFO
|
||||
config KERNEL_DEBUG_INFO_BTF
|
||||
|
||||
bool "Enable additional BTF type information"
|
||||
default y if TARGET_armsr || TARGET_bcm27xx || TARGET_ipq807x || TARGET_mediatek_filogic || TARGET_mvebu_cortexa53 || TARGET_mvebu_cortexa72 || TARGET_rockchip || TARGET_sifiveu || TARGET_sunxi || TARGET_x86
|
||||
default y if TARGET_armsr || TARGET_bcm27xx || TARGET_mediatek_filogic || TARGET_mvebu_cortexa53 || TARGET_mvebu_cortexa72 || TARGET_qualcommax || TARGET_rockchip || TARGET_sifiveu || TARGET_sunxi || TARGET_x86
|
||||
depends on !HOST_OS_MACOS
|
||||
depends on KERNEL_DEBUG_INFO && !KERNEL_DEBUG_INFO_REDUCED
|
||||
select DWARVES
|
||||
@ -387,7 +387,7 @@ config KERNEL_MODULE_ALLOW_BTF_MISMATCH
|
||||
|
||||
config KERNEL_DEBUG_INFO_REDUCED
|
||||
bool "Reduce debugging information"
|
||||
default y if !(TARGET_armsr || TARGET_bcm27xx || TARGET_ipq807x || TARGET_mediatek_filogic || TARGET_mvebu_cortexa53 || TARGET_mvebu_cortexa72 || TARGET_rockchip || TARGET_sifiveu || TARGET_sunxi || TARGET_x86)
|
||||
default y if !(TARGET_armsr || TARGET_bcm27xx || TARGET_mediatek_filogic || TARGET_mvebu_cortexa53 || TARGET_mvebu_cortexa72 || TARGET_qualcommax || TARGET_rockchip || TARGET_sifiveu || TARGET_sunxi || TARGET_x86)
|
||||
depends on KERNEL_DEBUG_INFO
|
||||
help
|
||||
If you say Y here gcc is instructed to generate less debugging
|
||||
|
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.15 = .116
|
||||
LINUX_KERNEL_HASH-5.15.116 = f617c9d1bb5326cc93495938f43eb8cb9aea9d2f451e5a99bce2893f296e179a
|
||||
LINUX_VERSION-5.15 = .117
|
||||
LINUX_KERNEL_HASH-5.15.117 = a9a8331f3c0e004b40a41f30d688b53bf85405597ac41c2c89be7f4fbcf7239f
|
||||
|
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.1 = .33
|
||||
LINUX_KERNEL_HASH-6.1.33 = b87d6ba8ea7328e8007a7ea9171d1aa0d540d95eacfcab09578e0a3b623dd2cd
|
||||
LINUX_VERSION-6.1 = .34
|
||||
LINUX_KERNEL_HASH-6.1.34 = b26f7cbcbf8031efc49f11f236f372fc34a4fd5fc6ad3151b893d1aa038ed603
|
@ -49,7 +49,7 @@ define Package/ipq-wifi-default
|
||||
SUBMENU:=ath10k Board-Specific Overrides
|
||||
SECTION:=firmware
|
||||
CATEGORY:=Firmware
|
||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x)
|
||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax)
|
||||
TITLE:=Custom Board
|
||||
endef
|
||||
|
||||
|
@ -1528,7 +1528,7 @@ $(eval $(call KernelPackage,qrtr-tun))
|
||||
define KernelPackage/qrtr-smd
|
||||
SUBMENU:=$(NETWORK_SUPPORT_MENU)
|
||||
TITLE:=SMD IPC Router channels
|
||||
DEPENDS:=+kmod-qrtr @TARGET_ipq807x
|
||||
DEPENDS:=+kmod-qrtr @TARGET_qualcommax
|
||||
KCONFIG:=CONFIG_QRTR_SMD
|
||||
FILES:= $(LINUX_DIR)/net/qrtr/qrtr-smd.ko
|
||||
AUTOLOAD:=$(call AutoProbe,qrtr-smd)
|
||||
|
@ -483,7 +483,7 @@ $(eval $(call KernelPackage,usb-dwc3))
|
||||
|
||||
define KernelPackage/usb-dwc3-qcom
|
||||
TITLE:=DWC3 Qualcomm USB driver
|
||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_ipq807x) +kmod-usb-dwc3
|
||||
DEPENDS:=@(TARGET_ipq40xx||TARGET_ipq806x||TARGET_qualcommax) +kmod-usb-dwc3
|
||||
KCONFIG:= CONFIG_USB_DWC3_QCOM
|
||||
FILES:= $(LINUX_DIR)/drivers/usb/dwc3/dwc3-qcom.ko
|
||||
AUTOLOAD:=$(call AutoLoad,53,dwc3-qcom,1)
|
||||
|
@ -318,7 +318,7 @@ define KernelPackage/ath11k/config
|
||||
config ATH11K_THERMAL
|
||||
bool "Enable thermal sensors and throttling support"
|
||||
depends on PACKAGE_kmod-ath11k
|
||||
default y if TARGET_ipq807x
|
||||
default y if TARGET_qualcommax
|
||||
|
||||
endef
|
||||
|
||||
@ -326,7 +326,7 @@ define KernelPackage/ath11k-ahb
|
||||
$(call KernelPackage/mac80211/Default)
|
||||
TITLE:=Qualcomm 802.11ax AHB wireless chipset support
|
||||
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath11k
|
||||
DEPENDS+= @TARGET_ipq807x +kmod-ath11k +kmod-qrtr-smd
|
||||
DEPENDS+= @TARGET_qualcommax +kmod-ath11k +kmod-qrtr-smd
|
||||
FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath11k/ath11k_ahb.ko
|
||||
AUTOLOAD:=$(call AutoProbe,ath11k_ahb)
|
||||
endef
|
||||
|
@ -19,7 +19,7 @@ define KernelPackage/qca-nss-dp
|
||||
SECTION:=kernel
|
||||
CATEGORY:=Kernel modules
|
||||
SUBMENU:=Network Devices
|
||||
DEPENDS:=@TARGET_ipq807x +kmod-qca-ssdk
|
||||
DEPENDS:=@TARGET_qualcommax +kmod-qca-ssdk
|
||||
TITLE:=Qualcom NSS dataplane ethernet driver
|
||||
FILES:=$(PKG_BUILD_DIR)/qca-nss-dp.ko
|
||||
AUTOLOAD:=$(call AutoLoad,31,qca-nss-dp,1)
|
||||
@ -39,7 +39,7 @@ EXTRA_CFLAGS+= \
|
||||
|
||||
NSS_DP_HAL_DIR:=$(PKG_BUILD_DIR)/hal
|
||||
define Build/Configure
|
||||
$(LN) $(NSS_DP_HAL_DIR)/soc_ops/$(CONFIG_TARGET_BOARD)/nss_$(CONFIG_TARGET_BOARD).h \
|
||||
$(LN) $(NSS_DP_HAL_DIR)/soc_ops/$(CONFIG_TARGET_SUBTARGET)/nss_$(CONFIG_TARGET_SUBTARGET).h \
|
||||
$(PKG_BUILD_DIR)/exports/nss_dp_arch.h
|
||||
endef
|
||||
|
||||
@ -48,7 +48,7 @@ define Build/Compile
|
||||
CROSS_COMPILE="$(TARGET_CROSS)" \
|
||||
ARCH="$(LINUX_KARCH)" \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" SoC="$(CONFIG_TARGET_BOARD)" \
|
||||
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" SoC="$(CONFIG_TARGET_SUBTARGET)" \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
$(PKG_JOBS) \
|
||||
modules
|
||||
|
@ -20,7 +20,7 @@ define KernelPackage/qca-ssdk
|
||||
CATEGORY:=Kernel modules
|
||||
SUBMENU:=Network Devices
|
||||
TITLE:=Qualcom SSDK switch driver
|
||||
DEPENDS:=@(TARGET_ipq807x)
|
||||
DEPENDS:=@(TARGET_qualcommax)
|
||||
FILES:=$(PKG_BUILD_DIR)/build/bin/qca-ssdk.ko
|
||||
AUTOLOAD:=$(call AutoLoad,30,qca-ssdk)
|
||||
endef
|
||||
@ -51,7 +51,7 @@ MAKE_FLAGS+= \
|
||||
EXTRA_CFLAGS=-fno-stack-protector -I$(STAGING_DIR)/usr/include \
|
||||
$(LNX_CONFIG_OPTS)
|
||||
|
||||
ifeq ($(CONFIG_TARGET_BOARD), "ipq807x")
|
||||
ifeq ($(CONFIG_TARGET_SUBTARGET), "ipq807x")
|
||||
MAKE_FLAGS+= CHIP_TYPE=HPPE PTP_FEATURE=disable SWCONFIG_FEATURE=disable
|
||||
endif
|
||||
|
||||
|
@ -311,7 +311,7 @@ SVN-Revision: 35130
|
||||
case IPV6_2292HOPOPTS:
|
||||
--- a/net/ipv6/exthdrs.c
|
||||
+++ b/net/ipv6/exthdrs.c
|
||||
@@ -1009,7 +1009,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
|
||||
@@ -1002,7 +1002,7 @@ static bool ipv6_hop_jumbo(struct sk_buf
|
||||
goto drop;
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
@@ -285,9 +285,7 @@ int bcmgenet_mii_probe(struct net_device
|
||||
@@ -290,9 +290,7 @@ int bcmgenet_mii_probe(struct net_device
|
||||
struct device_node *dn = kdev->of_node;
|
||||
phy_interface_t phy_iface = priv->phy_interface;
|
||||
struct phy_device *phydev;
|
||||
|
@ -18,7 +18,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -2660,7 +2660,7 @@ static void bcmgenet_init_tx_ring(struct
|
||||
@@ -2657,7 +2657,7 @@ static void bcmgenet_init_tx_ring(struct
|
||||
|
||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX);
|
||||
bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX);
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
/* Disable rate control for now */
|
||||
bcmgenet_tdma_ring_writel(priv, index, flow_period_val,
|
||||
TDMA_FLOW_PERIOD);
|
||||
@@ -4141,9 +4141,12 @@ static int bcmgenet_probe(struct platfor
|
||||
@@ -4138,9 +4138,12 @@ static int bcmgenet_probe(struct platfor
|
||||
netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1);
|
||||
|
||||
/* Set default coalescing parameters */
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
|
||||
@@ -291,6 +291,8 @@ int bcmgenet_mii_probe(struct net_device
|
||||
@@ -296,6 +296,8 @@ int bcmgenet_mii_probe(struct net_device
|
||||
/* Communicate the integrated PHY revision */
|
||||
if (priv->internal_phy)
|
||||
phy_flags = priv->gphy_rev;
|
||||
|
@ -37,7 +37,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||
{
|
||||
@@ -2491,6 +2494,11 @@ static void reset_umac(struct bcmgenet_p
|
||||
@@ -2488,6 +2491,11 @@ static void reset_umac(struct bcmgenet_p
|
||||
bcmgenet_rbuf_ctrl_set(priv, 0);
|
||||
udelay(10);
|
||||
|
||||
|
@ -24,7 +24,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
|
||||
@@ -3307,7 +3307,7 @@ static void bcmgenet_get_hw_addr(struct
|
||||
@@ -3304,7 +3304,7 @@ static void bcmgenet_get_hw_addr(struct
|
||||
}
|
||||
|
||||
/* Returns a reusable dma control register value */
|
||||
@ -33,7 +33,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
{
|
||||
unsigned int i;
|
||||
u32 reg;
|
||||
@@ -3332,6 +3332,14 @@ static u32 bcmgenet_dma_disable(struct b
|
||||
@@ -3329,6 +3329,14 @@ static u32 bcmgenet_dma_disable(struct b
|
||||
udelay(10);
|
||||
bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH);
|
||||
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
return dma_ctrl;
|
||||
}
|
||||
|
||||
@@ -3395,8 +3403,8 @@ static int bcmgenet_open(struct net_devi
|
||||
@@ -3392,8 +3400,8 @@ static int bcmgenet_open(struct net_devi
|
||||
|
||||
bcmgenet_set_hw_addr(priv, dev->dev_addr);
|
||||
|
||||
@ -59,7 +59,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
/* Reinitialize TDMA and RDMA and SW housekeeping */
|
||||
ret = bcmgenet_init_dma(priv);
|
||||
@@ -4270,7 +4278,7 @@ static int bcmgenet_resume(struct device
|
||||
@@ -4267,7 +4275,7 @@ static int bcmgenet_resume(struct device
|
||||
bcmgenet_hfb_create_rxnfc_filter(priv, rule);
|
||||
|
||||
/* Disable RX/TX DMA and flush TX queues */
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
static inline void bcmgenet_writel(u32 value, void __iomem *offset)
|
||||
{
|
||||
@@ -3441,6 +3444,17 @@ static int bcmgenet_open(struct net_devi
|
||||
@@ -3438,6 +3441,17 @@ static int bcmgenet_open(struct net_devi
|
||||
|
||||
bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause);
|
||||
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
|
||||
--- a/net/bluetooth/hci_sync.c
|
||||
+++ b/net/bluetooth/hci_sync.c
|
||||
@@ -4529,6 +4529,7 @@ static const struct {
|
||||
@@ -4540,6 +4540,7 @@ static const struct {
|
||||
*/
|
||||
static int hci_dev_setup_sync(struct hci_dev *hdev)
|
||||
{
|
||||
@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
int ret = 0;
|
||||
bool invalid_bdaddr;
|
||||
size_t i;
|
||||
@@ -4557,7 +4558,9 @@ static int hci_dev_setup_sync(struct hci
|
||||
@@ -4568,7 +4569,9 @@ static int hci_dev_setup_sync(struct hci
|
||||
|
||||
if (!ret) {
|
||||
if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) {
|
||||
|
@ -12,6 +12,7 @@ CPU_TYPE:=cortex-a9
|
||||
SUBTARGETS:=generic
|
||||
|
||||
KERNEL_PATCHVER:=5.15
|
||||
KERNEL_TESTING_PATCHVER:=6.1
|
||||
|
||||
define Target/Description
|
||||
Build firmware images for Broadcom based BCM47xx/53xx routers with ARM CPU, *not* MIPS.
|
||||
|
318
target/linux/bcm53xx/config-6.1
Normal file
318
target/linux/bcm53xx/config-6.1
Normal file
@ -0,0 +1,318 @@
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ARCH_32BIT_OFF_T=y
|
||||
CONFIG_ARCH_BCM=y
|
||||
CONFIG_ARCH_BCM_5301X=y
|
||||
CONFIG_ARCH_BCM_53573=y
|
||||
# CONFIG_ARCH_BCM_HR2 is not set
|
||||
CONFIG_ARCH_BCM_IPROC=y
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_KEEP_MEMBLOCK=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
|
||||
CONFIG_ARCH_MULTIPLATFORM=y
|
||||
CONFIG_ARCH_MULTI_V6_V7=y
|
||||
CONFIG_ARCH_MULTI_V7=y
|
||||
CONFIG_ARCH_NR_GPIO=0
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
|
||||
CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_APPENDED_DTB=y
|
||||
CONFIG_ARM_ARCH_TIMER=y
|
||||
CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
|
||||
# CONFIG_ARM_ATAG_DTB_COMPAT is not set
|
||||
CONFIG_ARM_CRYPTO=y
|
||||
CONFIG_ARM_ERRATA_754322=y
|
||||
CONFIG_ARM_ERRATA_764369=y
|
||||
CONFIG_ARM_ERRATA_775420=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_GLOBAL_TIMER=y
|
||||
CONFIG_ARM_GT_INITIAL_PRESCALER_VAL=1
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
CONFIG_ARM_HEAVY_MB=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_ARM_PATCH_IDIV=y
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
CONFIG_ARM_THUMB=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_ATAGS=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_B53=y
|
||||
CONFIG_B53_MDIO_DRIVER=y
|
||||
CONFIG_B53_SRAB_DRIVER=y
|
||||
CONFIG_BCM47XX_NVRAM=y
|
||||
CONFIG_BCM47XX_SPROM=y
|
||||
CONFIG_BCM47XX_WDT=y
|
||||
CONFIG_BCMA=y
|
||||
CONFIG_BCMA_BLOCKIO=y
|
||||
CONFIG_BCMA_DEBUG=y
|
||||
CONFIG_BCMA_DRIVER_GMAC_CMN=y
|
||||
CONFIG_BCMA_DRIVER_GPIO=y
|
||||
CONFIG_BCMA_DRIVER_PCI=y
|
||||
CONFIG_BCMA_FALLBACK_SPROM=y
|
||||
CONFIG_BCMA_HOST_PCI=y
|
||||
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
|
||||
CONFIG_BCMA_HOST_SOC=y
|
||||
CONFIG_BCMA_SFLASH=y
|
||||
# CONFIG_BCM_CYGNUS_PHY is not set
|
||||
CONFIG_BCM_NET_PHYLIB=y
|
||||
CONFIG_BCM_NS_THERMAL=y
|
||||
CONFIG_BCM_SR_THERMAL=y
|
||||
CONFIG_BGMAC=y
|
||||
CONFIG_BGMAC_BCMA=y
|
||||
# CONFIG_BGMAC_PLATFORM is not set
|
||||
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_BROADCOM_PHY=y
|
||||
CONFIG_CACHE_L2X0=y
|
||||
CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
# CONFIG_CLK_BCM_NS2 is not set
|
||||
CONFIG_CLK_BCM_NSP=y
|
||||
# CONFIG_CLK_BCM_SR is not set
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMMON_CLK_IPROC=y
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_32v7=y
|
||||
CONFIG_CPU_ABRT_EV7=y
|
||||
CONFIG_CPU_CACHE_V7=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
CONFIG_CPU_PABRT_V7=y
|
||||
CONFIG_CPU_RMAP=y
|
||||
CONFIG_CPU_SPECTRE=y
|
||||
CONFIG_CPU_THUMB_CAPABLE=y
|
||||
CONFIG_CPU_TLB_V7=y
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_HASH_INFO=y
|
||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||
CONFIG_CRYPTO_LZO=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_ZSTD=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BCM_5301X=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
|
||||
CONFIG_DEBUG_MISC=y
|
||||
CONFIG_DEBUG_UART_8250=y
|
||||
CONFIG_DEBUG_UART_8250_SHIFT=0
|
||||
CONFIG_DEBUG_UART_PHYS=0x18000300
|
||||
CONFIG_DEBUG_UART_VIRT=0xf1000300
|
||||
CONFIG_DEBUG_UNCOMPRESS=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DMA_OPS=y
|
||||
CONFIG_DMA_REMAP=y
|
||||
CONFIG_DTC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||
CONFIG_EDAC_SUPPORT=y
|
||||
CONFIG_EXTCON=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FIX_EARLYCON_MEM=y
|
||||
CONFIG_FWNODE_MDIO=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_ARCH_TOPOLOGY=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
|
||||
CONFIG_GENERIC_CPU_VULNERABILITIES=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_GETTIMEOFDAY=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
|
||||
CONFIG_GENERIC_PCI_IOMAP=y
|
||||
CONFIG_GENERIC_PHY=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
||||
CONFIG_GENERIC_SCHED_CLOCK=y
|
||||
CONFIG_GENERIC_SMP_IDLE_THREAD=y
|
||||
CONFIG_GENERIC_STRNCPY_FROM_USER=y
|
||||
CONFIG_GENERIC_STRNLEN_USER=y
|
||||
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||
CONFIG_GENERIC_VDSO_32=y
|
||||
CONFIG_GPIOLIB_IRQCHIP=y
|
||||
CONFIG_GPIO_74X164=y
|
||||
CONFIG_GPIO_BCM_XGS_IPROC=y
|
||||
CONFIG_GPIO_CDEV=y
|
||||
CONFIG_GPIO_GENERIC=y
|
||||
CONFIG_GRO_CELLS=y
|
||||
CONFIG_HANDLE_DOMAIN_IRQ=y
|
||||
CONFIG_HARDEN_BRANCH_PREDICTOR=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT_MAP=y
|
||||
CONFIG_HAVE_SMP=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_BCM2835=y
|
||||
CONFIG_HZ_FIXED=0
|
||||
CONFIG_HZ_PERIODIC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_KMAP_LOCAL=y
|
||||
CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y
|
||||
# CONFIG_LEDS_BCM63138 is not set
|
||||
CONFIG_LIBFDT=y
|
||||
CONFIG_LOCK_DEBUGGING_SUPPORT=y
|
||||
CONFIG_LOCK_SPIN_ON_OWNER=y
|
||||
CONFIG_LZO_COMPRESS=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_MDIO_BCM_IPROC=y
|
||||
CONFIG_MDIO_BUS=y
|
||||
CONFIG_MDIO_BUS_MUX=y
|
||||
# CONFIG_MDIO_BUS_MUX_BCM_IPROC is not set
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MDIO_DEVICE=y
|
||||
CONFIG_MDIO_DEVRES=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MODULES_USE_ELF_REL=y
|
||||
CONFIG_MTD_BCM47XXSFLASH=y
|
||||
CONFIG_MTD_BCM47XX_PARTS=y
|
||||
CONFIG_MTD_NAND_BRCMNAND=y
|
||||
CONFIG_MTD_NAND_BRCMNAND_IPROC=y
|
||||
CONFIG_MTD_NAND_CORE=y
|
||||
CONFIG_MTD_NAND_ECC=y
|
||||
CONFIG_MTD_NAND_ECC_SW_HAMMING=y
|
||||
CONFIG_MTD_OF_PARTS_LINKSYS_NS=y
|
||||
CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y
|
||||
CONFIG_MTD_PARSER_TRX=y
|
||||
CONFIG_MTD_RAW_NAND=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPLIT_SEAMA_FW=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD_UBI_BEB_LIMIT=20
|
||||
CONFIG_MTD_UBI_BLOCK=y
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NET_DEVLINK=y
|
||||
CONFIG_NET_DSA=y
|
||||
CONFIG_NET_DSA_TAG_BRCM=y
|
||||
CONFIG_NET_DSA_TAG_BRCM_COMMON=y
|
||||
CONFIG_NET_DSA_TAG_BRCM_LEGACY=y
|
||||
CONFIG_NET_DSA_TAG_BRCM_PREPEND=y
|
||||
CONFIG_NET_FLOW_LIMIT=y
|
||||
CONFIG_NET_SELFTESTS=y
|
||||
CONFIG_NET_SWITCHDEV=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_NVMEM=y
|
||||
CONFIG_NVMEM_BRCM_NVRAM=y
|
||||
CONFIG_NVMEM_SYSFS=y
|
||||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_IRQ=y
|
||||
CONFIG_OF_KOBJ=y
|
||||
CONFIG_OF_MDIO=y
|
||||
CONFIG_OLD_SIGACTION=y
|
||||
CONFIG_OLD_SIGSUSPEND3=y
|
||||
CONFIG_OUTER_CACHE=y
|
||||
CONFIG_OUTER_CACHE_SYNC=y
|
||||
CONFIG_PADATA=y
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIE_IPROC=y
|
||||
CONFIG_PCIE_IPROC_BCMA=y
|
||||
# CONFIG_PCIE_IPROC_PLATFORM is not set
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_DOMAINS_GENERIC=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
CONFIG_PGTABLE_LEVELS=2
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHYLINK=y
|
||||
# CONFIG_PHY_BCM_NS_USB2 is not set
|
||||
# CONFIG_PHY_BCM_NS_USB3 is not set
|
||||
# CONFIG_PHY_BCM_SR_PCIE is not set
|
||||
CONFIG_PHY_BCM_SR_USB=y
|
||||
# CONFIG_PHY_BRCM_SATA is not set
|
||||
# CONFIG_PHY_NS2_USB_DRD is not set
|
||||
CONFIG_PINCTRL=y
|
||||
# CONFIG_PINCTRL_IPROC_GPIO is not set
|
||||
CONFIG_PINCTRL_NS=y
|
||||
# CONFIG_PINCTRL_NS2_MUX is not set
|
||||
CONFIG_PTP_1588_CLOCK_OPTIONAL=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_BCM_IPROC=y
|
||||
CONFIG_PWM_SYSFS=y
|
||||
CONFIG_RATIONAL=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_SERIAL_8250_FSL=y
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SGL_ALLOC=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SMP_ON_UP=y
|
||||
CONFIG_SOCK_RX_QUEUE_MAPPING=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BCM_QSPI=y
|
||||
CONFIG_SPI_BITBANG=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_MEM=y
|
||||
CONFIG_SRCU=y
|
||||
CONFIG_SWPHY=y
|
||||
CONFIG_SWP_EMULATE=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
|
||||
CONFIG_THERMAL_GOV_STEP_WISE=y
|
||||
CONFIG_THERMAL_OF=y
|
||||
CONFIG_TICK_CPU_ACCOUNTING=y
|
||||
CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_TREE_SRCU=y
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNWINDER_ARM=y
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USE_OF=y
|
||||
# CONFIG_VFP is not set
|
||||
CONFIG_WATCHDOG_CORE=y
|
||||
CONFIG_XPS=y
|
||||
CONFIG_XXHASH=y
|
||||
CONFIG_XZ_DEC_ARM=y
|
||||
CONFIG_XZ_DEC_BCJ=y
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZSTD_COMPRESS=y
|
||||
CONFIG_ZSTD_DECOMPRESS=y
|
@ -0,0 +1,99 @@
|
||||
From c8ee9f119bfb4244f76c9971c341ec06b49332cd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 8 Nov 2022 12:07:08 +0100
|
||||
Subject: [PATCH] ARM: dts: BCM5301X: Correct description of TP-Link partitions
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
TP-Link routers have flash space partitioned according to the partitions
|
||||
table. It may look like fixed partitioning but those partitions can be
|
||||
actually reorganized. New can be added (or some removed), offsets and
|
||||
sizes may change.
|
||||
|
||||
Fix DT to use binding for the TP-Link SafeLoader partitioning method.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Link: https://lore.kernel.org/r/20221108110708.13693-1-zajec5@gmail.com
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
.../boot/dts/bcm47081-tplink-archer-c5-v2.dts | 25 ++++---------------
|
||||
.../boot/dts/bcm4709-tplink-archer-c9-v1.dts | 25 ++++---------------
|
||||
2 files changed, 10 insertions(+), 40 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm47081-tplink-archer-c5-v2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47081-tplink-archer-c5-v2.dts
|
||||
@@ -95,30 +95,15 @@
|
||||
status = "okay";
|
||||
|
||||
partitions {
|
||||
- compatible = "fixed-partitions";
|
||||
- #address-cells = <1>;
|
||||
- #size-cells = <1>;
|
||||
+ compatible = "tplink,safeloader-partitions";
|
||||
+ partitions-table-offset = <0xe50000>;
|
||||
|
||||
- boot@0 {
|
||||
- label = "boot";
|
||||
- reg = <0x000000 0x040000>;
|
||||
- read-only;
|
||||
- };
|
||||
-
|
||||
- os-image@100000 {
|
||||
- label = "os-image";
|
||||
- reg = <0x040000 0x200000>;
|
||||
+ partition-os-image {
|
||||
compatible = "brcm,trx";
|
||||
};
|
||||
|
||||
- rootfs@240000 {
|
||||
- label = "rootfs";
|
||||
- reg = <0x240000 0xc00000>;
|
||||
- };
|
||||
-
|
||||
- nvram@ff0000 {
|
||||
- label = "nvram";
|
||||
- reg = <0xff0000 0x010000>;
|
||||
+ partition-file-system {
|
||||
+ linux,rootfs;
|
||||
};
|
||||
};
|
||||
};
|
||||
--- a/arch/arm/boot/dts/bcm4709-tplink-archer-c9-v1.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-tplink-archer-c9-v1.dts
|
||||
@@ -104,30 +104,15 @@
|
||||
status = "okay";
|
||||
|
||||
partitions {
|
||||
- compatible = "fixed-partitions";
|
||||
- #address-cells = <1>;
|
||||
- #size-cells = <1>;
|
||||
+ compatible = "tplink,safeloader-partitions";
|
||||
+ partitions-table-offset = <0xe50000>;
|
||||
|
||||
- boot@0 {
|
||||
- label = "boot";
|
||||
- reg = <0x000000 0x040000>;
|
||||
- read-only;
|
||||
- };
|
||||
-
|
||||
- os-image@100000 {
|
||||
- label = "os-image";
|
||||
- reg = <0x040000 0x200000>;
|
||||
+ partition-os-image {
|
||||
compatible = "brcm,trx";
|
||||
};
|
||||
|
||||
- rootfs@240000 {
|
||||
- label = "rootfs";
|
||||
- reg = <0x240000 0xc00000>;
|
||||
- };
|
||||
-
|
||||
- nvram@ff0000 {
|
||||
- label = "nvram";
|
||||
- reg = <0xff0000 0x010000>;
|
||||
+ partition-file-system {
|
||||
+ linux,rootfs;
|
||||
};
|
||||
};
|
||||
};
|
@ -0,0 +1,242 @@
|
||||
From b1ba87897ceda8e49a47aa92832dd7bff8583e21 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Mon, 7 Nov 2022 14:41:04 +0100
|
||||
Subject: [PATCH] ARM: dts: bcm47094: Add devicetree for D-Link DIR-890L
|
||||
|
||||
This adds a device tree for the D-Link DIR-890L. This device
|
||||
is very similar to D-Link DIR-885L, the differences are detailed
|
||||
as a comment in the DTS file.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20221107134104.1422169-2-linus.walleij@linaro.org
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 1 +
|
||||
arch/arm/boot/dts/bcm47094-dlink-dir-890l.dts | 211 ++++++++++++++++++
|
||||
2 files changed, 212 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/bcm47094-dlink-dir-890l.dts
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -129,6 +129,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
|
||||
bcm4709-tplink-archer-c9-v1.dtb \
|
||||
bcm47094-asus-rt-ac88u.dtb \
|
||||
bcm47094-dlink-dir-885l.dtb \
|
||||
+ bcm47094-dlink-dir-890l.dtb \
|
||||
bcm47094-linksys-panamera.dtb \
|
||||
bcm47094-luxul-abr-4500.dtb \
|
||||
bcm47094-luxul-xap-1610.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm47094-dlink-dir-890l.dts
|
||||
@@ -0,0 +1,211 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
+/*
|
||||
+ * Device tree for D-Link DIR-890L
|
||||
+ * D-Link calls this board "WRGAC36"
|
||||
+ * this router has the same looks and form factor as D-Link DIR-885L.
|
||||
+ *
|
||||
+ * Some differences from DIR-885L include a separate USB2 port, separate LEDs
|
||||
+ * for USB2 and USB3, a separate VCC supply for the USB2 slot and no
|
||||
+ * router/extender switch is mounted (there is an empty mount point on the
|
||||
+ * PCB) so this device is a pure router. Also the LAN ports are in the right
|
||||
+ * order.
|
||||
+ *
|
||||
+ * Based on the device tree for DIR-885L
|
||||
+ * Copyright (C) 2016 Rafał Miłecki <zajec5@gmail.com>
|
||||
+ * Copyright (C) 2022 Linus Walleij
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "bcm47094.dtsi"
|
||||
+#include "bcm5301x-nand-cs0-bch1.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "dlink,dir-890l", "brcm,bcm47094", "brcm,bcm4708";
|
||||
+ model = "D-Link DIR-890L";
|
||||
+
|
||||
+ chosen {
|
||||
+ bootargs = "console=ttyS0,115200 earlycon";
|
||||
+ };
|
||||
+
|
||||
+ memory@0 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x00000000 0x08000000>,
|
||||
+ <0x88000000 0x08000000>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ /*
|
||||
+ * LED information is derived from the boot log which
|
||||
+ * conveniently lists all the LEDs.
|
||||
+ */
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ power-white {
|
||||
+ label = "bcm53xx:white:power";
|
||||
+ gpios = <&chipcommon 0 GPIO_ACTIVE_LOW>;
|
||||
+ linux,default-trigger = "default-on";
|
||||
+ };
|
||||
+
|
||||
+ wan-white {
|
||||
+ label = "bcm53xx:white:wan";
|
||||
+ gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ power-amber {
|
||||
+ label = "bcm53xx:amber:power";
|
||||
+ gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ wan-amber {
|
||||
+ label = "bcm53xx:amber:wan";
|
||||
+ gpios = <&chipcommon 3 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ usb3-white {
|
||||
+ label = "bcm53xx:white:usb3";
|
||||
+ gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
|
||||
+ trigger-sources = <&xhci_port1>;
|
||||
+ linux,default-trigger = "usbport";
|
||||
+ };
|
||||
+
|
||||
+ usb2-white {
|
||||
+ label = "bcm53xx:white:usb2";
|
||||
+ gpios = <&chipcommon 15 GPIO_ACTIVE_LOW>;
|
||||
+ trigger-sources = <&ohci_port1>, <&ehci_port1>;
|
||||
+ linux,default-trigger = "usbport";
|
||||
+ };
|
||||
+
|
||||
+ 2ghz {
|
||||
+ label = "bcm53xx:white:2ghz";
|
||||
+ gpios = <&chipcommon 13 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ 5ghz {
|
||||
+ label = "bcm53xx:white:5ghz";
|
||||
+ gpios = <&chipcommon 14 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ button-wps {
|
||||
+ label = "WPS";
|
||||
+ linux,code = <KEY_WPS_BUTTON>;
|
||||
+ gpios = <&chipcommon 7 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ /* Called "factory reset" in the vendor dmesg */
|
||||
+ button-restart {
|
||||
+ label = "Reset";
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ /*
|
||||
+ * The flash memory is memory mapped at 0x1e000000-0x1fffffff
|
||||
+ * 64KB blocks; total size 2MB, same that can be
|
||||
+ * found attached to the spi_nor SPI controller.
|
||||
+ */
|
||||
+ nvram@1e1f0000 {
|
||||
+ compatible = "brcm,nvram";
|
||||
+ reg = <0x1e1f0000 0x00010000>;
|
||||
+
|
||||
+ et0macaddr: et0macaddr {
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&gmac2 {
|
||||
+ /*
|
||||
+ * The NVRAM curiously does not contain a MAC address
|
||||
+ * for et2 so since that is the only ethernet interface
|
||||
+ * actually in use on the platform, we use this et0 MAC
|
||||
+ * address for et2.
|
||||
+ */
|
||||
+ nvmem-cells = <&et0macaddr>;
|
||||
+ nvmem-cell-names = "mac-address";
|
||||
+};
|
||||
+
|
||||
+&spi_nor {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&nandcs {
|
||||
+ /* Spansion S34ML01G2, 128MB with 128KB erase blocks */
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ /*
|
||||
+ * This is called "nflash" in the vendor kernel with
|
||||
+ * "upgrade" and "rootfs" (probably using OpenWrt
|
||||
+ * splitpart). We call it "firmware" like standard tools
|
||||
+ * assume. The CFE loader contains incorrect information
|
||||
+ * about TRX partitions, ignore this, there are no TRX
|
||||
+ * partitions: this device uses SEAMA.
|
||||
+ */
|
||||
+ firmware@0 {
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00000000 0x08000000>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&usb2 {
|
||||
+ vcc-gpios = <&chipcommon 21 GPIO_ACTIVE_HIGH>;
|
||||
+};
|
||||
+
|
||||
+&usb3 {
|
||||
+ vcc-gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
|
||||
+};
|
||||
+
|
||||
+&usb3_phy {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@8 {
|
||||
+ reg = <8>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac2>;
|
||||
+ phy-mode = "rgmii";
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <1000>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
@ -0,0 +1,165 @@
|
||||
From 9f66e1dd82e3186aee95282657512ca2aef1afe0 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Wed, 19 Oct 2022 21:34:49 +0200
|
||||
Subject: [PATCH] ARM: dts: bcm53016: Add devicetree for D-Link DWL-8610AP
|
||||
|
||||
This adds a device tree for the BCM53016-based D-Link DWL-8610AP
|
||||
access point wireless router.
|
||||
|
||||
The TRX-format partitions had to be named "firmware" due to
|
||||
an OpenWrt patch that only accepts parting such nodes if they
|
||||
are named "firmware".
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20221019193449.3036010-2-linus.walleij@linaro.org
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 1 +
|
||||
.../boot/dts/bcm53016-dlink-dwl-8610ap.dts | 131 ++++++++++++++++++
|
||||
2 files changed, 132 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/bcm53016-dlink-dwl-8610ap.dts
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -140,6 +140,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
|
||||
bcm47094-netgear-r8500.dtb \
|
||||
bcm47094-phicomm-k3.dtb \
|
||||
bcm53015-meraki-mr26.dtb \
|
||||
+ bcm53016-dlink-dwl-8610ap.dtb \
|
||||
bcm53016-meraki-mr32.dtb \
|
||||
bcm94708.dtb \
|
||||
bcm94709.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm53016-dlink-dwl-8610ap.dts
|
||||
@@ -0,0 +1,131 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "bcm4709.dtsi"
|
||||
+#include "bcm5301x-nand-cs0-bch8.dtsi"
|
||||
+#include <dt-bindings/leds/common.h>
|
||||
+#include <dt-bindings/input/input.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "D-Link DWL-8610AP";
|
||||
+ compatible = "dlink,dwl-8610ap", "brcm,bcm53016", "brcm,bcm4708";
|
||||
+
|
||||
+ memory@0 {
|
||||
+ device_type = "memory";
|
||||
+ /* 512 MB RAM in 2 x Macronix D9PSH chips */
|
||||
+ reg = <0x00000000 0x08000000>,
|
||||
+ <0x88000000 0x08000000>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ power {
|
||||
+ function = LED_FUNCTION_POWER;
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ gpios = <&chipcommon 0 GPIO_ACTIVE_LOW>;
|
||||
+ default-state = "on";
|
||||
+ };
|
||||
+
|
||||
+ diag {
|
||||
+ /* Actually "diag" unclear what this means */
|
||||
+ function = LED_FUNCTION_INDICATOR;
|
||||
+ color = <LED_COLOR_ID_RED>;
|
||||
+ gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
|
||||
+ default-state = "on";
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+
|
||||
+ wlan-2g {
|
||||
+ function = LED_FUNCTION_WLAN;
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ gpios = <&chipcommon 5 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+
|
||||
+ wlan-5g {
|
||||
+ function = LED_FUNCTION_WLAN;
|
||||
+ color = <LED_COLOR_ID_GREEN>;
|
||||
+ gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ gpio_keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ button-reset {
|
||||
+ debounce-interval = <100>;
|
||||
+ wakeup-source;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
+ label = "reset";
|
||||
+ /* This GPIO is actually stored in NVRAM, but it's not gonna change */
|
||||
+ gpios = <&chipcommon 4 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ /*
|
||||
+ * Flash memory at 0x1e000000-0x1fffffff
|
||||
+ * Macronix 32 64KB blocks; total size 2MB, same that can be
|
||||
+ * found attached to the spi_nor SPI controller.
|
||||
+ */
|
||||
+ nvram@1e080000 {
|
||||
+ compatible = "brcm,nvram";
|
||||
+ reg = <0x1e080000 0x00020000>;
|
||||
+
|
||||
+ et0macaddr: et0macaddr {
|
||||
+ };
|
||||
+
|
||||
+ et1macaddr: et1macaddr {
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&gmac0 {
|
||||
+ nvmem-cells = <&et0macaddr>;
|
||||
+ nvmem-cell-names = "mac-address";
|
||||
+};
|
||||
+
|
||||
+&gmac1 {
|
||||
+ nvmem-cells = <&et1macaddr>;
|
||||
+ nvmem-cell-names = "mac-address";
|
||||
+};
|
||||
+
|
||||
+&spi_nor {
|
||||
+ /* Serial SPI NOR Flash MX 25L1606E */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&nandcs {
|
||||
+ /*
|
||||
+ * Spansion S34ML01G100TFI00 128 MB NAND Flash memory
|
||||
+ *
|
||||
+ * This ECC is a bit unorthodox but it is what the stock firmware
|
||||
+ * is using, so to be able to mount the original partitions
|
||||
+ * this is necessary.
|
||||
+ */
|
||||
+ nand-ecc-strength = <5>;
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ /* This is named nflash1.trx in CFE */
|
||||
+ trx@0 {
|
||||
+ label = "firmware";
|
||||
+ reg = <0x00000000 0x02800000>;
|
||||
+ compatible = "brcm,trx";
|
||||
+ };
|
||||
+
|
||||
+ /* This is named nflash1.trx2 in CFE */
|
||||
+ trx2@2800000 {
|
||||
+ label = "firmware2";
|
||||
+ reg = <0x02800000 0x02800000>;
|
||||
+ compatible = "brcm,trx";
|
||||
+ };
|
||||
+
|
||||
+ /* This is named nflash1.rwfs in CFE */
|
||||
+ free@5000000 {
|
||||
+ label = "free";
|
||||
+ reg = <0x05000000 0x03000000>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
@ -0,0 +1,28 @@
|
||||
From b9457a04eb89645049fdf427c13e6a18d5501895 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Tue, 11 Oct 2022 14:24:40 +0200
|
||||
Subject: [PATCH] bcma: support SPROM rev 11
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Rev 11 works fine for me to set the MAC address of gmac0 and
|
||||
gmac1 in the D-Link DWL-8610AP.
|
||||
|
||||
Cc: Rafał Miłecki <zajec5@gmail.com>
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/bcma/sprom.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/bcma/sprom.c
|
||||
+++ b/drivers/bcma/sprom.c
|
||||
@@ -170,7 +170,7 @@ static int bcma_sprom_valid(struct bcma_
|
||||
return err;
|
||||
|
||||
revision = sprom[words - 1] & SSB_SPROM_REVISION_REV;
|
||||
- if (revision != 8 && revision != 9 && revision != 10) {
|
||||
+ if (revision < 8 || revision > 11) {
|
||||
pr_err("Unsupported SPROM revision: %d\n", revision);
|
||||
return -ENOENT;
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Tue, 13 Apr 2021 18:25:20 +0200
|
||||
Subject: [PATCH] mtd: parsers: trx: parse "firmware" MTD partitions only
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Parsing every partition with "compatible" set to "brcm,trx" results in
|
||||
parsing both: firmware partition and failsafe partition on devices that
|
||||
implement failsafe booting. This affects e.g. Linksys EA9500 which has:
|
||||
|
||||
partition@200000 {
|
||||
reg = <0x0200000 0x01d00000>;
|
||||
compatible = "linksys,ns-firmware", "brcm,trx";
|
||||
};
|
||||
|
||||
partition@1f00000 {
|
||||
reg = <0x01f00000 0x01d00000>;
|
||||
compatible = "linksys,ns-firmware", "brcm,trx";
|
||||
};
|
||||
|
||||
Check for MTD partition name "firmware" before parsing. Recently added
|
||||
ofpart_linksys_ns.c creates "firmware" and "failsafe" depending on
|
||||
bootloader setup.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/mtd/parsers/parser_trx.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/drivers/mtd/parsers/parser_trx.c
|
||||
+++ b/drivers/mtd/parsers/parser_trx.c
|
||||
@@ -92,6 +92,10 @@ static int parser_trx_parse(struct mtd_i
|
||||
if (err != 0 && err != -EINVAL)
|
||||
pr_err("failed to parse \"brcm,trx-magic\" DT attribute, using default: %d\n", err);
|
||||
|
||||
+ /* Don't parse any failsafe / backup partitions */
|
||||
+ if (strcmp(mtd->name, "firmware"))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
parts = kcalloc(TRX_PARSER_MAX_PARTS, sizeof(struct mtd_partition),
|
||||
GFP_KERNEL);
|
||||
if (!parts)
|
@ -0,0 +1,117 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sat, 1 Oct 2016 22:54:48 +0200
|
||||
Subject: [PATCH] usb: xhci: add support for performing fake doorbell
|
||||
|
||||
Broadcom's Northstar XHCI controllers seem to need a special start
|
||||
procedure to work correctly. There isn't any official documentation of
|
||||
this, the problem is that controller doesn't detect any connected
|
||||
devices with default setup. Moreover connecting USB device to controller
|
||||
that doesn't run properly can cause SoC's watchdog issues.
|
||||
|
||||
A workaround that was successfully tested on multiple devices is to
|
||||
perform a fake doorbell. This patch adds code for doing this and enables
|
||||
it on BCM4708 family.
|
||||
---
|
||||
drivers/usb/host/xhci-plat.c | 6 +++++
|
||||
drivers/usb/host/xhci.c | 63 +++++++++++++++++++++++++++++++++++++++++---
|
||||
drivers/usb/host/xhci.h | 1 +
|
||||
3 files changed, 67 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/usb/host/xhci-plat.c
|
||||
+++ b/drivers/usb/host/xhci-plat.c
|
||||
@@ -77,6 +77,8 @@ static int xhci_priv_resume_quirk(struct
|
||||
static void xhci_plat_quirks(struct device *dev, struct xhci_hcd *xhci)
|
||||
{
|
||||
struct xhci_plat_priv *priv = xhci_to_priv(xhci);
|
||||
+ struct platform_device*pdev = to_platform_device(dev);
|
||||
+ struct device_node *node = pdev->dev.of_node;
|
||||
|
||||
/*
|
||||
* As of now platform drivers don't provide MSI support so we ensure
|
||||
@@ -84,6 +86,9 @@ static void xhci_plat_quirks(struct devi
|
||||
* dev struct in order to setup MSI
|
||||
*/
|
||||
xhci->quirks |= XHCI_PLAT | priv->quirks;
|
||||
+
|
||||
+ if (node && of_machine_is_compatible("brcm,bcm4708"))
|
||||
+ xhci->quirks |= XHCI_FAKE_DOORBELL;
|
||||
}
|
||||
|
||||
/* called during probe() after chip reset completes */
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -161,6 +161,49 @@ int xhci_start(struct xhci_hcd *xhci)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * xhci_fake_doorbell - Perform a fake doorbell on a specified slot
|
||||
+ *
|
||||
+ * Some controllers require a fake doorbell to start correctly. Without that
|
||||
+ * they simply don't detect any devices.
|
||||
+ */
|
||||
+static int xhci_fake_doorbell(struct xhci_hcd *xhci, int slot_id)
|
||||
+{
|
||||
+ u32 temp;
|
||||
+
|
||||
+ /* Alloc a virt device for that slot */
|
||||
+ if (!xhci_alloc_virt_device(xhci, slot_id, NULL, GFP_NOIO)) {
|
||||
+ xhci_warn(xhci, "Could not allocate xHCI USB device data structures\n");
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ /* Ring fake doorbell for slot_id ep 0 */
|
||||
+ xhci_ring_ep_doorbell(xhci, slot_id, 0, 0);
|
||||
+ usleep_range(1000, 1500);
|
||||
+
|
||||
+ /* Read the status to check if HSE is set or not */
|
||||
+ temp = readl(&xhci->op_regs->status);
|
||||
+
|
||||
+ /* Clear HSE if set */
|
||||
+ if (temp & STS_FATAL) {
|
||||
+ xhci_dbg(xhci, "HSE problem detected, status: 0x%08x\n", temp);
|
||||
+ temp &= ~0x1fff;
|
||||
+ temp |= STS_FATAL;
|
||||
+ writel(temp, &xhci->op_regs->status);
|
||||
+ usleep_range(1000, 1500);
|
||||
+ readl(&xhci->op_regs->status);
|
||||
+ }
|
||||
+
|
||||
+ /* Free virt device */
|
||||
+ xhci_free_virt_device(xhci, slot_id);
|
||||
+
|
||||
+ /* We're done if controller is already running */
|
||||
+ if (readl(&xhci->op_regs->command) & CMD_RUN)
|
||||
+ return 0;
|
||||
+
|
||||
+ return xhci_start(xhci);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Reset a halted HC.
|
||||
*
|
||||
@@ -641,6 +684,14 @@ static int xhci_run_finished(struct xhci
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
+ if (xhci->quirks & XHCI_FAKE_DOORBELL) {
|
||||
+ int err = xhci_fake_doorbell(xhci, 1);
|
||||
+ if (err) {
|
||||
+ xhci_halt(xhci);
|
||||
+ return err;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
|
||||
|
||||
if (xhci->quirks & XHCI_NEC_HOST)
|
||||
--- a/drivers/usb/host/xhci.h
|
||||
+++ b/drivers/usb/host/xhci.h
|
||||
@@ -1899,6 +1899,7 @@ struct xhci_hcd {
|
||||
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
|
||||
#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)
|
||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
||||
+#define XHCI_FAKE_DOORBELL BIT_ULL(45)
|
||||
|
||||
unsigned int num_active_eps;
|
||||
unsigned int limit_active_eps;
|
@ -0,0 +1,101 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Wed, 24 Sep 2014 22:14:07 +0200
|
||||
Subject: [PATCH] ARM: BCM5301X: Disable MMU and Dcache during decompression
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Broadcom devices have broken CFE (bootloader) that leaves hardware in an
|
||||
invalid state. It causes problems with booting Linux. On Northstar
|
||||
devices kernel was randomly hanging in ~25% of tries during early init.
|
||||
Hangs used to happen at random places in the start_kernel. On BCM53573
|
||||
kernel doesn't even seem to start booting.
|
||||
|
||||
To workaround this problem we need to do following very early:
|
||||
1) Clear 2 following bits in the SCTLR register:
|
||||
#define CR_M (1 << 0) /* MMU enable */
|
||||
#define CR_C (1 << 2) /* Dcache enable */
|
||||
2) Flush the whole D-cache
|
||||
3) Disable L2 cache
|
||||
|
||||
Unfortunately this patch is not upstreamable as it does above things
|
||||
unconditionally. We can't check if we are running on Broadcom platform
|
||||
in any safe way and doing such hacks with ARCH_MULTI_V7 is unacceptable
|
||||
as it could break other devices support.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/compressed/Makefile
|
||||
+++ b/arch/arm/boot/compressed/Makefile
|
||||
@@ -35,6 +35,11 @@ ifeq ($(CONFIG_ARCH_ACORN),y)
|
||||
OBJS += ll_char_wr.o font.o
|
||||
endif
|
||||
|
||||
+ifeq ($(CONFIG_ARCH_BCM_5301X),y)
|
||||
+OBJS += head-bcm_5301x-mpcore.o
|
||||
+OBJS += cache-v7-min.o
|
||||
+endif
|
||||
+
|
||||
ifeq ($(CONFIG_ARCH_SA1100),y)
|
||||
OBJS += head-sa1100.o
|
||||
endif
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/compressed/head-bcm_5301x-mpcore.S
|
||||
@@ -0,0 +1,37 @@
|
||||
+/*
|
||||
+ *
|
||||
+ * Platform specific tweaks. This is merged into head.S by the linker.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/linkage.h>
|
||||
+#include <asm/assembler.h>
|
||||
+#include <asm/cp15.h>
|
||||
+
|
||||
+ .section ".start", "ax"
|
||||
+
|
||||
+/*
|
||||
+ * This code section is spliced into the head code by the linker
|
||||
+ */
|
||||
+
|
||||
+__plat_uncompress_start:
|
||||
+
|
||||
+ @ Preserve r8/r7 i.e. kernel entry values
|
||||
+ mov r12, r8
|
||||
+
|
||||
+ @ Clear MMU enable and Dcache enable bits
|
||||
+ mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR
|
||||
+ bic r0, #CR_C|CR_M
|
||||
+ mcr p15, 0, r0, c1, c0, 0 @ Write SCTLR
|
||||
+ nop
|
||||
+
|
||||
+ @ Call the cache invalidation routine
|
||||
+ bl v7_flush_dcache_all
|
||||
+ nop
|
||||
+ mov r0,#0
|
||||
+ ldr r3, =0x19022000 @ L2 cache controller, control reg
|
||||
+ str r0, [r3, #0x100] @ Disable L2 cache
|
||||
+ nop
|
||||
+
|
||||
+ @ Restore
|
||||
+ mov r8, r12
|
||||
--- a/arch/arm/boot/compressed/cache-v7-min.S
|
||||
+++ b/arch/arm/boot/compressed/cache-v7-min.S
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
+#include <asm/assembler.h>
|
||||
|
||||
__INIT
|
||||
|
||||
@@ -63,7 +64,7 @@ loop2:
|
||||
ARM( orr r11, r11, r9, lsl r2 ) @ factor index number into r11
|
||||
THUMB( lsl r6, r9, r2 )
|
||||
THUMB( orr r11, r11, r6 ) @ factor index number into r11
|
||||
- mcr p15, 0, r11, c7, c14, 2 @ clean & invalidate by set/way
|
||||
+ mcr p15, 0, r11, c7, c6, 2 @ clean & invalidate by set/way
|
||||
subs r9, r9, #1 @ decrement the index
|
||||
bge loop2
|
||||
subs r4, r4, #1 @ decrement the way
|
@ -0,0 +1,711 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Subject: [PATCH] ARM: dts: BCM5301X: Specify switch ports for remaining
|
||||
devices
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dts
|
||||
@@ -93,3 +93,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-asus-rt-ac68u.dts
|
||||
@@ -83,3 +83,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-buffalo-wzr-1750dhp.dts
|
||||
@@ -149,3 +149,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4708-linksys-ea6300-v1.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-linksys-ea6300-v1.dts
|
||||
@@ -46,3 +46,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||
@@ -42,3 +42,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-netgear-r6300-v2.dts
|
||||
@@ -86,3 +86,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47081-asus-rt-n18u.dts
|
||||
@@ -77,3 +77,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-asus-rt-ac87u.dts
|
||||
@@ -66,6 +66,38 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@7 {
|
||||
+ reg = <7>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac1>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&nandcs {
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
--- a/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-buffalo-wxr-1900dhp.dts
|
||||
@@ -130,3 +130,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4709-linksys-ea9200.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-linksys-ea9200.dts
|
||||
@@ -47,3 +47,45 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@8 {
|
||||
+ reg = <8>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac2>;
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <1000>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm4709-netgear-r7000.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-netgear-r7000.dts
|
||||
@@ -104,3 +104,40 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm47094-netgear-r8500.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47094-netgear-r8500.dts
|
||||
@@ -94,3 +94,45 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@8 {
|
||||
+ reg = <8>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac2>;
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <1000>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--- a/arch/arm/boot/dts/bcm47094-phicomm-k3.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47094-phicomm-k3.dts
|
||||
@@ -38,6 +38,38 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&nandcs {
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
--- a/arch/arm/boot/dts/bcm47081-tplink-archer-c5-v2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47081-tplink-archer-c5-v2.dts
|
||||
@@ -91,6 +91,43 @@
|
||||
};
|
||||
};
|
||||
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&spi_nor {
|
||||
status = "okay";
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm4709-tplink-archer-c9-v1.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4709-tplink-archer-c9-v1.dts
|
||||
@@ -100,6 +100,43 @@
|
||||
vcc-gpio = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
&spi_nor {
|
||||
status = "okay";
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47081-buffalo-wzr-900dhp.dts
|
||||
@@ -107,3 +107,41 @@
|
||||
&usb3_phy {
|
||||
status = "okay";
|
||||
};
|
||||
+
|
||||
+&srab {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ ports {
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "lan1";
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan2";
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan3";
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "lan4";
|
||||
+ };
|
||||
+
|
||||
+ port@4 {
|
||||
+ reg = <4>;
|
||||
+ label = "wan";
|
||||
+ };
|
||||
+
|
||||
+ port@5 {
|
||||
+ reg = <5>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <&gmac0>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
@ -0,0 +1,64 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
|
||||
Subject: [PATCH] ARM: BCM5301X: Add DT for Netgear R7900
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -125,6 +125,7 @@ dtb-$(CONFIG_ARCH_BCM_5301X) += \
|
||||
bcm4709-buffalo-wxr-1900dhp.dtb \
|
||||
bcm4709-linksys-ea9200.dtb \
|
||||
bcm4709-netgear-r7000.dtb \
|
||||
+ bcm4709-netgear-r7900.dtb \
|
||||
bcm4709-netgear-r8000.dtb \
|
||||
bcm4709-tplink-archer-c9-v1.dtb \
|
||||
bcm47094-asus-rt-ac88u.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm4709-netgear-r7900.dts
|
||||
@@ -0,0 +1,42 @@
|
||||
+/*
|
||||
+ * Broadcom BCM470X / BCM5301X ARM platform code.
|
||||
+ * DTS for Netgear R7900
|
||||
+ *
|
||||
+ * Copyright (C) 2016 Rafał Miłecki <zajec5@gmail.com>
|
||||
+ *
|
||||
+ * Licensed under the GNU/GPL. See COPYING for details.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "bcm4709.dtsi"
|
||||
+#include "bcm5301x-nand-cs0-bch8.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "netgear,r7900", "brcm,bcm4709", "brcm,bcm4708";
|
||||
+ model = "Netgear R7900";
|
||||
+
|
||||
+ chosen {
|
||||
+ bootargs = "console=ttyS0,115200";
|
||||
+ };
|
||||
+
|
||||
+ memory {
|
||||
+ reg = <0x00000000 0x08000000
|
||||
+ 0x88000000 0x08000000>;
|
||||
+ };
|
||||
+
|
||||
+ axi@18000000 {
|
||||
+ usb3@23000 {
|
||||
+ reg = <0x00023000 0x1000>;
|
||||
+
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ status = "okay";
|
||||
+};
|
@ -0,0 +1,27 @@
|
||||
From e492f69e4da879db7b3e9a2290e5b6620f1335b5 Mon Sep 17 00:00:00 2001
|
||||
From: Aleksey Nasibulin <alealexpro100@ya.ru>
|
||||
Date: Thu, 13 Oct 2022 08:16:51 +0000
|
||||
Subject: [PATCH] ARM: dts: BCM5301X: Extend RAM to full 256MB for Linksys
|
||||
EA6500 V2
|
||||
|
||||
Linksys ea6500-v2 have 256MB of ram. Currently we only use 128MB.
|
||||
Expand the definition to use all the available RAM.
|
||||
|
||||
Fixes: 03e96644d7a8 ("ARM: dts: BCM5301X: Add basic DT for Linksys EA6500 V2")
|
||||
Signed-off-by: Aleksey Nasibulin <alealexpro100@ya.ru>
|
||||
---
|
||||
arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||
+++ b/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
- reg = <0x00000000 0x08000000>;
|
||||
+ reg = <0x00000000 0x08000000>,
|
||||
+ <0x88000000 0x08000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
@ -0,0 +1,25 @@
|
||||
From 7166207bd1d8c46d09d640d46afc685df9bb9083 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 22 Nov 2018 09:21:49 +0100
|
||||
Subject: [PATCH] ARM: dts: BCM5301X: Describe partition formats
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It's needed by OpenWrt for custom partitioning.
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
arch/arm/boot/dts/bcm47094-dlink-dir-885l.dts | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm47094-dlink-dir-885l.dts
|
||||
+++ b/arch/arm/boot/dts/bcm47094-dlink-dir-885l.dts
|
||||
@@ -35,6 +35,7 @@
|
||||
partition@0 {
|
||||
label = "firmware";
|
||||
reg = <0x00000000 0x08000000>;
|
||||
+ compatible = "seama";
|
||||
};
|
||||
};
|
||||
};
|
@ -0,0 +1,59 @@
|
||||
From 2a2af518266a29323cf30c3f9ba9ef2ceb1dd84b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
|
||||
Date: Thu, 16 Oct 2014 20:52:16 +0200
|
||||
Subject: [PATCH] UBI: Detect EOF mark and erase all remaining blocks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
---
|
||||
drivers/mtd/ubi/attach.c | 5 +++++
|
||||
drivers/mtd/ubi/io.c | 4 ++++
|
||||
drivers/mtd/ubi/ubi.h | 1 +
|
||||
3 files changed, 10 insertions(+)
|
||||
|
||||
--- a/drivers/mtd/ubi/attach.c
|
||||
+++ b/drivers/mtd/ubi/attach.c
|
||||
@@ -82,6 +82,9 @@ static int self_check_ai(struct ubi_devi
|
||||
#define AV_ADD BIT(1)
|
||||
#define AV_FIND_OR_ADD (AV_FIND | AV_ADD)
|
||||
|
||||
+/* Set on finding block with 0xdeadc0de, indicates erasing all blocks behind */
|
||||
+bool erase_all_next;
|
||||
+
|
||||
/**
|
||||
* find_or_add_av - internal function to find a volume, add a volume or do
|
||||
* both (find and add if missing).
|
||||
@@ -1580,6 +1583,8 @@ int ubi_attach(struct ubi_device *ubi, i
|
||||
if (!ai)
|
||||
return -ENOMEM;
|
||||
|
||||
+ erase_all_next = false;
|
||||
+
|
||||
#ifdef CONFIG_MTD_UBI_FASTMAP
|
||||
/* On small flash devices we disable fastmap in any case. */
|
||||
if ((int)mtd_div_by_eb(ubi->mtd->size, ubi->mtd) <= UBI_FM_MAX_START) {
|
||||
--- a/drivers/mtd/ubi/io.c
|
||||
+++ b/drivers/mtd/ubi/io.c
|
||||
@@ -717,6 +717,10 @@ int ubi_io_read_ec_hdr(struct ubi_device
|
||||
}
|
||||
|
||||
magic = be32_to_cpu(ec_hdr->magic);
|
||||
+ if (magic == 0xdeadc0de)
|
||||
+ erase_all_next = true;
|
||||
+ if (erase_all_next)
|
||||
+ return read_err ? UBI_IO_FF_BITFLIPS : UBI_IO_FF;
|
||||
if (magic != UBI_EC_HDR_MAGIC) {
|
||||
if (mtd_is_eccerr(read_err))
|
||||
return UBI_IO_BAD_HDR_EBADMSG;
|
||||
--- a/drivers/mtd/ubi/ubi.h
|
||||
+++ b/drivers/mtd/ubi/ubi.h
|
||||
@@ -820,6 +820,7 @@ extern struct mutex ubi_devices_mutex;
|
||||
extern struct blocking_notifier_head ubi_notifiers;
|
||||
|
||||
/* attach.c */
|
||||
+extern bool erase_all_next;
|
||||
struct ubi_ainf_peb *ubi_alloc_aeb(struct ubi_attach_info *ai, int pnum,
|
||||
int ec);
|
||||
void ubi_free_aeb(struct ubi_attach_info *ai, struct ubi_ainf_peb *aeb);
|
@ -0,0 +1,36 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 20 Jun 2022 10:01:18 +0200
|
||||
Subject: [PATCH] net: disable GRO by default
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
In many cases GRO improves network performance however it comes at a
|
||||
cost of chacksums calculations. In case of slow CPU and missing hardware
|
||||
csum calculation support GRO can actually decrease network speed.
|
||||
|
||||
On BCM4708 *disabling* GRO results in following NAT masquarade speed
|
||||
changes:
|
||||
1. 364 Mb/s → 396 Mb/s (packet steering disabled)
|
||||
2. 341 Mb/s → 566 Mb/s (packet steering enabled)
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
include/linux/netdev_features.h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/include/linux/netdev_features.h
|
||||
+++ b/include/linux/netdev_features.h
|
||||
@@ -242,10 +242,10 @@ static inline int find_next_netdev_featu
|
||||
#define NETIF_F_UPPER_DISABLES NETIF_F_LRO
|
||||
|
||||
/* changeable features with no special hardware requirements */
|
||||
-#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
+#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO)
|
||||
|
||||
/* Changeable features with no special hardware requirements that defaults to off. */
|
||||
-#define NETIF_F_SOFT_FEATURES_OFF (NETIF_F_GRO_FRAGLIST | NETIF_F_GRO_UDP_FWD)
|
||||
+#define NETIF_F_SOFT_FEATURES_OFF (NETIF_F_GRO_FRAGLIST | NETIF_F_GRO_UDP_FWD | NETIF_F_GRO)
|
||||
|
||||
#define NETIF_F_VLAN_FEATURES (NETIF_F_HW_VLAN_CTAG_FILTER | \
|
||||
NETIF_F_HW_VLAN_CTAG_RX | \
|
@ -0,0 +1,33 @@
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Fri, 10 Jun 2022 13:10:47 +0200
|
||||
Subject: [PATCH] bgmac: reduce max frame size to support just MTU 1500
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
bgmac allocates new replacement buffer before handling each received
|
||||
frame. Allocating & DMA-preparing 9724 B each time consumes a lot of CPU
|
||||
time. Ideally bgmac should just respect currently set MTU but it isn't
|
||||
the case right now. For now just revert back to the old limited frame
|
||||
size.
|
||||
|
||||
This change bumps NAT masquarade speed by ~95%.
|
||||
|
||||
Ref: 8c7da63978f1 ("bgmac: configure MTU and add support for frames beyond 8192 byte size")
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bgmac.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/broadcom/bgmac.h
|
||||
+++ b/drivers/net/ethernet/broadcom/bgmac.h
|
||||
@@ -328,8 +328,7 @@
|
||||
#define BGMAC_RX_FRAME_OFFSET 30 /* There are 2 unused bytes between header and real data */
|
||||
#define BGMAC_RX_BUF_OFFSET (NET_SKB_PAD + NET_IP_ALIGN - \
|
||||
BGMAC_RX_FRAME_OFFSET)
|
||||
-/* Jumbo frame size with FCS */
|
||||
-#define BGMAC_RX_MAX_FRAME_SIZE 9724
|
||||
+#define BGMAC_RX_MAX_FRAME_SIZE 1536
|
||||
#define BGMAC_RX_BUF_SIZE (BGMAC_RX_FRAME_OFFSET + BGMAC_RX_MAX_FRAME_SIZE)
|
||||
#define BGMAC_RX_ALLOC_SIZE (SKB_DATA_ALIGN(BGMAC_RX_BUF_SIZE + BGMAC_RX_BUF_OFFSET) + \
|
||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
|
@ -0,0 +1,80 @@
|
||||
From 6f1c62440eb6846cb8045d7a5480ec7bbe47c96f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Mon, 15 Aug 2016 10:30:41 +0200
|
||||
Subject: [PATCH] BCM53573 minor hacks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
---
|
||||
|
||||
--- a/arch/arm/boot/dts/bcm53573.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm53573.dtsi
|
||||
@@ -54,6 +54,7 @@
|
||||
<GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
|
||||
<GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
|
||||
<GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
|
||||
+ clocks = <&ilp>;
|
||||
};
|
||||
|
||||
clocks {
|
||||
--- a/drivers/bcma/main.c
|
||||
+++ b/drivers/bcma/main.c
|
||||
@@ -330,14 +330,6 @@ static int bcma_register_devices(struct
|
||||
}
|
||||
#endif
|
||||
|
||||
-#ifdef CONFIG_BCMA_SFLASH
|
||||
- if (bus->drv_cc.sflash.present) {
|
||||
- err = platform_device_register(&bcma_sflash_dev);
|
||||
- if (err)
|
||||
- bcma_err(bus, "Error registering serial flash\n");
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
#ifdef CONFIG_BCMA_NFLASH
|
||||
if (bus->drv_cc.nflash.present) {
|
||||
err = platform_device_register(&bcma_nflash_dev);
|
||||
@@ -415,6 +407,14 @@ int bcma_bus_register(struct bcma_bus *b
|
||||
bcma_register_core(bus, core);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_BCMA_SFLASH
|
||||
+ if (bus->drv_cc.sflash.present) {
|
||||
+ err = platform_device_register(&bcma_sflash_dev);
|
||||
+ if (err)
|
||||
+ bcma_err(bus, "Error registering serial flash\n");
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
/* Try to get SPROM */
|
||||
err = bcma_sprom_get(bus);
|
||||
if (err == -ENOENT) {
|
||||
--- a/drivers/clocksource/arm_arch_timer.c
|
||||
+++ b/drivers/clocksource/arm_arch_timer.c
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/cpu_pm.h>
|
||||
+#include <linux/clk.h>
|
||||
#include <linux/clockchips.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/clocksource_ids.h>
|
||||
@@ -1021,6 +1022,16 @@ static void __init arch_timer_of_configu
|
||||
if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
|
||||
arch_timer_rate = rate;
|
||||
|
||||
+ /* Get clk rate through clk driver if present */
|
||||
+ if (!arch_timer_rate) {
|
||||
+ struct clk *clk = of_clk_get(np, 0);
|
||||
+
|
||||
+ if (!IS_ERR(clk)) {
|
||||
+ if (!clk_prepare_enable(clk))
|
||||
+ arch_timer_rate = clk_get_rate(clk);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Check the timer frequency. */
|
||||
if (validate_timer_rate())
|
||||
pr_warn("frequency not available\n");
|
@ -60,7 +60,7 @@
|
||||
};
|
||||
|
||||
led_power_green: led@1 {
|
||||
reg = <0>;
|
||||
reg = <1>;
|
||||
active-low;
|
||||
label = "green:power";
|
||||
default-state = "on";
|
||||
|
@ -16,6 +16,7 @@ sercomm,h500-s-vfes)
|
||||
ucidef_set_interface "qtn" device "wifi" protocol "static" ipaddr "1.1.1.1" netmask "255.255.255.252"
|
||||
uci add_list firewall.@zone[0].network='qtn'
|
||||
;;
|
||||
comtrend,vg-8050 |\
|
||||
sercomm,shg2500)
|
||||
ucidef_set_bridge_device switch
|
||||
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
|
||||
|
@ -9,6 +9,7 @@ platform_check_image() {
|
||||
|
||||
platform_do_upgrade() {
|
||||
case "$(board_name)" in
|
||||
comtrend,vg-8050 |\
|
||||
comtrend,vr-3032u)
|
||||
CI_JFFS2_CLEAN_MARKERS=1
|
||||
nand_do_upgrade "$1"
|
||||
|
237
target/linux/bmips/dts/bcm63169-comtrend-vg-8050.dts
Normal file
237
target/linux/bmips/dts/bcm63169-comtrend-vg-8050.dts
Normal file
@ -0,0 +1,237 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "bcm63268.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Comtrend VG-8050";
|
||||
compatible = "comtrend,vg-8050", "brcm,bcm63169", "brcm,bcm63268";
|
||||
|
||||
aliases {
|
||||
led-boot = &led_power_green;
|
||||
led-failsafe = &led_power_red;
|
||||
led-running = &led_power_green;
|
||||
led-upgrade = &led_power_green;
|
||||
};
|
||||
|
||||
keys {
|
||||
compatible = "gpio-keys-polled";
|
||||
poll-interval = <100>;
|
||||
|
||||
reset {
|
||||
label = "reset";
|
||||
gpios = <&gpio 33 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_RESTART>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "wps";
|
||||
gpios = <&gpio 34 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
debounce-interval = <60>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ehci {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
ðernet {
|
||||
status = "okay";
|
||||
|
||||
nvmem-cells = <&macaddr_cferom_6a0>;
|
||||
nvmem-cell-names = "mac-address";
|
||||
};
|
||||
|
||||
&hsspi {
|
||||
status = "okay";
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hsspi_cs5>;
|
||||
|
||||
switch@5 {
|
||||
compatible = "brcm,bcm53125";
|
||||
reg = <5>;
|
||||
spi-max-frequency = <781000>;
|
||||
spi-cpha;
|
||||
spi-cpol;
|
||||
dsa,member = <1 0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
label = "lan4";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "lan3";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "lan2";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
label = "lan1";
|
||||
};
|
||||
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
label = "wan";
|
||||
};
|
||||
|
||||
port@8 {
|
||||
reg = <8>;
|
||||
|
||||
phy-mode = "rgmii";
|
||||
ethernet = <&switch0port6>;
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&leds {
|
||||
status = "okay";
|
||||
|
||||
brcm,serial-leds;
|
||||
brcm,serial-dat-low;
|
||||
brcm,serial-shift-inv;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_serial_led>;
|
||||
|
||||
led@2 {
|
||||
reg = <2>;
|
||||
active-low;
|
||||
label = "red:internet";
|
||||
};
|
||||
|
||||
led_power_red: led@3 {
|
||||
reg = <3>;
|
||||
active-low;
|
||||
label = "red:power";
|
||||
panic-indicator;
|
||||
};
|
||||
|
||||
led_power_green: led@6 {
|
||||
reg = <6>;
|
||||
active-low;
|
||||
label = "green:power";
|
||||
};
|
||||
|
||||
led@7 {
|
||||
reg = <7>;
|
||||
active-low;
|
||||
label = "green:wps";
|
||||
};
|
||||
|
||||
led@8 {
|
||||
reg = <8>;
|
||||
active-low;
|
||||
label = "green:internet";
|
||||
};
|
||||
|
||||
led@10 {
|
||||
reg = <10>;
|
||||
active-low;
|
||||
label = "green:voip";
|
||||
};
|
||||
|
||||
led@12 {
|
||||
reg = <12>;
|
||||
active-low;
|
||||
label = "red:voip";
|
||||
};
|
||||
|
||||
led@14 {
|
||||
reg = <14>;
|
||||
active-low;
|
||||
label = "red:wps";
|
||||
};
|
||||
};
|
||||
|
||||
&nflash {
|
||||
status = "okay";
|
||||
|
||||
nandcs@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-ecc-step-size = <512>;
|
||||
nand-ecc-strength = <15>;
|
||||
nand-on-flash-bbt;
|
||||
brcm,nand-oob-sector-size = <64>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
cferom: partition@0 {
|
||||
label = "cferom";
|
||||
reg = <0x0000000 0x0020000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@20000 {
|
||||
compatible = "brcm,wfi-split";
|
||||
label = "wfi";
|
||||
reg = <0x0020000 0x7ac0000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&ohci {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&switch0 {
|
||||
dsa,member = <0 0>;
|
||||
|
||||
ports {
|
||||
switch0port6: port@6 {
|
||||
reg = <6>;
|
||||
label = "extsw";
|
||||
|
||||
phy-mode = "rgmii";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbh {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&cferom {
|
||||
compatible = "nvmem-cells";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
macaddr_cferom_6a0: macaddr@6a0 {
|
||||
reg = <0x6a0 0x6>;
|
||||
};
|
||||
};
|
@ -1,5 +1,24 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
define Device/comtrend_vg-8050
|
||||
$(Device/bcm63xx-nand)
|
||||
DEVICE_VENDOR := Comtrend
|
||||
DEVICE_MODEL := VG-8050
|
||||
CHIP_ID := 63268
|
||||
SOC := bcm63169
|
||||
CFE_RAM_FILE := comtrend,vg-8050/cferam.000
|
||||
CFE_RAM_JFFS2_NAME := cferam.000
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
SUBPAGESIZE := 512
|
||||
VID_HDR_OFFSET := 2048
|
||||
DEVICE_PACKAGES += $(USB2_PACKAGES) \
|
||||
kmod-leds-bcm6328
|
||||
CFE_WFI_FLASH_TYPE := 3
|
||||
CFE_WFI_VERSION := 0x5732
|
||||
endef
|
||||
TARGET_DEVICES += comtrend_vg-8050
|
||||
|
||||
define Device/comtrend_vr-3032u
|
||||
$(Device/bcm63xx-nand)
|
||||
DEVICE_VENDOR := Comtrend
|
||||
|
@ -31,13 +31,13 @@ Signed-off-by: Vinod Koul <vkoul@kernel.org>
|
||||
|
||||
--- a/drivers/ata/ahci.h
|
||||
+++ b/drivers/ata/ahci.h
|
||||
@@ -240,8 +240,6 @@ enum {
|
||||
as default lpm_policy */
|
||||
AHCI_HFLAG_SUSPEND_PHYS = (1 << 26), /* handle PHYs during
|
||||
suspend/resume */
|
||||
- AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = (1 << 27), /* ignore -EOPNOTSUPP
|
||||
- from phy_power_on() */
|
||||
AHCI_HFLAG_NO_SXS = (1 << 28), /* SXS not supported */
|
||||
@@ -241,8 +241,6 @@ enum {
|
||||
as default lpm_policy */
|
||||
AHCI_HFLAG_SUSPEND_PHYS = BIT(26), /* handle PHYs during
|
||||
suspend/resume */
|
||||
- AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = BIT(27), /* ignore -EOPNOTSUPP
|
||||
- from phy_power_on() */
|
||||
AHCI_HFLAG_NO_SXS = BIT(28), /* SXS not supported */
|
||||
|
||||
/* ap->flags bits */
|
||||
--- a/drivers/ata/ahci_mvebu.c
|
||||
|
@ -233,7 +233,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static inline void
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -872,6 +872,7 @@ enum net_device_path_type {
|
||||
@@ -875,6 +875,7 @@ enum net_device_path_type {
|
||||
DEV_PATH_BRIDGE,
|
||||
DEV_PATH_PPPOE,
|
||||
DEV_PATH_DSA,
|
||||
@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
struct net_device_path {
|
||||
@@ -897,6 +898,12 @@ struct net_device_path {
|
||||
@@ -900,6 +901,12 @@ struct net_device_path {
|
||||
int port;
|
||||
u16 proto;
|
||||
} dsa;
|
||||
|
@ -0,0 +1,31 @@
|
||||
From eebc6573ad940b62a87776db3917e912b4f52d78 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Rix <trix@redhat.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:05 +0100
|
||||
Subject: [PATCH] nvmem: imx-ocotp: set varaiable imx_ocotp_layout
|
||||
storage-class-specifier to static
|
||||
|
||||
smatch reports
|
||||
drivers/nvmem/imx-ocotp.c:599:21: warning: symbol
|
||||
'imx_ocotp_layout' was not declared. Should it be static?
|
||||
|
||||
This variable is only used in one file so should be static.
|
||||
|
||||
Signed-off-by: Tom Rix <trix@redhat.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-2-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/imx-ocotp.c
|
||||
+++ b/drivers/nvmem/imx-ocotp.c
|
||||
@@ -596,7 +596,7 @@ static void imx_ocotp_fixup_cell_info(st
|
||||
cell->read_post_process = imx_ocotp_cell_pp;
|
||||
}
|
||||
|
||||
-struct nvmem_layout imx_ocotp_layout = {
|
||||
+static struct nvmem_layout imx_ocotp_layout = {
|
||||
.fixup_cell_info = imx_ocotp_fixup_cell_info,
|
||||
};
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 8a00fc606312c68b98add8fe8e6f7a013ce29e78 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Stein <alexander.stein@ew.tq-group.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:06 +0100
|
||||
Subject: [PATCH] nvmem: imx-ocotp: Reverse MAC addresses on all i.MX derivates
|
||||
|
||||
Not just i.MX8M, but all i.MX6/7 (and subtypes) need to reverse the
|
||||
MAC address read from fuses. Exceptions are i.MX6SLL and i.MX7ULP which
|
||||
do not support ethernet at all.
|
||||
|
||||
Fixes: d0221a780cbc ("nvmem: imx-ocotp: add support for post processing")
|
||||
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
|
||||
Tested-by: Richard Leitner <richard.leitner@skidata.com> # imx6q
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-3-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/imx-ocotp.c | 8 +-------
|
||||
1 file changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/imx-ocotp.c
|
||||
+++ b/drivers/nvmem/imx-ocotp.c
|
||||
@@ -97,7 +97,6 @@ struct ocotp_params {
|
||||
unsigned int bank_address_words;
|
||||
void (*set_timing)(struct ocotp_priv *priv);
|
||||
struct ocotp_ctrl_reg ctrl;
|
||||
- bool reverse_mac_address;
|
||||
};
|
||||
|
||||
static int imx_ocotp_wait_for_busy(struct ocotp_priv *priv, u32 flags)
|
||||
@@ -545,7 +544,6 @@ static const struct ocotp_params imx8mq_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mm_params = {
|
||||
@@ -553,7 +551,6 @@ static const struct ocotp_params imx8mm_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mn_params = {
|
||||
@@ -561,7 +558,6 @@ static const struct ocotp_params imx8mn_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mp_params = {
|
||||
@@ -569,7 +565,6 @@ static const struct ocotp_params imx8mp_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_8MP,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct of_device_id imx_ocotp_dt_ids[] = {
|
||||
@@ -624,8 +619,7 @@ static int imx_ocotp_probe(struct platfo
|
||||
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
||||
imx_ocotp_nvmem_config.dev = dev;
|
||||
imx_ocotp_nvmem_config.priv = priv;
|
||||
- if (priv->params->reverse_mac_address)
|
||||
- imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
||||
+ imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
||||
|
||||
priv->config = &imx_ocotp_nvmem_config;
|
||||
|
@ -1,5 +1,6 @@
|
||||
From 73bcd133c910bff3b6d3b3834d0d14be9444e90a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 6 Apr 2023 12:46:16 +0200
|
||||
Date: Sun, 11 Jun 2023 15:03:08 +0100
|
||||
Subject: [PATCH] nvmem: brcm_nvram: add .read_post_process() for MACs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
@ -9,6 +10,9 @@ Content-Transfer-Encoding: 8bit
|
||||
2. Calculate relative addresses based on index argument
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-5-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/Kconfig | 1 +
|
||||
drivers/nvmem/brcm_nvram.c | 28 ++++++++++++++++++++++++++++
|
@ -0,0 +1,166 @@
|
||||
From 8dc61364164e79e44c07fa2ac0a7b6939f00d5db Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:13 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Add clks and reg_read to rockchip_data
|
||||
|
||||
In preparation to support new Rockchip OTP memory devices with different
|
||||
clock configurations and register layout, extend rockchip_data struct
|
||||
with the related members: clks, num_clks, reg_read.
|
||||
|
||||
Additionally, to avoid managing redundant driver data, drop num_clks
|
||||
member from rockchip_otp struct and update all references to point to
|
||||
the equivalent member in rockchip_data.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-10-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 79 ++++++++++++++++++++++--------------
|
||||
1 file changed, 49 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -54,21 +54,19 @@
|
||||
|
||||
#define OTPC_TIMEOUT 10000
|
||||
|
||||
+struct rockchip_data {
|
||||
+ int size;
|
||||
+ const char * const *clks;
|
||||
+ int num_clks;
|
||||
+ nvmem_reg_read_t reg_read;
|
||||
+};
|
||||
+
|
||||
struct rockchip_otp {
|
||||
struct device *dev;
|
||||
void __iomem *base;
|
||||
- struct clk_bulk_data *clks;
|
||||
- int num_clks;
|
||||
+ struct clk_bulk_data *clks;
|
||||
struct reset_control *rst;
|
||||
-};
|
||||
-
|
||||
-/* list of required clocks */
|
||||
-static const char * const rockchip_otp_clocks[] = {
|
||||
- "otp", "apb_pclk", "phy",
|
||||
-};
|
||||
-
|
||||
-struct rockchip_data {
|
||||
- int size;
|
||||
+ const struct rockchip_data *data;
|
||||
};
|
||||
|
||||
static int rockchip_otp_reset(struct rockchip_otp *otp)
|
||||
@@ -132,29 +130,23 @@ static int rockchip_otp_ecc_enable(struc
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
- void *val, size_t bytes)
|
||||
+static int px30_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
{
|
||||
struct rockchip_otp *otp = context;
|
||||
u8 *buf = val;
|
||||
- int ret = 0;
|
||||
-
|
||||
- ret = clk_bulk_prepare_enable(otp->num_clks, otp->clks);
|
||||
- if (ret < 0) {
|
||||
- dev_err(otp->dev, "failed to prepare/enable clks\n");
|
||||
- return ret;
|
||||
- }
|
||||
+ int ret;
|
||||
|
||||
ret = rockchip_otp_reset(otp);
|
||||
if (ret) {
|
||||
dev_err(otp->dev, "failed to reset otp phy\n");
|
||||
- goto disable_clks;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
ret = rockchip_otp_ecc_enable(otp, false);
|
||||
if (ret < 0) {
|
||||
dev_err(otp->dev, "rockchip_otp_ecc_enable err\n");
|
||||
- goto disable_clks;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
|
||||
@@ -174,8 +166,28 @@ static int rockchip_otp_read(void *conte
|
||||
|
||||
read_end:
|
||||
writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
|
||||
-disable_clks:
|
||||
- clk_bulk_disable_unprepare(otp->num_clks, otp->clks);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
+{
|
||||
+ struct rockchip_otp *otp = context;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!otp->data || !otp->data->reg_read)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ ret = clk_bulk_prepare_enable(otp->data->num_clks, otp->clks);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(otp->dev, "failed to prepare/enable clks\n");
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = otp->data->reg_read(context, offset, val, bytes);
|
||||
+
|
||||
+ clk_bulk_disable_unprepare(otp->data->num_clks, otp->clks);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -189,8 +201,15 @@ static struct nvmem_config otp_config =
|
||||
.reg_read = rockchip_otp_read,
|
||||
};
|
||||
|
||||
+static const char * const px30_otp_clocks[] = {
|
||||
+ "otp", "apb_pclk", "phy",
|
||||
+};
|
||||
+
|
||||
static const struct rockchip_data px30_data = {
|
||||
.size = 0x40,
|
||||
+ .clks = px30_otp_clocks,
|
||||
+ .num_clks = ARRAY_SIZE(px30_otp_clocks),
|
||||
+ .reg_read = px30_otp_read,
|
||||
};
|
||||
|
||||
static const struct of_device_id rockchip_otp_match[] = {
|
||||
@@ -225,21 +244,21 @@ static int rockchip_otp_probe(struct pla
|
||||
if (!otp)
|
||||
return -ENOMEM;
|
||||
|
||||
+ otp->data = data;
|
||||
otp->dev = dev;
|
||||
otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(otp->base))
|
||||
return PTR_ERR(otp->base);
|
||||
|
||||
- otp->num_clks = ARRAY_SIZE(rockchip_otp_clocks);
|
||||
- otp->clks = devm_kcalloc(dev, otp->num_clks,
|
||||
- sizeof(*otp->clks), GFP_KERNEL);
|
||||
+ otp->clks = devm_kcalloc(dev, data->num_clks, sizeof(*otp->clks),
|
||||
+ GFP_KERNEL);
|
||||
if (!otp->clks)
|
||||
return -ENOMEM;
|
||||
|
||||
- for (i = 0; i < otp->num_clks; ++i)
|
||||
- otp->clks[i].id = rockchip_otp_clocks[i];
|
||||
+ for (i = 0; i < data->num_clks; ++i)
|
||||
+ otp->clks[i].id = data->clks[i];
|
||||
|
||||
- ret = devm_clk_bulk_get(dev, otp->num_clks, otp->clks);
|
||||
+ ret = devm_clk_bulk_get(dev, data->num_clks, otp->clks);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -0,0 +1,62 @@
|
||||
From 30fd21cfb1e64ef20035559a8246f5fbf682c40e Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:14 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Generalize rockchip_otp_wait_status()
|
||||
|
||||
In preparation to support additional Rockchip OTP memory devices with
|
||||
different register layout, generalize rockchip_otp_wait_status() to
|
||||
accept a new parameter for specifying the offset of the status register.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-11-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -90,18 +90,19 @@ static int rockchip_otp_reset(struct roc
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int rockchip_otp_wait_status(struct rockchip_otp *otp, u32 flag)
|
||||
+static int rockchip_otp_wait_status(struct rockchip_otp *otp,
|
||||
+ unsigned int reg, u32 flag)
|
||||
{
|
||||
u32 status = 0;
|
||||
int ret;
|
||||
|
||||
- ret = readl_poll_timeout_atomic(otp->base + OTPC_INT_STATUS, status,
|
||||
+ ret = readl_poll_timeout_atomic(otp->base + reg, status,
|
||||
(status & flag), 1, OTPC_TIMEOUT);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* clean int status */
|
||||
- writel(flag, otp->base + OTPC_INT_STATUS);
|
||||
+ writel(flag, otp->base + reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -123,7 +124,7 @@ static int rockchip_otp_ecc_enable(struc
|
||||
|
||||
writel(SBPI_ENABLE_MASK | SBPI_ENABLE, otp->base + OTPC_SBPI_CTRL);
|
||||
|
||||
- ret = rockchip_otp_wait_status(otp, OTPC_SBPI_DONE);
|
||||
+ ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_SBPI_DONE);
|
||||
if (ret < 0)
|
||||
dev_err(otp->dev, "timeout during ecc_enable\n");
|
||||
|
||||
@@ -156,7 +157,7 @@ static int px30_otp_read(void *context,
|
||||
otp->base + OTPC_USER_ADDR);
|
||||
writel(OTPC_USER_FSM_ENABLE | OTPC_USER_FSM_ENABLE_MASK,
|
||||
otp->base + OTPC_USER_ENABLE);
|
||||
- ret = rockchip_otp_wait_status(otp, OTPC_USER_DONE);
|
||||
+ ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_USER_DONE);
|
||||
if (ret < 0) {
|
||||
dev_err(otp->dev, "timeout during read setup\n");
|
||||
goto read_end;
|
@ -0,0 +1,31 @@
|
||||
From d325c9dd2b6e94040ca722ddcadcd6af358dd2be Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:15 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Use
|
||||
devm_reset_control_array_get_exclusive()
|
||||
|
||||
In preparation to support new Rockchip OTP memory devices having
|
||||
specific reset configurations, switch devm_reset_control_get() to
|
||||
devm_reset_control_array_get_exclusive().
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-12-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -263,7 +263,7 @@ static int rockchip_otp_probe(struct pla
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- otp->rst = devm_reset_control_get(dev, "phy");
|
||||
+ otp->rst = devm_reset_control_array_get_exclusive(dev);
|
||||
if (IS_ERR(otp->rst))
|
||||
return PTR_ERR(otp->rst);
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 912517345b867a69542dc9f5c2cc3e9d8beaccf5 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:16 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Improve probe error handling
|
||||
|
||||
Enhance error handling in the probe function by making use of
|
||||
dev_err_probe(), which ensures the error code is always printed, in
|
||||
addition to the specified error message.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-13-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 21 ++++++++++++---------
|
||||
1 file changed, 12 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -235,10 +235,8 @@ static int rockchip_otp_probe(struct pla
|
||||
int ret, i;
|
||||
|
||||
data = of_device_get_match_data(dev);
|
||||
- if (!data) {
|
||||
- dev_err(dev, "failed to get match data\n");
|
||||
- return -EINVAL;
|
||||
- }
|
||||
+ if (!data)
|
||||
+ return dev_err_probe(dev, -EINVAL, "failed to get match data\n");
|
||||
|
||||
otp = devm_kzalloc(&pdev->dev, sizeof(struct rockchip_otp),
|
||||
GFP_KERNEL);
|
||||
@@ -249,7 +247,8 @@ static int rockchip_otp_probe(struct pla
|
||||
otp->dev = dev;
|
||||
otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(otp->base))
|
||||
- return PTR_ERR(otp->base);
|
||||
+ return dev_err_probe(dev, PTR_ERR(otp->base),
|
||||
+ "failed to ioremap resource\n");
|
||||
|
||||
otp->clks = devm_kcalloc(dev, data->num_clks, sizeof(*otp->clks),
|
||||
GFP_KERNEL);
|
||||
@@ -261,18 +260,22 @@ static int rockchip_otp_probe(struct pla
|
||||
|
||||
ret = devm_clk_bulk_get(dev, data->num_clks, otp->clks);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ return dev_err_probe(dev, ret, "failed to get clocks\n");
|
||||
|
||||
otp->rst = devm_reset_control_array_get_exclusive(dev);
|
||||
if (IS_ERR(otp->rst))
|
||||
- return PTR_ERR(otp->rst);
|
||||
+ return dev_err_probe(dev, PTR_ERR(otp->rst),
|
||||
+ "failed to get resets\n");
|
||||
|
||||
otp_config.size = data->size;
|
||||
otp_config.priv = otp;
|
||||
otp_config.dev = dev;
|
||||
- nvmem = devm_nvmem_register(dev, &otp_config);
|
||||
|
||||
- return PTR_ERR_OR_ZERO(nvmem);
|
||||
+ nvmem = devm_nvmem_register(dev, &otp_config);
|
||||
+ if (IS_ERR(nvmem))
|
||||
+ return dev_err_probe(dev, PTR_ERR(nvmem),
|
||||
+ "failed to register nvmem device\n");
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver rockchip_otp_driver = {
|
@ -0,0 +1,129 @@
|
||||
From 8ab099fafbbc8c9607c399d21a774784a6cb8b45 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:17 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Add support for RK3588
|
||||
|
||||
Add support for the OTP memory device found on the Rockchip RK3588 SoC.
|
||||
|
||||
While here, remove the unnecessary 'void *' casts in the OF device ID
|
||||
table.
|
||||
|
||||
Co-developed-by: Finley Xiao <finley.xiao@rock-chips.com>
|
||||
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-14-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 78 +++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 76 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -54,6 +54,19 @@
|
||||
|
||||
#define OTPC_TIMEOUT 10000
|
||||
|
||||
+/* RK3588 Register */
|
||||
+#define RK3588_OTPC_AUTO_CTRL 0x04
|
||||
+#define RK3588_OTPC_AUTO_EN 0x08
|
||||
+#define RK3588_OTPC_INT_ST 0x84
|
||||
+#define RK3588_OTPC_DOUT0 0x20
|
||||
+#define RK3588_NO_SECURE_OFFSET 0x300
|
||||
+#define RK3588_NBYTES 4
|
||||
+#define RK3588_BURST_NUM 1
|
||||
+#define RK3588_BURST_SHIFT 8
|
||||
+#define RK3588_ADDR_SHIFT 16
|
||||
+#define RK3588_AUTO_EN BIT(0)
|
||||
+#define RK3588_RD_DONE BIT(1)
|
||||
+
|
||||
struct rockchip_data {
|
||||
int size;
|
||||
const char * const *clks;
|
||||
@@ -171,6 +184,52 @@ read_end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int rk3588_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
+{
|
||||
+ struct rockchip_otp *otp = context;
|
||||
+ unsigned int addr_start, addr_end, addr_len;
|
||||
+ int ret, i = 0;
|
||||
+ u32 data;
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ addr_start = round_down(offset, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
+ addr_end = round_up(offset + bytes, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
+ addr_len = addr_end - addr_start;
|
||||
+ addr_start += RK3588_NO_SECURE_OFFSET;
|
||||
+
|
||||
+ buf = kzalloc(array_size(addr_len, RK3588_NBYTES), GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ while (addr_len--) {
|
||||
+ writel((addr_start << RK3588_ADDR_SHIFT) |
|
||||
+ (RK3588_BURST_NUM << RK3588_BURST_SHIFT),
|
||||
+ otp->base + RK3588_OTPC_AUTO_CTRL);
|
||||
+ writel(RK3588_AUTO_EN, otp->base + RK3588_OTPC_AUTO_EN);
|
||||
+
|
||||
+ ret = rockchip_otp_wait_status(otp, RK3588_OTPC_INT_ST,
|
||||
+ RK3588_RD_DONE);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(otp->dev, "timeout during read setup\n");
|
||||
+ goto read_end;
|
||||
+ }
|
||||
+
|
||||
+ data = readl(otp->base + RK3588_OTPC_DOUT0);
|
||||
+ memcpy(&buf[i], &data, RK3588_NBYTES);
|
||||
+
|
||||
+ i += RK3588_NBYTES;
|
||||
+ addr_start++;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(val, buf + offset % RK3588_NBYTES, bytes);
|
||||
+
|
||||
+read_end:
|
||||
+ kfree(buf);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
void *val, size_t bytes)
|
||||
{
|
||||
@@ -213,14 +272,29 @@ static const struct rockchip_data px30_d
|
||||
.reg_read = px30_otp_read,
|
||||
};
|
||||
|
||||
+static const char * const rk3588_otp_clocks[] = {
|
||||
+ "otp", "apb_pclk", "phy", "arb",
|
||||
+};
|
||||
+
|
||||
+static const struct rockchip_data rk3588_data = {
|
||||
+ .size = 0x400,
|
||||
+ .clks = rk3588_otp_clocks,
|
||||
+ .num_clks = ARRAY_SIZE(rk3588_otp_clocks),
|
||||
+ .reg_read = rk3588_otp_read,
|
||||
+};
|
||||
+
|
||||
static const struct of_device_id rockchip_otp_match[] = {
|
||||
{
|
||||
.compatible = "rockchip,px30-otp",
|
||||
- .data = (void *)&px30_data,
|
||||
+ .data = &px30_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,rk3308-otp",
|
||||
- .data = (void *)&px30_data,
|
||||
+ .data = &px30_data,
|
||||
+ },
|
||||
+ {
|
||||
+ .compatible = "rockchip,rk3588-otp",
|
||||
+ .data = &rk3588_data,
|
||||
},
|
||||
{ /* sentinel */ },
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
From 9734408969e978a1c0d5d752be63dd638288e374 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Simek <michal.simek@amd.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:23 +0100
|
||||
Subject: [PATCH] nvmem: zynqmp: Switch @xilinx.com emails to @amd.com
|
||||
|
||||
@xilinx.com is still working but better to switch to new amd.com after
|
||||
AMD/Xilinx acquisition.
|
||||
|
||||
Signed-off-by: Michal Simek <michal.simek@amd.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-20-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/zynqmp_nvmem.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/zynqmp_nvmem.c
|
||||
+++ b/drivers/nvmem/zynqmp_nvmem.c
|
||||
@@ -76,6 +76,6 @@ static struct platform_driver zynqmp_nvm
|
||||
|
||||
module_platform_driver(zynqmp_nvmem_driver);
|
||||
|
||||
-MODULE_AUTHOR("Michal Simek <michal.simek@xilinx.com>, Nava kishore Manne <navam@xilinx.com>");
|
||||
+MODULE_AUTHOR("Michal Simek <michal.simek@amd.com>, Nava kishore Manne <nava.kishore.manne@amd.com>");
|
||||
MODULE_DESCRIPTION("ZynqMP NVMEM driver");
|
||||
MODULE_LICENSE("GPL");
|
@ -0,0 +1,230 @@
|
||||
From 22e9e6fcfb5042cb6d6c7874c459b034800092f1 Mon Sep 17 00:00:00 2001
|
||||
From: Peng Fan <peng.fan@nxp.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:25 +0100
|
||||
Subject: [PATCH] nvmem: imx: support i.MX93 OCOTP
|
||||
|
||||
Add i.MX93 OCOTP support. i.MX93 OCOTP has two parts: Fuse shadow
|
||||
block(fsb) and fuse managed by ELE. The FSB part could be directly
|
||||
accessed with MMIO, the ELE could only be accessed with ELE API.
|
||||
|
||||
Currently the ELE API is not ready, so NULL function callback is used,
|
||||
but it was tested with downstream ELE API.
|
||||
|
||||
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-22-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/Kconfig | 9 ++
|
||||
drivers/nvmem/Makefile | 2 +
|
||||
drivers/nvmem/imx-ocotp-ele.c | 175 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 186 insertions(+)
|
||||
create mode 100644 drivers/nvmem/imx-ocotp-ele.c
|
||||
|
||||
--- a/drivers/nvmem/Kconfig
|
||||
+++ b/drivers/nvmem/Kconfig
|
||||
@@ -83,6 +83,15 @@ config NVMEM_IMX_OCOTP
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called nvmem-imx-ocotp.
|
||||
|
||||
+config NVMEM_IMX_OCOTP_ELE
|
||||
+ tristate "i.MX On-Chip OTP Controller support"
|
||||
+ depends on ARCH_MXC || COMPILE_TEST
|
||||
+ depends on HAS_IOMEM
|
||||
+ depends on OF
|
||||
+ help
|
||||
+ This is a driver for the On-Chip OTP Controller (OCOTP)
|
||||
+ available on i.MX SoCs which has ELE.
|
||||
+
|
||||
config NVMEM_IMX_OCOTP_SCU
|
||||
tristate "i.MX8 SCU On-Chip OTP Controller support"
|
||||
depends on IMX_SCU
|
||||
--- a/drivers/nvmem/Makefile
|
||||
+++ b/drivers/nvmem/Makefile
|
||||
@@ -18,6 +18,8 @@ obj-$(CONFIG_NVMEM_IMX_IIM) += nvmem-im
|
||||
nvmem-imx-iim-y := imx-iim.o
|
||||
obj-$(CONFIG_NVMEM_IMX_OCOTP) += nvmem-imx-ocotp.o
|
||||
nvmem-imx-ocotp-y := imx-ocotp.o
|
||||
+obj-$(CONFIG_NVMEM_IMX_OCOTP_ELE) += nvmem-imx-ocotp-ele.o
|
||||
+nvmem-imx-ocotp-ele-y := imx-ocotp-ele.o
|
||||
obj-$(CONFIG_NVMEM_IMX_OCOTP_SCU) += nvmem-imx-ocotp-scu.o
|
||||
nvmem-imx-ocotp-scu-y := imx-ocotp-scu.o
|
||||
obj-$(CONFIG_NVMEM_JZ4780_EFUSE) += nvmem_jz4780_efuse.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/nvmem/imx-ocotp-ele.c
|
||||
@@ -0,0 +1,175 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * i.MX9 OCOTP fusebox driver
|
||||
+ *
|
||||
+ * Copyright 2023 NXP
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/nvmem-provider.h>
|
||||
+#include <linux/of_device.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+
|
||||
+enum fuse_type {
|
||||
+ FUSE_FSB = 1,
|
||||
+ FUSE_ELE = 2,
|
||||
+ FUSE_INVALID = -1
|
||||
+};
|
||||
+
|
||||
+struct ocotp_map_entry {
|
||||
+ u32 start; /* start word */
|
||||
+ u32 num; /* num words */
|
||||
+ enum fuse_type type;
|
||||
+};
|
||||
+
|
||||
+struct ocotp_devtype_data {
|
||||
+ u32 reg_off;
|
||||
+ char *name;
|
||||
+ u32 size;
|
||||
+ u32 num_entry;
|
||||
+ u32 flag;
|
||||
+ nvmem_reg_read_t reg_read;
|
||||
+ struct ocotp_map_entry entry[];
|
||||
+};
|
||||
+
|
||||
+struct imx_ocotp_priv {
|
||||
+ struct device *dev;
|
||||
+ void __iomem *base;
|
||||
+ struct nvmem_config config;
|
||||
+ struct mutex lock;
|
||||
+ const struct ocotp_devtype_data *data;
|
||||
+};
|
||||
+
|
||||
+static enum fuse_type imx_ocotp_fuse_type(void *context, u32 index)
|
||||
+{
|
||||
+ struct imx_ocotp_priv *priv = context;
|
||||
+ const struct ocotp_devtype_data *data = priv->data;
|
||||
+ u32 start, end;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < data->num_entry; i++) {
|
||||
+ start = data->entry[i].start;
|
||||
+ end = data->entry[i].start + data->entry[i].num;
|
||||
+
|
||||
+ if (index >= start && index < end)
|
||||
+ return data->entry[i].type;
|
||||
+ }
|
||||
+
|
||||
+ return FUSE_INVALID;
|
||||
+}
|
||||
+
|
||||
+static int imx_ocotp_reg_read(void *context, unsigned int offset, void *val, size_t bytes)
|
||||
+{
|
||||
+ struct imx_ocotp_priv *priv = context;
|
||||
+ void __iomem *reg = priv->base + priv->data->reg_off;
|
||||
+ u32 count, index, num_bytes;
|
||||
+ enum fuse_type type;
|
||||
+ u32 *buf;
|
||||
+ void *p;
|
||||
+ int i;
|
||||
+
|
||||
+ index = offset;
|
||||
+ num_bytes = round_up(bytes, 4);
|
||||
+ count = num_bytes >> 2;
|
||||
+
|
||||
+ if (count > ((priv->data->size >> 2) - index))
|
||||
+ count = (priv->data->size >> 2) - index;
|
||||
+
|
||||
+ p = kzalloc(num_bytes, GFP_KERNEL);
|
||||
+ if (!p)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ mutex_lock(&priv->lock);
|
||||
+
|
||||
+ buf = p;
|
||||
+
|
||||
+ for (i = index; i < (index + count); i++) {
|
||||
+ type = imx_ocotp_fuse_type(context, i);
|
||||
+ if (type == FUSE_INVALID || type == FUSE_ELE) {
|
||||
+ *buf++ = 0;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ *buf++ = readl_relaxed(reg + (i << 2));
|
||||
+ }
|
||||
+
|
||||
+ memcpy(val, (u8 *)p, bytes);
|
||||
+
|
||||
+ mutex_unlock(&priv->lock);
|
||||
+
|
||||
+ kfree(p);
|
||||
+
|
||||
+ return 0;
|
||||
+};
|
||||
+
|
||||
+static int imx_ele_ocotp_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct imx_ocotp_priv *priv;
|
||||
+ struct nvmem_device *nvmem;
|
||||
+
|
||||
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||
+ if (!priv)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ priv->data = of_device_get_match_data(dev);
|
||||
+
|
||||
+ priv->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
+ if (IS_ERR(priv->base))
|
||||
+ return PTR_ERR(priv->base);
|
||||
+
|
||||
+ priv->config.dev = dev;
|
||||
+ priv->config.name = "ELE-OCOTP";
|
||||
+ priv->config.id = NVMEM_DEVID_AUTO;
|
||||
+ priv->config.owner = THIS_MODULE;
|
||||
+ priv->config.size = priv->data->size;
|
||||
+ priv->config.reg_read = priv->data->reg_read;
|
||||
+ priv->config.word_size = 4;
|
||||
+ priv->config.stride = 1;
|
||||
+ priv->config.priv = priv;
|
||||
+ priv->config.read_only = true;
|
||||
+ mutex_init(&priv->lock);
|
||||
+
|
||||
+ nvmem = devm_nvmem_register(dev, &priv->config);
|
||||
+ if (IS_ERR(nvmem))
|
||||
+ return PTR_ERR(nvmem);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct ocotp_devtype_data imx93_ocotp_data = {
|
||||
+ .reg_off = 0x8000,
|
||||
+ .reg_read = imx_ocotp_reg_read,
|
||||
+ .size = 2048,
|
||||
+ .num_entry = 6,
|
||||
+ .entry = {
|
||||
+ { 0, 52, FUSE_FSB },
|
||||
+ { 63, 1, FUSE_ELE},
|
||||
+ { 128, 16, FUSE_ELE },
|
||||
+ { 182, 1, FUSE_ELE },
|
||||
+ { 188, 1, FUSE_ELE },
|
||||
+ { 312, 200, FUSE_FSB }
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static const struct of_device_id imx_ele_ocotp_dt_ids[] = {
|
||||
+ { .compatible = "fsl,imx93-ocotp", .data = &imx93_ocotp_data, },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, imx_ele_ocotp_dt_ids);
|
||||
+
|
||||
+static struct platform_driver imx_ele_ocotp_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "imx_ele_ocotp",
|
||||
+ .of_match_table = imx_ele_ocotp_dt_ids,
|
||||
+ },
|
||||
+ .probe = imx_ele_ocotp_probe,
|
||||
+};
|
||||
+module_platform_driver(imx_ele_ocotp_driver);
|
||||
+
|
||||
+MODULE_DESCRIPTION("i.MX OCOTP/ELE driver");
|
||||
+MODULE_AUTHOR("Peng Fan <peng.fan@nxp.com>");
|
||||
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,96 @@
|
||||
From 27f699e578b1a72df89dfa3bc42e093a01dc8d10 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 11 Jun 2023 15:03:29 +0100
|
||||
Subject: [PATCH] nvmem: core: add support for fixed cells *layout*
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This adds support for the "fixed-layout" NVMEM layout binding. It allows
|
||||
defining NVMEM cells in a layout DT node named "nvmem-layout".
|
||||
|
||||
While NVMEM subsystem supports layout drivers it has been discussed that
|
||||
"fixed-layout" may actually be supperted internally. It's because:
|
||||
1. It's a very basic layout
|
||||
2. It allows sharing code with legacy syntax parsing
|
||||
3. It's safer for soc_device_match() due to -EPROBE_DEFER
|
||||
4. This will make the syntax transition easier
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-26-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 32 +++++++++++++++++++++++++++++---
|
||||
1 file changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -696,7 +696,7 @@ static int nvmem_validate_keepouts(struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
|
||||
+static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
|
||||
{
|
||||
struct nvmem_layout *layout = nvmem->layout;
|
||||
struct device *dev = &nvmem->dev;
|
||||
@@ -704,7 +704,7 @@ static int nvmem_add_cells_from_of(struc
|
||||
const __be32 *addr;
|
||||
int len, ret;
|
||||
|
||||
- for_each_child_of_node(dev->of_node, child) {
|
||||
+ for_each_child_of_node(np, child) {
|
||||
struct nvmem_cell_info info = {0};
|
||||
|
||||
addr = of_get_property(child, "reg", &len);
|
||||
@@ -742,6 +742,28 @@ static int nvmem_add_cells_from_of(struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int nvmem_add_cells_from_legacy_of(struct nvmem_device *nvmem)
|
||||
+{
|
||||
+ return nvmem_add_cells_from_dt(nvmem, nvmem->dev.of_node);
|
||||
+}
|
||||
+
|
||||
+static int nvmem_add_cells_from_fixed_layout(struct nvmem_device *nvmem)
|
||||
+{
|
||||
+ struct device_node *layout_np;
|
||||
+ int err = 0;
|
||||
+
|
||||
+ layout_np = of_nvmem_layout_get_container(nvmem);
|
||||
+ if (!layout_np)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (of_device_is_compatible(layout_np, "fixed-layout"))
|
||||
+ err = nvmem_add_cells_from_dt(nvmem, layout_np);
|
||||
+
|
||||
+ of_node_put(layout_np);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner)
|
||||
{
|
||||
layout->owner = owner;
|
||||
@@ -972,7 +994,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
- rval = nvmem_add_cells_from_of(nvmem);
|
||||
+ rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
@@ -982,6 +1004,10 @@ struct nvmem_device *nvmem_register(cons
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
+ rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||
+ if (rval)
|
||||
+ goto err_remove_cells;
|
||||
+
|
||||
rval = nvmem_add_cells_from_layout(nvmem);
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
@ -1,348 +0,0 @@
|
||||
From f07788079f515ca4a681c5f595bdad19cfbd7b1d Mon Sep 17 00:00:00 2001
|
||||
From: Arnd Bergmann <arnd@arndb.de>
|
||||
Date: Sat, 3 Dec 2022 11:54:25 +0100
|
||||
Subject: [PATCH] ata: ahci: fix enum constants for gcc-13
|
||||
|
||||
gcc-13 slightly changes the type of constant expressions that are defined
|
||||
in an enum, which triggers a compile time sanity check in libata:
|
||||
|
||||
linux/drivers/ata/libahci.c: In function 'ahci_led_store':
|
||||
linux/include/linux/compiler_types.h:357:45: error: call to '__compiletime_assert_302' declared with attribute error: BUILD_BUG_ON failed: sizeof(_s) > sizeof(long)
|
||||
357 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
|
||||
|
||||
The new behavior is that sizeof() returns the same value for the
|
||||
constant as it does for the enum type, which is generally more sensible
|
||||
and consistent.
|
||||
|
||||
The problem in libata is that it contains a single enum definition for
|
||||
lots of unrelated constants, some of which are large positive (unsigned)
|
||||
integers like 0xffffffff, while others like (1<<31) are interpreted as
|
||||
negative integers, and this forces the enum type to become 64 bit wide
|
||||
even though most constants would still fit into a signed 32-bit 'int'.
|
||||
|
||||
Fix this by changing the entire enum definition to use BIT(x) in place
|
||||
of (1<<x), which results in all values being seen as 'unsigned' and
|
||||
fitting into an unsigned 32-bit type.
|
||||
|
||||
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107917
|
||||
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107405
|
||||
Reported-by: Luis Machado <luis.machado@arm.com>
|
||||
Cc: linux-ide@vger.kernel.org
|
||||
Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Cc: Randy Dunlap <rdunlap@infradead.org>
|
||||
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
||||
Tested-by: Luis Machado <luis.machado@arm.com>
|
||||
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
|
||||
---
|
||||
drivers/ata/ahci.h | 245 +++++++++++++++++++++++----------------------
|
||||
1 file changed, 123 insertions(+), 122 deletions(-)
|
||||
|
||||
--- a/drivers/ata/ahci.h
|
||||
+++ b/drivers/ata/ahci.h
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/libata.h>
|
||||
#include <linux/phy/phy.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
+#include <linux/bits.h>
|
||||
|
||||
/* Enclosure Management Control */
|
||||
#define EM_CTRL_MSG_TYPE 0x000f0000
|
||||
@@ -54,12 +55,12 @@ enum {
|
||||
AHCI_PORT_PRIV_FBS_DMA_SZ = AHCI_CMD_SLOT_SZ +
|
||||
AHCI_CMD_TBL_AR_SZ +
|
||||
(AHCI_RX_FIS_SZ * 16),
|
||||
- AHCI_IRQ_ON_SG = (1 << 31),
|
||||
- AHCI_CMD_ATAPI = (1 << 5),
|
||||
- AHCI_CMD_WRITE = (1 << 6),
|
||||
- AHCI_CMD_PREFETCH = (1 << 7),
|
||||
- AHCI_CMD_RESET = (1 << 8),
|
||||
- AHCI_CMD_CLR_BUSY = (1 << 10),
|
||||
+ AHCI_IRQ_ON_SG = BIT(31),
|
||||
+ AHCI_CMD_ATAPI = BIT(5),
|
||||
+ AHCI_CMD_WRITE = BIT(6),
|
||||
+ AHCI_CMD_PREFETCH = BIT(7),
|
||||
+ AHCI_CMD_RESET = BIT(8),
|
||||
+ AHCI_CMD_CLR_BUSY = BIT(10),
|
||||
|
||||
RX_FIS_PIO_SETUP = 0x20, /* offset of PIO Setup FIS data */
|
||||
RX_FIS_D2H_REG = 0x40, /* offset of D2H Register FIS data */
|
||||
@@ -77,37 +78,37 @@ enum {
|
||||
HOST_CAP2 = 0x24, /* host capabilities, extended */
|
||||
|
||||
/* HOST_CTL bits */
|
||||
- HOST_RESET = (1 << 0), /* reset controller; self-clear */
|
||||
- HOST_IRQ_EN = (1 << 1), /* global IRQ enable */
|
||||
- HOST_MRSM = (1 << 2), /* MSI Revert to Single Message */
|
||||
- HOST_AHCI_EN = (1 << 31), /* AHCI enabled */
|
||||
+ HOST_RESET = BIT(0), /* reset controller; self-clear */
|
||||
+ HOST_IRQ_EN = BIT(1), /* global IRQ enable */
|
||||
+ HOST_MRSM = BIT(2), /* MSI Revert to Single Message */
|
||||
+ HOST_AHCI_EN = BIT(31), /* AHCI enabled */
|
||||
|
||||
/* HOST_CAP bits */
|
||||
- HOST_CAP_SXS = (1 << 5), /* Supports External SATA */
|
||||
- HOST_CAP_EMS = (1 << 6), /* Enclosure Management support */
|
||||
- HOST_CAP_CCC = (1 << 7), /* Command Completion Coalescing */
|
||||
- HOST_CAP_PART = (1 << 13), /* Partial state capable */
|
||||
- HOST_CAP_SSC = (1 << 14), /* Slumber state capable */
|
||||
- HOST_CAP_PIO_MULTI = (1 << 15), /* PIO multiple DRQ support */
|
||||
- HOST_CAP_FBS = (1 << 16), /* FIS-based switching support */
|
||||
- HOST_CAP_PMP = (1 << 17), /* Port Multiplier support */
|
||||
- HOST_CAP_ONLY = (1 << 18), /* Supports AHCI mode only */
|
||||
- HOST_CAP_CLO = (1 << 24), /* Command List Override support */
|
||||
- HOST_CAP_LED = (1 << 25), /* Supports activity LED */
|
||||
- HOST_CAP_ALPM = (1 << 26), /* Aggressive Link PM support */
|
||||
- HOST_CAP_SSS = (1 << 27), /* Staggered Spin-up */
|
||||
- HOST_CAP_MPS = (1 << 28), /* Mechanical presence switch */
|
||||
- HOST_CAP_SNTF = (1 << 29), /* SNotification register */
|
||||
- HOST_CAP_NCQ = (1 << 30), /* Native Command Queueing */
|
||||
- HOST_CAP_64 = (1 << 31), /* PCI DAC (64-bit DMA) support */
|
||||
+ HOST_CAP_SXS = BIT(5), /* Supports External SATA */
|
||||
+ HOST_CAP_EMS = BIT(6), /* Enclosure Management support */
|
||||
+ HOST_CAP_CCC = BIT(7), /* Command Completion Coalescing */
|
||||
+ HOST_CAP_PART = BIT(13), /* Partial state capable */
|
||||
+ HOST_CAP_SSC = BIT(14), /* Slumber state capable */
|
||||
+ HOST_CAP_PIO_MULTI = BIT(15), /* PIO multiple DRQ support */
|
||||
+ HOST_CAP_FBS = BIT(16), /* FIS-based switching support */
|
||||
+ HOST_CAP_PMP = BIT(17), /* Port Multiplier support */
|
||||
+ HOST_CAP_ONLY = BIT(18), /* Supports AHCI mode only */
|
||||
+ HOST_CAP_CLO = BIT(24), /* Command List Override support */
|
||||
+ HOST_CAP_LED = BIT(25), /* Supports activity LED */
|
||||
+ HOST_CAP_ALPM = BIT(26), /* Aggressive Link PM support */
|
||||
+ HOST_CAP_SSS = BIT(27), /* Staggered Spin-up */
|
||||
+ HOST_CAP_MPS = BIT(28), /* Mechanical presence switch */
|
||||
+ HOST_CAP_SNTF = BIT(29), /* SNotification register */
|
||||
+ HOST_CAP_NCQ = BIT(30), /* Native Command Queueing */
|
||||
+ HOST_CAP_64 = BIT(31), /* PCI DAC (64-bit DMA) support */
|
||||
|
||||
/* HOST_CAP2 bits */
|
||||
- HOST_CAP2_BOH = (1 << 0), /* BIOS/OS handoff supported */
|
||||
- HOST_CAP2_NVMHCI = (1 << 1), /* NVMHCI supported */
|
||||
- HOST_CAP2_APST = (1 << 2), /* Automatic partial to slumber */
|
||||
- HOST_CAP2_SDS = (1 << 3), /* Support device sleep */
|
||||
- HOST_CAP2_SADM = (1 << 4), /* Support aggressive DevSlp */
|
||||
- HOST_CAP2_DESO = (1 << 5), /* DevSlp from slumber only */
|
||||
+ HOST_CAP2_BOH = BIT(0), /* BIOS/OS handoff supported */
|
||||
+ HOST_CAP2_NVMHCI = BIT(1), /* NVMHCI supported */
|
||||
+ HOST_CAP2_APST = BIT(2), /* Automatic partial to slumber */
|
||||
+ HOST_CAP2_SDS = BIT(3), /* Support device sleep */
|
||||
+ HOST_CAP2_SADM = BIT(4), /* Support aggressive DevSlp */
|
||||
+ HOST_CAP2_DESO = BIT(5), /* DevSlp from slumber only */
|
||||
|
||||
/* registers for each SATA port */
|
||||
PORT_LST_ADDR = 0x00, /* command list DMA addr */
|
||||
@@ -129,24 +130,24 @@ enum {
|
||||
PORT_DEVSLP = 0x44, /* device sleep */
|
||||
|
||||
/* PORT_IRQ_{STAT,MASK} bits */
|
||||
- PORT_IRQ_COLD_PRES = (1 << 31), /* cold presence detect */
|
||||
- PORT_IRQ_TF_ERR = (1 << 30), /* task file error */
|
||||
- PORT_IRQ_HBUS_ERR = (1 << 29), /* host bus fatal error */
|
||||
- PORT_IRQ_HBUS_DATA_ERR = (1 << 28), /* host bus data error */
|
||||
- PORT_IRQ_IF_ERR = (1 << 27), /* interface fatal error */
|
||||
- PORT_IRQ_IF_NONFATAL = (1 << 26), /* interface non-fatal error */
|
||||
- PORT_IRQ_OVERFLOW = (1 << 24), /* xfer exhausted available S/G */
|
||||
- PORT_IRQ_BAD_PMP = (1 << 23), /* incorrect port multiplier */
|
||||
-
|
||||
- PORT_IRQ_PHYRDY = (1 << 22), /* PhyRdy changed */
|
||||
- PORT_IRQ_DEV_ILCK = (1 << 7), /* device interlock */
|
||||
- PORT_IRQ_CONNECT = (1 << 6), /* port connect change status */
|
||||
- PORT_IRQ_SG_DONE = (1 << 5), /* descriptor processed */
|
||||
- PORT_IRQ_UNK_FIS = (1 << 4), /* unknown FIS rx'd */
|
||||
- PORT_IRQ_SDB_FIS = (1 << 3), /* Set Device Bits FIS rx'd */
|
||||
- PORT_IRQ_DMAS_FIS = (1 << 2), /* DMA Setup FIS rx'd */
|
||||
- PORT_IRQ_PIOS_FIS = (1 << 1), /* PIO Setup FIS rx'd */
|
||||
- PORT_IRQ_D2H_REG_FIS = (1 << 0), /* D2H Register FIS rx'd */
|
||||
+ PORT_IRQ_COLD_PRES = BIT(31), /* cold presence detect */
|
||||
+ PORT_IRQ_TF_ERR = BIT(30), /* task file error */
|
||||
+ PORT_IRQ_HBUS_ERR = BIT(29), /* host bus fatal error */
|
||||
+ PORT_IRQ_HBUS_DATA_ERR = BIT(28), /* host bus data error */
|
||||
+ PORT_IRQ_IF_ERR = BIT(27), /* interface fatal error */
|
||||
+ PORT_IRQ_IF_NONFATAL = BIT(26), /* interface non-fatal error */
|
||||
+ PORT_IRQ_OVERFLOW = BIT(24), /* xfer exhausted available S/G */
|
||||
+ PORT_IRQ_BAD_PMP = BIT(23), /* incorrect port multiplier */
|
||||
+
|
||||
+ PORT_IRQ_PHYRDY = BIT(22), /* PhyRdy changed */
|
||||
+ PORT_IRQ_DEV_ILCK = BIT(7), /* device interlock */
|
||||
+ PORT_IRQ_CONNECT = BIT(6), /* port connect change status */
|
||||
+ PORT_IRQ_SG_DONE = BIT(5), /* descriptor processed */
|
||||
+ PORT_IRQ_UNK_FIS = BIT(4), /* unknown FIS rx'd */
|
||||
+ PORT_IRQ_SDB_FIS = BIT(3), /* Set Device Bits FIS rx'd */
|
||||
+ PORT_IRQ_DMAS_FIS = BIT(2), /* DMA Setup FIS rx'd */
|
||||
+ PORT_IRQ_PIOS_FIS = BIT(1), /* PIO Setup FIS rx'd */
|
||||
+ PORT_IRQ_D2H_REG_FIS = BIT(0), /* D2H Register FIS rx'd */
|
||||
|
||||
PORT_IRQ_FREEZE = PORT_IRQ_HBUS_ERR |
|
||||
PORT_IRQ_IF_ERR |
|
||||
@@ -162,34 +163,34 @@ enum {
|
||||
PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS,
|
||||
|
||||
/* PORT_CMD bits */
|
||||
- PORT_CMD_ASP = (1 << 27), /* Aggressive Slumber/Partial */
|
||||
- PORT_CMD_ALPE = (1 << 26), /* Aggressive Link PM enable */
|
||||
- PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */
|
||||
- PORT_CMD_FBSCP = (1 << 22), /* FBS Capable Port */
|
||||
- PORT_CMD_ESP = (1 << 21), /* External Sata Port */
|
||||
- PORT_CMD_HPCP = (1 << 18), /* HotPlug Capable Port */
|
||||
- PORT_CMD_PMP = (1 << 17), /* PMP attached */
|
||||
- PORT_CMD_LIST_ON = (1 << 15), /* cmd list DMA engine running */
|
||||
- PORT_CMD_FIS_ON = (1 << 14), /* FIS DMA engine running */
|
||||
- PORT_CMD_FIS_RX = (1 << 4), /* Enable FIS receive DMA engine */
|
||||
- PORT_CMD_CLO = (1 << 3), /* Command list override */
|
||||
- PORT_CMD_POWER_ON = (1 << 2), /* Power up device */
|
||||
- PORT_CMD_SPIN_UP = (1 << 1), /* Spin up device */
|
||||
- PORT_CMD_START = (1 << 0), /* Enable port DMA engine */
|
||||
-
|
||||
- PORT_CMD_ICC_MASK = (0xf << 28), /* i/f ICC state mask */
|
||||
- PORT_CMD_ICC_ACTIVE = (0x1 << 28), /* Put i/f in active state */
|
||||
- PORT_CMD_ICC_PARTIAL = (0x2 << 28), /* Put i/f in partial state */
|
||||
- PORT_CMD_ICC_SLUMBER = (0x6 << 28), /* Put i/f in slumber state */
|
||||
+ PORT_CMD_ASP = BIT(27), /* Aggressive Slumber/Partial */
|
||||
+ PORT_CMD_ALPE = BIT(26), /* Aggressive Link PM enable */
|
||||
+ PORT_CMD_ATAPI = BIT(24), /* Device is ATAPI */
|
||||
+ PORT_CMD_FBSCP = BIT(22), /* FBS Capable Port */
|
||||
+ PORT_CMD_ESP = BIT(21), /* External Sata Port */
|
||||
+ PORT_CMD_HPCP = BIT(18), /* HotPlug Capable Port */
|
||||
+ PORT_CMD_PMP = BIT(17), /* PMP attached */
|
||||
+ PORT_CMD_LIST_ON = BIT(15), /* cmd list DMA engine running */
|
||||
+ PORT_CMD_FIS_ON = BIT(14), /* FIS DMA engine running */
|
||||
+ PORT_CMD_FIS_RX = BIT(4), /* Enable FIS receive DMA engine */
|
||||
+ PORT_CMD_CLO = BIT(3), /* Command list override */
|
||||
+ PORT_CMD_POWER_ON = BIT(2), /* Power up device */
|
||||
+ PORT_CMD_SPIN_UP = BIT(1), /* Spin up device */
|
||||
+ PORT_CMD_START = BIT(0), /* Enable port DMA engine */
|
||||
+
|
||||
+ PORT_CMD_ICC_MASK = (0xfu << 28), /* i/f ICC state mask */
|
||||
+ PORT_CMD_ICC_ACTIVE = (0x1u << 28), /* Put i/f in active state */
|
||||
+ PORT_CMD_ICC_PARTIAL = (0x2u << 28), /* Put i/f in partial state */
|
||||
+ PORT_CMD_ICC_SLUMBER = (0x6u << 28), /* Put i/f in slumber state */
|
||||
|
||||
/* PORT_FBS bits */
|
||||
PORT_FBS_DWE_OFFSET = 16, /* FBS device with error offset */
|
||||
PORT_FBS_ADO_OFFSET = 12, /* FBS active dev optimization offset */
|
||||
PORT_FBS_DEV_OFFSET = 8, /* FBS device to issue offset */
|
||||
PORT_FBS_DEV_MASK = (0xf << PORT_FBS_DEV_OFFSET), /* FBS.DEV */
|
||||
- PORT_FBS_SDE = (1 << 2), /* FBS single device error */
|
||||
- PORT_FBS_DEC = (1 << 1), /* FBS device error clear */
|
||||
- PORT_FBS_EN = (1 << 0), /* Enable FBS */
|
||||
+ PORT_FBS_SDE = BIT(2), /* FBS single device error */
|
||||
+ PORT_FBS_DEC = BIT(1), /* FBS device error clear */
|
||||
+ PORT_FBS_EN = BIT(0), /* Enable FBS */
|
||||
|
||||
/* PORT_DEVSLP bits */
|
||||
PORT_DEVSLP_DM_OFFSET = 25, /* DITO multiplier offset */
|
||||
@@ -197,50 +198,50 @@ enum {
|
||||
PORT_DEVSLP_DITO_OFFSET = 15, /* DITO offset */
|
||||
PORT_DEVSLP_MDAT_OFFSET = 10, /* Minimum assertion time */
|
||||
PORT_DEVSLP_DETO_OFFSET = 2, /* DevSlp exit timeout */
|
||||
- PORT_DEVSLP_DSP = (1 << 1), /* DevSlp present */
|
||||
- PORT_DEVSLP_ADSE = (1 << 0), /* Aggressive DevSlp enable */
|
||||
+ PORT_DEVSLP_DSP = BIT(1), /* DevSlp present */
|
||||
+ PORT_DEVSLP_ADSE = BIT(0), /* Aggressive DevSlp enable */
|
||||
|
||||
/* hpriv->flags bits */
|
||||
|
||||
#define AHCI_HFLAGS(flags) .private_data = (void *)(flags)
|
||||
|
||||
- AHCI_HFLAG_NO_NCQ = (1 << 0),
|
||||
- AHCI_HFLAG_IGN_IRQ_IF_ERR = (1 << 1), /* ignore IRQ_IF_ERR */
|
||||
- AHCI_HFLAG_IGN_SERR_INTERNAL = (1 << 2), /* ignore SERR_INTERNAL */
|
||||
- AHCI_HFLAG_32BIT_ONLY = (1 << 3), /* force 32bit */
|
||||
- AHCI_HFLAG_MV_PATA = (1 << 4), /* PATA port */
|
||||
- AHCI_HFLAG_NO_MSI = (1 << 5), /* no PCI MSI */
|
||||
- AHCI_HFLAG_NO_PMP = (1 << 6), /* no PMP */
|
||||
- AHCI_HFLAG_SECT255 = (1 << 8), /* max 255 sectors */
|
||||
- AHCI_HFLAG_YES_NCQ = (1 << 9), /* force NCQ cap on */
|
||||
- AHCI_HFLAG_NO_SUSPEND = (1 << 10), /* don't suspend */
|
||||
- AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = (1 << 11), /* treat SRST timeout as
|
||||
+ AHCI_HFLAG_NO_NCQ = BIT(0),
|
||||
+ AHCI_HFLAG_IGN_IRQ_IF_ERR = BIT(1), /* ignore IRQ_IF_ERR */
|
||||
+ AHCI_HFLAG_IGN_SERR_INTERNAL = BIT(2), /* ignore SERR_INTERNAL */
|
||||
+ AHCI_HFLAG_32BIT_ONLY = BIT(3), /* force 32bit */
|
||||
+ AHCI_HFLAG_MV_PATA = BIT(4), /* PATA port */
|
||||
+ AHCI_HFLAG_NO_MSI = BIT(5), /* no PCI MSI */
|
||||
+ AHCI_HFLAG_NO_PMP = BIT(6), /* no PMP */
|
||||
+ AHCI_HFLAG_SECT255 = BIT(8), /* max 255 sectors */
|
||||
+ AHCI_HFLAG_YES_NCQ = BIT(9), /* force NCQ cap on */
|
||||
+ AHCI_HFLAG_NO_SUSPEND = BIT(10), /* don't suspend */
|
||||
+ AHCI_HFLAG_SRST_TOUT_IS_OFFLINE = BIT(11), /* treat SRST timeout as
|
||||
link offline */
|
||||
- AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */
|
||||
- AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */
|
||||
- AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */
|
||||
- AHCI_HFLAG_DELAY_ENGINE = (1 << 15), /* do not start engine on
|
||||
+ AHCI_HFLAG_NO_SNTF = BIT(12), /* no sntf */
|
||||
+ AHCI_HFLAG_NO_FPDMA_AA = BIT(13), /* no FPDMA AA */
|
||||
+ AHCI_HFLAG_YES_FBS = BIT(14), /* force FBS cap on */
|
||||
+ AHCI_HFLAG_DELAY_ENGINE = BIT(15), /* do not start engine on
|
||||
port start (wait until
|
||||
error-handling stage) */
|
||||
- AHCI_HFLAG_NO_DEVSLP = (1 << 17), /* no device sleep */
|
||||
- AHCI_HFLAG_NO_FBS = (1 << 18), /* no FBS */
|
||||
+ AHCI_HFLAG_NO_DEVSLP = BIT(17), /* no device sleep */
|
||||
+ AHCI_HFLAG_NO_FBS = BIT(18), /* no FBS */
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
- AHCI_HFLAG_MULTI_MSI = (1 << 20), /* per-port MSI(-X) */
|
||||
+ AHCI_HFLAG_MULTI_MSI = BIT(20), /* per-port MSI(-X) */
|
||||
#else
|
||||
/* compile out MSI infrastructure */
|
||||
AHCI_HFLAG_MULTI_MSI = 0,
|
||||
#endif
|
||||
- AHCI_HFLAG_WAKE_BEFORE_STOP = (1 << 22), /* wake before DMA stop */
|
||||
- AHCI_HFLAG_YES_ALPM = (1 << 23), /* force ALPM cap on */
|
||||
- AHCI_HFLAG_NO_WRITE_TO_RO = (1 << 24), /* don't write to read
|
||||
+ AHCI_HFLAG_WAKE_BEFORE_STOP = BIT(22), /* wake before DMA stop */
|
||||
+ AHCI_HFLAG_YES_ALPM = BIT(23), /* force ALPM cap on */
|
||||
+ AHCI_HFLAG_NO_WRITE_TO_RO = BIT(24), /* don't write to read
|
||||
only registers */
|
||||
- AHCI_HFLAG_IS_MOBILE = (1 << 25), /* mobile chipset, use
|
||||
+ AHCI_HFLAG_IS_MOBILE = BIT(25), /* mobile chipset, use
|
||||
SATA_MOBILE_LPM_POLICY
|
||||
as default lpm_policy */
|
||||
- AHCI_HFLAG_SUSPEND_PHYS = (1 << 26), /* handle PHYs during
|
||||
+ AHCI_HFLAG_SUSPEND_PHYS = BIT(26), /* handle PHYs during
|
||||
suspend/resume */
|
||||
- AHCI_HFLAG_NO_SXS = (1 << 28), /* SXS not supported */
|
||||
+ AHCI_HFLAG_NO_SXS = BIT(28), /* SXS not supported */
|
||||
|
||||
/* ap->flags bits */
|
||||
|
||||
@@ -256,22 +257,22 @@ enum {
|
||||
EM_MAX_RETRY = 5,
|
||||
|
||||
/* em_ctl bits */
|
||||
- EM_CTL_RST = (1 << 9), /* Reset */
|
||||
- EM_CTL_TM = (1 << 8), /* Transmit Message */
|
||||
- EM_CTL_MR = (1 << 0), /* Message Received */
|
||||
- EM_CTL_ALHD = (1 << 26), /* Activity LED */
|
||||
- EM_CTL_XMT = (1 << 25), /* Transmit Only */
|
||||
- EM_CTL_SMB = (1 << 24), /* Single Message Buffer */
|
||||
- EM_CTL_SGPIO = (1 << 19), /* SGPIO messages supported */
|
||||
- EM_CTL_SES = (1 << 18), /* SES-2 messages supported */
|
||||
- EM_CTL_SAFTE = (1 << 17), /* SAF-TE messages supported */
|
||||
- EM_CTL_LED = (1 << 16), /* LED messages supported */
|
||||
+ EM_CTL_RST = BIT(9), /* Reset */
|
||||
+ EM_CTL_TM = BIT(8), /* Transmit Message */
|
||||
+ EM_CTL_MR = BIT(0), /* Message Received */
|
||||
+ EM_CTL_ALHD = BIT(26), /* Activity LED */
|
||||
+ EM_CTL_XMT = BIT(25), /* Transmit Only */
|
||||
+ EM_CTL_SMB = BIT(24), /* Single Message Buffer */
|
||||
+ EM_CTL_SGPIO = BIT(19), /* SGPIO messages supported */
|
||||
+ EM_CTL_SES = BIT(18), /* SES-2 messages supported */
|
||||
+ EM_CTL_SAFTE = BIT(17), /* SAF-TE messages supported */
|
||||
+ EM_CTL_LED = BIT(16), /* LED messages supported */
|
||||
|
||||
/* em message type */
|
||||
- EM_MSG_TYPE_LED = (1 << 0), /* LED */
|
||||
- EM_MSG_TYPE_SAFTE = (1 << 1), /* SAF-TE */
|
||||
- EM_MSG_TYPE_SES2 = (1 << 2), /* SES-2 */
|
||||
- EM_MSG_TYPE_SGPIO = (1 << 3), /* SGPIO */
|
||||
+ EM_MSG_TYPE_LED = BIT(0), /* LED */
|
||||
+ EM_MSG_TYPE_SAFTE = BIT(1), /* SAF-TE */
|
||||
+ EM_MSG_TYPE_SES2 = BIT(2), /* SES-2 */
|
||||
+ EM_MSG_TYPE_SGPIO = BIT(3), /* SGPIO */
|
||||
};
|
||||
|
||||
struct ahci_cmd_hdr {
|
@ -0,0 +1,31 @@
|
||||
From eebc6573ad940b62a87776db3917e912b4f52d78 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Rix <trix@redhat.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:05 +0100
|
||||
Subject: [PATCH] nvmem: imx-ocotp: set varaiable imx_ocotp_layout
|
||||
storage-class-specifier to static
|
||||
|
||||
smatch reports
|
||||
drivers/nvmem/imx-ocotp.c:599:21: warning: symbol
|
||||
'imx_ocotp_layout' was not declared. Should it be static?
|
||||
|
||||
This variable is only used in one file so should be static.
|
||||
|
||||
Signed-off-by: Tom Rix <trix@redhat.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-2-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/imx-ocotp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/imx-ocotp.c
|
||||
+++ b/drivers/nvmem/imx-ocotp.c
|
||||
@@ -596,7 +596,7 @@ static void imx_ocotp_fixup_cell_info(st
|
||||
cell->read_post_process = imx_ocotp_cell_pp;
|
||||
}
|
||||
|
||||
-struct nvmem_layout imx_ocotp_layout = {
|
||||
+static struct nvmem_layout imx_ocotp_layout = {
|
||||
.fixup_cell_info = imx_ocotp_fixup_cell_info,
|
||||
};
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 8a00fc606312c68b98add8fe8e6f7a013ce29e78 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Stein <alexander.stein@ew.tq-group.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:06 +0100
|
||||
Subject: [PATCH] nvmem: imx-ocotp: Reverse MAC addresses on all i.MX derivates
|
||||
|
||||
Not just i.MX8M, but all i.MX6/7 (and subtypes) need to reverse the
|
||||
MAC address read from fuses. Exceptions are i.MX6SLL and i.MX7ULP which
|
||||
do not support ethernet at all.
|
||||
|
||||
Fixes: d0221a780cbc ("nvmem: imx-ocotp: add support for post processing")
|
||||
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
|
||||
Tested-by: Richard Leitner <richard.leitner@skidata.com> # imx6q
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-3-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/imx-ocotp.c | 8 +-------
|
||||
1 file changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/imx-ocotp.c
|
||||
+++ b/drivers/nvmem/imx-ocotp.c
|
||||
@@ -97,7 +97,6 @@ struct ocotp_params {
|
||||
unsigned int bank_address_words;
|
||||
void (*set_timing)(struct ocotp_priv *priv);
|
||||
struct ocotp_ctrl_reg ctrl;
|
||||
- bool reverse_mac_address;
|
||||
};
|
||||
|
||||
static int imx_ocotp_wait_for_busy(struct ocotp_priv *priv, u32 flags)
|
||||
@@ -545,7 +544,6 @@ static const struct ocotp_params imx8mq_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mm_params = {
|
||||
@@ -553,7 +551,6 @@ static const struct ocotp_params imx8mm_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mn_params = {
|
||||
@@ -561,7 +558,6 @@ static const struct ocotp_params imx8mn_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_DEFAULT,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct ocotp_params imx8mp_params = {
|
||||
@@ -569,7 +565,6 @@ static const struct ocotp_params imx8mp_
|
||||
.bank_address_words = 0,
|
||||
.set_timing = imx_ocotp_set_imx6_timing,
|
||||
.ctrl = IMX_OCOTP_BM_CTRL_8MP,
|
||||
- .reverse_mac_address = true,
|
||||
};
|
||||
|
||||
static const struct of_device_id imx_ocotp_dt_ids[] = {
|
||||
@@ -624,8 +619,7 @@ static int imx_ocotp_probe(struct platfo
|
||||
imx_ocotp_nvmem_config.size = 4 * priv->params->nregs;
|
||||
imx_ocotp_nvmem_config.dev = dev;
|
||||
imx_ocotp_nvmem_config.priv = priv;
|
||||
- if (priv->params->reverse_mac_address)
|
||||
- imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
||||
+ imx_ocotp_nvmem_config.layout = &imx_ocotp_layout;
|
||||
|
||||
priv->config = &imx_ocotp_nvmem_config;
|
||||
|
@ -1,5 +1,6 @@
|
||||
From 73bcd133c910bff3b6d3b3834d0d14be9444e90a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Thu, 6 Apr 2023 12:46:16 +0200
|
||||
Date: Sun, 11 Jun 2023 15:03:08 +0100
|
||||
Subject: [PATCH] nvmem: brcm_nvram: add .read_post_process() for MACs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
@ -9,6 +10,9 @@ Content-Transfer-Encoding: 8bit
|
||||
2. Calculate relative addresses based on index argument
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-5-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/Kconfig | 1 +
|
||||
drivers/nvmem/brcm_nvram.c | 28 ++++++++++++++++++++++++++++
|
@ -0,0 +1,166 @@
|
||||
From 8dc61364164e79e44c07fa2ac0a7b6939f00d5db Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:13 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Add clks and reg_read to rockchip_data
|
||||
|
||||
In preparation to support new Rockchip OTP memory devices with different
|
||||
clock configurations and register layout, extend rockchip_data struct
|
||||
with the related members: clks, num_clks, reg_read.
|
||||
|
||||
Additionally, to avoid managing redundant driver data, drop num_clks
|
||||
member from rockchip_otp struct and update all references to point to
|
||||
the equivalent member in rockchip_data.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-10-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 79 ++++++++++++++++++++++--------------
|
||||
1 file changed, 49 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -54,21 +54,19 @@
|
||||
|
||||
#define OTPC_TIMEOUT 10000
|
||||
|
||||
+struct rockchip_data {
|
||||
+ int size;
|
||||
+ const char * const *clks;
|
||||
+ int num_clks;
|
||||
+ nvmem_reg_read_t reg_read;
|
||||
+};
|
||||
+
|
||||
struct rockchip_otp {
|
||||
struct device *dev;
|
||||
void __iomem *base;
|
||||
- struct clk_bulk_data *clks;
|
||||
- int num_clks;
|
||||
+ struct clk_bulk_data *clks;
|
||||
struct reset_control *rst;
|
||||
-};
|
||||
-
|
||||
-/* list of required clocks */
|
||||
-static const char * const rockchip_otp_clocks[] = {
|
||||
- "otp", "apb_pclk", "phy",
|
||||
-};
|
||||
-
|
||||
-struct rockchip_data {
|
||||
- int size;
|
||||
+ const struct rockchip_data *data;
|
||||
};
|
||||
|
||||
static int rockchip_otp_reset(struct rockchip_otp *otp)
|
||||
@@ -132,29 +130,23 @@ static int rockchip_otp_ecc_enable(struc
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
- void *val, size_t bytes)
|
||||
+static int px30_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
{
|
||||
struct rockchip_otp *otp = context;
|
||||
u8 *buf = val;
|
||||
- int ret = 0;
|
||||
-
|
||||
- ret = clk_bulk_prepare_enable(otp->num_clks, otp->clks);
|
||||
- if (ret < 0) {
|
||||
- dev_err(otp->dev, "failed to prepare/enable clks\n");
|
||||
- return ret;
|
||||
- }
|
||||
+ int ret;
|
||||
|
||||
ret = rockchip_otp_reset(otp);
|
||||
if (ret) {
|
||||
dev_err(otp->dev, "failed to reset otp phy\n");
|
||||
- goto disable_clks;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
ret = rockchip_otp_ecc_enable(otp, false);
|
||||
if (ret < 0) {
|
||||
dev_err(otp->dev, "rockchip_otp_ecc_enable err\n");
|
||||
- goto disable_clks;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
|
||||
@@ -174,8 +166,28 @@ static int rockchip_otp_read(void *conte
|
||||
|
||||
read_end:
|
||||
writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
|
||||
-disable_clks:
|
||||
- clk_bulk_disable_unprepare(otp->num_clks, otp->clks);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
+{
|
||||
+ struct rockchip_otp *otp = context;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!otp->data || !otp->data->reg_read)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ ret = clk_bulk_prepare_enable(otp->data->num_clks, otp->clks);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(otp->dev, "failed to prepare/enable clks\n");
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = otp->data->reg_read(context, offset, val, bytes);
|
||||
+
|
||||
+ clk_bulk_disable_unprepare(otp->data->num_clks, otp->clks);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -189,8 +201,15 @@ static struct nvmem_config otp_config =
|
||||
.reg_read = rockchip_otp_read,
|
||||
};
|
||||
|
||||
+static const char * const px30_otp_clocks[] = {
|
||||
+ "otp", "apb_pclk", "phy",
|
||||
+};
|
||||
+
|
||||
static const struct rockchip_data px30_data = {
|
||||
.size = 0x40,
|
||||
+ .clks = px30_otp_clocks,
|
||||
+ .num_clks = ARRAY_SIZE(px30_otp_clocks),
|
||||
+ .reg_read = px30_otp_read,
|
||||
};
|
||||
|
||||
static const struct of_device_id rockchip_otp_match[] = {
|
||||
@@ -225,21 +244,21 @@ static int rockchip_otp_probe(struct pla
|
||||
if (!otp)
|
||||
return -ENOMEM;
|
||||
|
||||
+ otp->data = data;
|
||||
otp->dev = dev;
|
||||
otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(otp->base))
|
||||
return PTR_ERR(otp->base);
|
||||
|
||||
- otp->num_clks = ARRAY_SIZE(rockchip_otp_clocks);
|
||||
- otp->clks = devm_kcalloc(dev, otp->num_clks,
|
||||
- sizeof(*otp->clks), GFP_KERNEL);
|
||||
+ otp->clks = devm_kcalloc(dev, data->num_clks, sizeof(*otp->clks),
|
||||
+ GFP_KERNEL);
|
||||
if (!otp->clks)
|
||||
return -ENOMEM;
|
||||
|
||||
- for (i = 0; i < otp->num_clks; ++i)
|
||||
- otp->clks[i].id = rockchip_otp_clocks[i];
|
||||
+ for (i = 0; i < data->num_clks; ++i)
|
||||
+ otp->clks[i].id = data->clks[i];
|
||||
|
||||
- ret = devm_clk_bulk_get(dev, otp->num_clks, otp->clks);
|
||||
+ ret = devm_clk_bulk_get(dev, data->num_clks, otp->clks);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -0,0 +1,62 @@
|
||||
From 30fd21cfb1e64ef20035559a8246f5fbf682c40e Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:14 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Generalize rockchip_otp_wait_status()
|
||||
|
||||
In preparation to support additional Rockchip OTP memory devices with
|
||||
different register layout, generalize rockchip_otp_wait_status() to
|
||||
accept a new parameter for specifying the offset of the status register.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-11-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -90,18 +90,19 @@ static int rockchip_otp_reset(struct roc
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int rockchip_otp_wait_status(struct rockchip_otp *otp, u32 flag)
|
||||
+static int rockchip_otp_wait_status(struct rockchip_otp *otp,
|
||||
+ unsigned int reg, u32 flag)
|
||||
{
|
||||
u32 status = 0;
|
||||
int ret;
|
||||
|
||||
- ret = readl_poll_timeout_atomic(otp->base + OTPC_INT_STATUS, status,
|
||||
+ ret = readl_poll_timeout_atomic(otp->base + reg, status,
|
||||
(status & flag), 1, OTPC_TIMEOUT);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* clean int status */
|
||||
- writel(flag, otp->base + OTPC_INT_STATUS);
|
||||
+ writel(flag, otp->base + reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -123,7 +124,7 @@ static int rockchip_otp_ecc_enable(struc
|
||||
|
||||
writel(SBPI_ENABLE_MASK | SBPI_ENABLE, otp->base + OTPC_SBPI_CTRL);
|
||||
|
||||
- ret = rockchip_otp_wait_status(otp, OTPC_SBPI_DONE);
|
||||
+ ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_SBPI_DONE);
|
||||
if (ret < 0)
|
||||
dev_err(otp->dev, "timeout during ecc_enable\n");
|
||||
|
||||
@@ -156,7 +157,7 @@ static int px30_otp_read(void *context,
|
||||
otp->base + OTPC_USER_ADDR);
|
||||
writel(OTPC_USER_FSM_ENABLE | OTPC_USER_FSM_ENABLE_MASK,
|
||||
otp->base + OTPC_USER_ENABLE);
|
||||
- ret = rockchip_otp_wait_status(otp, OTPC_USER_DONE);
|
||||
+ ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_USER_DONE);
|
||||
if (ret < 0) {
|
||||
dev_err(otp->dev, "timeout during read setup\n");
|
||||
goto read_end;
|
@ -0,0 +1,31 @@
|
||||
From d325c9dd2b6e94040ca722ddcadcd6af358dd2be Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:15 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Use
|
||||
devm_reset_control_array_get_exclusive()
|
||||
|
||||
In preparation to support new Rockchip OTP memory devices having
|
||||
specific reset configurations, switch devm_reset_control_get() to
|
||||
devm_reset_control_array_get_exclusive().
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-12-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -263,7 +263,7 @@ static int rockchip_otp_probe(struct pla
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- otp->rst = devm_reset_control_get(dev, "phy");
|
||||
+ otp->rst = devm_reset_control_array_get_exclusive(dev);
|
||||
if (IS_ERR(otp->rst))
|
||||
return PTR_ERR(otp->rst);
|
||||
|
@ -0,0 +1,71 @@
|
||||
From 912517345b867a69542dc9f5c2cc3e9d8beaccf5 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:16 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Improve probe error handling
|
||||
|
||||
Enhance error handling in the probe function by making use of
|
||||
dev_err_probe(), which ensures the error code is always printed, in
|
||||
addition to the specified error message.
|
||||
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-13-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 21 ++++++++++++---------
|
||||
1 file changed, 12 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -235,10 +235,8 @@ static int rockchip_otp_probe(struct pla
|
||||
int ret, i;
|
||||
|
||||
data = of_device_get_match_data(dev);
|
||||
- if (!data) {
|
||||
- dev_err(dev, "failed to get match data\n");
|
||||
- return -EINVAL;
|
||||
- }
|
||||
+ if (!data)
|
||||
+ return dev_err_probe(dev, -EINVAL, "failed to get match data\n");
|
||||
|
||||
otp = devm_kzalloc(&pdev->dev, sizeof(struct rockchip_otp),
|
||||
GFP_KERNEL);
|
||||
@@ -249,7 +247,8 @@ static int rockchip_otp_probe(struct pla
|
||||
otp->dev = dev;
|
||||
otp->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(otp->base))
|
||||
- return PTR_ERR(otp->base);
|
||||
+ return dev_err_probe(dev, PTR_ERR(otp->base),
|
||||
+ "failed to ioremap resource\n");
|
||||
|
||||
otp->clks = devm_kcalloc(dev, data->num_clks, sizeof(*otp->clks),
|
||||
GFP_KERNEL);
|
||||
@@ -261,18 +260,22 @@ static int rockchip_otp_probe(struct pla
|
||||
|
||||
ret = devm_clk_bulk_get(dev, data->num_clks, otp->clks);
|
||||
if (ret)
|
||||
- return ret;
|
||||
+ return dev_err_probe(dev, ret, "failed to get clocks\n");
|
||||
|
||||
otp->rst = devm_reset_control_array_get_exclusive(dev);
|
||||
if (IS_ERR(otp->rst))
|
||||
- return PTR_ERR(otp->rst);
|
||||
+ return dev_err_probe(dev, PTR_ERR(otp->rst),
|
||||
+ "failed to get resets\n");
|
||||
|
||||
otp_config.size = data->size;
|
||||
otp_config.priv = otp;
|
||||
otp_config.dev = dev;
|
||||
- nvmem = devm_nvmem_register(dev, &otp_config);
|
||||
|
||||
- return PTR_ERR_OR_ZERO(nvmem);
|
||||
+ nvmem = devm_nvmem_register(dev, &otp_config);
|
||||
+ if (IS_ERR(nvmem))
|
||||
+ return dev_err_probe(dev, PTR_ERR(nvmem),
|
||||
+ "failed to register nvmem device\n");
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver rockchip_otp_driver = {
|
@ -0,0 +1,129 @@
|
||||
From 8ab099fafbbc8c9607c399d21a774784a6cb8b45 Mon Sep 17 00:00:00 2001
|
||||
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:17 +0100
|
||||
Subject: [PATCH] nvmem: rockchip-otp: Add support for RK3588
|
||||
|
||||
Add support for the OTP memory device found on the Rockchip RK3588 SoC.
|
||||
|
||||
While here, remove the unnecessary 'void *' casts in the OF device ID
|
||||
table.
|
||||
|
||||
Co-developed-by: Finley Xiao <finley.xiao@rock-chips.com>
|
||||
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
|
||||
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
|
||||
Tested-by: Vincent Legoll <vincent.legoll@gmail.com>
|
||||
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-14-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/rockchip-otp.c | 78 +++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 76 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/rockchip-otp.c
|
||||
+++ b/drivers/nvmem/rockchip-otp.c
|
||||
@@ -54,6 +54,19 @@
|
||||
|
||||
#define OTPC_TIMEOUT 10000
|
||||
|
||||
+/* RK3588 Register */
|
||||
+#define RK3588_OTPC_AUTO_CTRL 0x04
|
||||
+#define RK3588_OTPC_AUTO_EN 0x08
|
||||
+#define RK3588_OTPC_INT_ST 0x84
|
||||
+#define RK3588_OTPC_DOUT0 0x20
|
||||
+#define RK3588_NO_SECURE_OFFSET 0x300
|
||||
+#define RK3588_NBYTES 4
|
||||
+#define RK3588_BURST_NUM 1
|
||||
+#define RK3588_BURST_SHIFT 8
|
||||
+#define RK3588_ADDR_SHIFT 16
|
||||
+#define RK3588_AUTO_EN BIT(0)
|
||||
+#define RK3588_RD_DONE BIT(1)
|
||||
+
|
||||
struct rockchip_data {
|
||||
int size;
|
||||
const char * const *clks;
|
||||
@@ -171,6 +184,52 @@ read_end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int rk3588_otp_read(void *context, unsigned int offset,
|
||||
+ void *val, size_t bytes)
|
||||
+{
|
||||
+ struct rockchip_otp *otp = context;
|
||||
+ unsigned int addr_start, addr_end, addr_len;
|
||||
+ int ret, i = 0;
|
||||
+ u32 data;
|
||||
+ u8 *buf;
|
||||
+
|
||||
+ addr_start = round_down(offset, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
+ addr_end = round_up(offset + bytes, RK3588_NBYTES) / RK3588_NBYTES;
|
||||
+ addr_len = addr_end - addr_start;
|
||||
+ addr_start += RK3588_NO_SECURE_OFFSET;
|
||||
+
|
||||
+ buf = kzalloc(array_size(addr_len, RK3588_NBYTES), GFP_KERNEL);
|
||||
+ if (!buf)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ while (addr_len--) {
|
||||
+ writel((addr_start << RK3588_ADDR_SHIFT) |
|
||||
+ (RK3588_BURST_NUM << RK3588_BURST_SHIFT),
|
||||
+ otp->base + RK3588_OTPC_AUTO_CTRL);
|
||||
+ writel(RK3588_AUTO_EN, otp->base + RK3588_OTPC_AUTO_EN);
|
||||
+
|
||||
+ ret = rockchip_otp_wait_status(otp, RK3588_OTPC_INT_ST,
|
||||
+ RK3588_RD_DONE);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(otp->dev, "timeout during read setup\n");
|
||||
+ goto read_end;
|
||||
+ }
|
||||
+
|
||||
+ data = readl(otp->base + RK3588_OTPC_DOUT0);
|
||||
+ memcpy(&buf[i], &data, RK3588_NBYTES);
|
||||
+
|
||||
+ i += RK3588_NBYTES;
|
||||
+ addr_start++;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(val, buf + offset % RK3588_NBYTES, bytes);
|
||||
+
|
||||
+read_end:
|
||||
+ kfree(buf);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int rockchip_otp_read(void *context, unsigned int offset,
|
||||
void *val, size_t bytes)
|
||||
{
|
||||
@@ -213,14 +272,29 @@ static const struct rockchip_data px30_d
|
||||
.reg_read = px30_otp_read,
|
||||
};
|
||||
|
||||
+static const char * const rk3588_otp_clocks[] = {
|
||||
+ "otp", "apb_pclk", "phy", "arb",
|
||||
+};
|
||||
+
|
||||
+static const struct rockchip_data rk3588_data = {
|
||||
+ .size = 0x400,
|
||||
+ .clks = rk3588_otp_clocks,
|
||||
+ .num_clks = ARRAY_SIZE(rk3588_otp_clocks),
|
||||
+ .reg_read = rk3588_otp_read,
|
||||
+};
|
||||
+
|
||||
static const struct of_device_id rockchip_otp_match[] = {
|
||||
{
|
||||
.compatible = "rockchip,px30-otp",
|
||||
- .data = (void *)&px30_data,
|
||||
+ .data = &px30_data,
|
||||
},
|
||||
{
|
||||
.compatible = "rockchip,rk3308-otp",
|
||||
- .data = (void *)&px30_data,
|
||||
+ .data = &px30_data,
|
||||
+ },
|
||||
+ {
|
||||
+ .compatible = "rockchip,rk3588-otp",
|
||||
+ .data = &rk3588_data,
|
||||
},
|
||||
{ /* sentinel */ },
|
||||
};
|
@ -0,0 +1,26 @@
|
||||
From 9734408969e978a1c0d5d752be63dd638288e374 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Simek <michal.simek@amd.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:23 +0100
|
||||
Subject: [PATCH] nvmem: zynqmp: Switch @xilinx.com emails to @amd.com
|
||||
|
||||
@xilinx.com is still working but better to switch to new amd.com after
|
||||
AMD/Xilinx acquisition.
|
||||
|
||||
Signed-off-by: Michal Simek <michal.simek@amd.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-20-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/zynqmp_nvmem.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/nvmem/zynqmp_nvmem.c
|
||||
+++ b/drivers/nvmem/zynqmp_nvmem.c
|
||||
@@ -76,6 +76,6 @@ static struct platform_driver zynqmp_nvm
|
||||
|
||||
module_platform_driver(zynqmp_nvmem_driver);
|
||||
|
||||
-MODULE_AUTHOR("Michal Simek <michal.simek@xilinx.com>, Nava kishore Manne <navam@xilinx.com>");
|
||||
+MODULE_AUTHOR("Michal Simek <michal.simek@amd.com>, Nava kishore Manne <nava.kishore.manne@amd.com>");
|
||||
MODULE_DESCRIPTION("ZynqMP NVMEM driver");
|
||||
MODULE_LICENSE("GPL");
|
@ -0,0 +1,230 @@
|
||||
From 22e9e6fcfb5042cb6d6c7874c459b034800092f1 Mon Sep 17 00:00:00 2001
|
||||
From: Peng Fan <peng.fan@nxp.com>
|
||||
Date: Sun, 11 Jun 2023 15:03:25 +0100
|
||||
Subject: [PATCH] nvmem: imx: support i.MX93 OCOTP
|
||||
|
||||
Add i.MX93 OCOTP support. i.MX93 OCOTP has two parts: Fuse shadow
|
||||
block(fsb) and fuse managed by ELE. The FSB part could be directly
|
||||
accessed with MMIO, the ELE could only be accessed with ELE API.
|
||||
|
||||
Currently the ELE API is not ready, so NULL function callback is used,
|
||||
but it was tested with downstream ELE API.
|
||||
|
||||
Signed-off-by: Peng Fan <peng.fan@nxp.com>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-22-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/Kconfig | 9 ++
|
||||
drivers/nvmem/Makefile | 2 +
|
||||
drivers/nvmem/imx-ocotp-ele.c | 175 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 186 insertions(+)
|
||||
create mode 100644 drivers/nvmem/imx-ocotp-ele.c
|
||||
|
||||
--- a/drivers/nvmem/Kconfig
|
||||
+++ b/drivers/nvmem/Kconfig
|
||||
@@ -83,6 +83,15 @@ config NVMEM_IMX_OCOTP
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called nvmem-imx-ocotp.
|
||||
|
||||
+config NVMEM_IMX_OCOTP_ELE
|
||||
+ tristate "i.MX On-Chip OTP Controller support"
|
||||
+ depends on ARCH_MXC || COMPILE_TEST
|
||||
+ depends on HAS_IOMEM
|
||||
+ depends on OF
|
||||
+ help
|
||||
+ This is a driver for the On-Chip OTP Controller (OCOTP)
|
||||
+ available on i.MX SoCs which has ELE.
|
||||
+
|
||||
config NVMEM_IMX_OCOTP_SCU
|
||||
tristate "i.MX8 SCU On-Chip OTP Controller support"
|
||||
depends on IMX_SCU
|
||||
--- a/drivers/nvmem/Makefile
|
||||
+++ b/drivers/nvmem/Makefile
|
||||
@@ -18,6 +18,8 @@ obj-$(CONFIG_NVMEM_IMX_IIM) += nvmem-im
|
||||
nvmem-imx-iim-y := imx-iim.o
|
||||
obj-$(CONFIG_NVMEM_IMX_OCOTP) += nvmem-imx-ocotp.o
|
||||
nvmem-imx-ocotp-y := imx-ocotp.o
|
||||
+obj-$(CONFIG_NVMEM_IMX_OCOTP_ELE) += nvmem-imx-ocotp-ele.o
|
||||
+nvmem-imx-ocotp-ele-y := imx-ocotp-ele.o
|
||||
obj-$(CONFIG_NVMEM_IMX_OCOTP_SCU) += nvmem-imx-ocotp-scu.o
|
||||
nvmem-imx-ocotp-scu-y := imx-ocotp-scu.o
|
||||
obj-$(CONFIG_NVMEM_JZ4780_EFUSE) += nvmem_jz4780_efuse.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/nvmem/imx-ocotp-ele.c
|
||||
@@ -0,0 +1,175 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * i.MX9 OCOTP fusebox driver
|
||||
+ *
|
||||
+ * Copyright 2023 NXP
|
||||
+ */
|
||||
+
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/nvmem-provider.h>
|
||||
+#include <linux/of_device.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+
|
||||
+enum fuse_type {
|
||||
+ FUSE_FSB = 1,
|
||||
+ FUSE_ELE = 2,
|
||||
+ FUSE_INVALID = -1
|
||||
+};
|
||||
+
|
||||
+struct ocotp_map_entry {
|
||||
+ u32 start; /* start word */
|
||||
+ u32 num; /* num words */
|
||||
+ enum fuse_type type;
|
||||
+};
|
||||
+
|
||||
+struct ocotp_devtype_data {
|
||||
+ u32 reg_off;
|
||||
+ char *name;
|
||||
+ u32 size;
|
||||
+ u32 num_entry;
|
||||
+ u32 flag;
|
||||
+ nvmem_reg_read_t reg_read;
|
||||
+ struct ocotp_map_entry entry[];
|
||||
+};
|
||||
+
|
||||
+struct imx_ocotp_priv {
|
||||
+ struct device *dev;
|
||||
+ void __iomem *base;
|
||||
+ struct nvmem_config config;
|
||||
+ struct mutex lock;
|
||||
+ const struct ocotp_devtype_data *data;
|
||||
+};
|
||||
+
|
||||
+static enum fuse_type imx_ocotp_fuse_type(void *context, u32 index)
|
||||
+{
|
||||
+ struct imx_ocotp_priv *priv = context;
|
||||
+ const struct ocotp_devtype_data *data = priv->data;
|
||||
+ u32 start, end;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < data->num_entry; i++) {
|
||||
+ start = data->entry[i].start;
|
||||
+ end = data->entry[i].start + data->entry[i].num;
|
||||
+
|
||||
+ if (index >= start && index < end)
|
||||
+ return data->entry[i].type;
|
||||
+ }
|
||||
+
|
||||
+ return FUSE_INVALID;
|
||||
+}
|
||||
+
|
||||
+static int imx_ocotp_reg_read(void *context, unsigned int offset, void *val, size_t bytes)
|
||||
+{
|
||||
+ struct imx_ocotp_priv *priv = context;
|
||||
+ void __iomem *reg = priv->base + priv->data->reg_off;
|
||||
+ u32 count, index, num_bytes;
|
||||
+ enum fuse_type type;
|
||||
+ u32 *buf;
|
||||
+ void *p;
|
||||
+ int i;
|
||||
+
|
||||
+ index = offset;
|
||||
+ num_bytes = round_up(bytes, 4);
|
||||
+ count = num_bytes >> 2;
|
||||
+
|
||||
+ if (count > ((priv->data->size >> 2) - index))
|
||||
+ count = (priv->data->size >> 2) - index;
|
||||
+
|
||||
+ p = kzalloc(num_bytes, GFP_KERNEL);
|
||||
+ if (!p)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ mutex_lock(&priv->lock);
|
||||
+
|
||||
+ buf = p;
|
||||
+
|
||||
+ for (i = index; i < (index + count); i++) {
|
||||
+ type = imx_ocotp_fuse_type(context, i);
|
||||
+ if (type == FUSE_INVALID || type == FUSE_ELE) {
|
||||
+ *buf++ = 0;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ *buf++ = readl_relaxed(reg + (i << 2));
|
||||
+ }
|
||||
+
|
||||
+ memcpy(val, (u8 *)p, bytes);
|
||||
+
|
||||
+ mutex_unlock(&priv->lock);
|
||||
+
|
||||
+ kfree(p);
|
||||
+
|
||||
+ return 0;
|
||||
+};
|
||||
+
|
||||
+static int imx_ele_ocotp_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct imx_ocotp_priv *priv;
|
||||
+ struct nvmem_device *nvmem;
|
||||
+
|
||||
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
|
||||
+ if (!priv)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ priv->data = of_device_get_match_data(dev);
|
||||
+
|
||||
+ priv->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
+ if (IS_ERR(priv->base))
|
||||
+ return PTR_ERR(priv->base);
|
||||
+
|
||||
+ priv->config.dev = dev;
|
||||
+ priv->config.name = "ELE-OCOTP";
|
||||
+ priv->config.id = NVMEM_DEVID_AUTO;
|
||||
+ priv->config.owner = THIS_MODULE;
|
||||
+ priv->config.size = priv->data->size;
|
||||
+ priv->config.reg_read = priv->data->reg_read;
|
||||
+ priv->config.word_size = 4;
|
||||
+ priv->config.stride = 1;
|
||||
+ priv->config.priv = priv;
|
||||
+ priv->config.read_only = true;
|
||||
+ mutex_init(&priv->lock);
|
||||
+
|
||||
+ nvmem = devm_nvmem_register(dev, &priv->config);
|
||||
+ if (IS_ERR(nvmem))
|
||||
+ return PTR_ERR(nvmem);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct ocotp_devtype_data imx93_ocotp_data = {
|
||||
+ .reg_off = 0x8000,
|
||||
+ .reg_read = imx_ocotp_reg_read,
|
||||
+ .size = 2048,
|
||||
+ .num_entry = 6,
|
||||
+ .entry = {
|
||||
+ { 0, 52, FUSE_FSB },
|
||||
+ { 63, 1, FUSE_ELE},
|
||||
+ { 128, 16, FUSE_ELE },
|
||||
+ { 182, 1, FUSE_ELE },
|
||||
+ { 188, 1, FUSE_ELE },
|
||||
+ { 312, 200, FUSE_FSB }
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static const struct of_device_id imx_ele_ocotp_dt_ids[] = {
|
||||
+ { .compatible = "fsl,imx93-ocotp", .data = &imx93_ocotp_data, },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, imx_ele_ocotp_dt_ids);
|
||||
+
|
||||
+static struct platform_driver imx_ele_ocotp_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "imx_ele_ocotp",
|
||||
+ .of_match_table = imx_ele_ocotp_dt_ids,
|
||||
+ },
|
||||
+ .probe = imx_ele_ocotp_probe,
|
||||
+};
|
||||
+module_platform_driver(imx_ele_ocotp_driver);
|
||||
+
|
||||
+MODULE_DESCRIPTION("i.MX OCOTP/ELE driver");
|
||||
+MODULE_AUTHOR("Peng Fan <peng.fan@nxp.com>");
|
||||
+MODULE_LICENSE("GPL");
|
@ -0,0 +1,96 @@
|
||||
From 27f699e578b1a72df89dfa3bc42e093a01dc8d10 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||
Date: Sun, 11 Jun 2023 15:03:29 +0100
|
||||
Subject: [PATCH] nvmem: core: add support for fixed cells *layout*
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This adds support for the "fixed-layout" NVMEM layout binding. It allows
|
||||
defining NVMEM cells in a layout DT node named "nvmem-layout".
|
||||
|
||||
While NVMEM subsystem supports layout drivers it has been discussed that
|
||||
"fixed-layout" may actually be supperted internally. It's because:
|
||||
1. It's a very basic layout
|
||||
2. It allows sharing code with legacy syntax parsing
|
||||
3. It's safer for soc_device_match() due to -EPROBE_DEFER
|
||||
4. This will make the syntax transition easier
|
||||
|
||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||
Reviewed-by: Michael Walle <michael@walle.cc>
|
||||
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
||||
Message-ID: <20230611140330.154222-26-srinivas.kandagatla@linaro.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/nvmem/core.c | 32 +++++++++++++++++++++++++++++---
|
||||
1 file changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/nvmem/core.c
|
||||
+++ b/drivers/nvmem/core.c
|
||||
@@ -696,7 +696,7 @@ static int nvmem_validate_keepouts(struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
|
||||
+static int nvmem_add_cells_from_dt(struct nvmem_device *nvmem, struct device_node *np)
|
||||
{
|
||||
struct nvmem_layout *layout = nvmem->layout;
|
||||
struct device *dev = &nvmem->dev;
|
||||
@@ -704,7 +704,7 @@ static int nvmem_add_cells_from_of(struc
|
||||
const __be32 *addr;
|
||||
int len, ret;
|
||||
|
||||
- for_each_child_of_node(dev->of_node, child) {
|
||||
+ for_each_child_of_node(np, child) {
|
||||
struct nvmem_cell_info info = {0};
|
||||
|
||||
addr = of_get_property(child, "reg", &len);
|
||||
@@ -742,6 +742,28 @@ static int nvmem_add_cells_from_of(struc
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int nvmem_add_cells_from_legacy_of(struct nvmem_device *nvmem)
|
||||
+{
|
||||
+ return nvmem_add_cells_from_dt(nvmem, nvmem->dev.of_node);
|
||||
+}
|
||||
+
|
||||
+static int nvmem_add_cells_from_fixed_layout(struct nvmem_device *nvmem)
|
||||
+{
|
||||
+ struct device_node *layout_np;
|
||||
+ int err = 0;
|
||||
+
|
||||
+ layout_np = of_nvmem_layout_get_container(nvmem);
|
||||
+ if (!layout_np)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (of_device_is_compatible(layout_np, "fixed-layout"))
|
||||
+ err = nvmem_add_cells_from_dt(nvmem, layout_np);
|
||||
+
|
||||
+ of_node_put(layout_np);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner)
|
||||
{
|
||||
layout->owner = owner;
|
||||
@@ -972,7 +994,7 @@ struct nvmem_device *nvmem_register(cons
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
- rval = nvmem_add_cells_from_of(nvmem);
|
||||
+ rval = nvmem_add_cells_from_legacy_of(nvmem);
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
@@ -982,6 +1004,10 @@ struct nvmem_device *nvmem_register(cons
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
||||
|
||||
+ rval = nvmem_add_cells_from_fixed_layout(nvmem);
|
||||
+ if (rval)
|
||||
+ goto err_remove_cells;
|
||||
+
|
||||
rval = nvmem_add_cells_from_layout(nvmem);
|
||||
if (rval)
|
||||
goto err_remove_cells;
|
@ -14,7 +14,7 @@ Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
|
||||
|
||||
--- a/net/netfilter/nf_conntrack_core.c
|
||||
+++ b/net/netfilter/nf_conntrack_core.c
|
||||
@@ -2735,7 +2735,7 @@ int nf_conntrack_init_start(void)
|
||||
@@ -2738,7 +2738,7 @@ int nf_conntrack_init_start(void)
|
||||
|
||||
if (!nf_conntrack_htable_size) {
|
||||
nf_conntrack_htable_size
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -1679,6 +1679,10 @@ enum netdev_priv_flags {
|
||||
@@ -1682,6 +1682,10 @@ enum netdev_priv_flags {
|
||||
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
|
||||
};
|
||||
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||
#define IFF_EBRIDGE IFF_EBRIDGE
|
||||
#define IFF_BONDING IFF_BONDING
|
||||
@@ -1711,6 +1715,7 @@ enum netdev_priv_flags {
|
||||
@@ -1714,6 +1718,7 @@ enum netdev_priv_flags {
|
||||
#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
|
||||
#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
|
||||
#define IFF_TX_SKB_NO_LINEAR IFF_TX_SKB_NO_LINEAR
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* Specifies the type of the struct net_device::ml_priv pointer */
|
||||
enum netdev_ml_priv_type {
|
||||
@@ -2012,6 +2017,7 @@ struct net_device {
|
||||
@@ -2015,6 +2020,7 @@ struct net_device {
|
||||
/* Read-mostly cache-line for fast-path access */
|
||||
unsigned int flags;
|
||||
unsigned int priv_flags;
|
||||
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
const struct net_device_ops *netdev_ops;
|
||||
int ifindex;
|
||||
unsigned short gflags;
|
||||
@@ -2072,6 +2078,11 @@ struct net_device {
|
||||
@@ -2075,6 +2081,11 @@ struct net_device {
|
||||
const struct tlsdev_ops *tlsdev_ops;
|
||||
#endif
|
||||
|
||||
@ -58,7 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
const struct header_ops *header_ops;
|
||||
|
||||
unsigned char operstate;
|
||||
@@ -2146,6 +2157,10 @@ struct net_device {
|
||||
@@ -2149,6 +2160,10 @@ struct net_device {
|
||||
struct mctp_dev __rcu *mctp_ptr;
|
||||
#endif
|
||||
|
||||
|
@ -14,7 +14,7 @@ Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
|
||||
|
||||
--- a/net/netfilter/nf_conntrack_core.c
|
||||
+++ b/net/netfilter/nf_conntrack_core.c
|
||||
@@ -2702,7 +2702,7 @@ int nf_conntrack_init_start(void)
|
||||
@@ -2705,7 +2705,7 @@ int nf_conntrack_init_start(void)
|
||||
|
||||
if (!nf_conntrack_htable_size) {
|
||||
nf_conntrack_htable_size
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -1704,6 +1704,7 @@ enum netdev_priv_flags {
|
||||
@@ -1707,6 +1707,7 @@ enum netdev_priv_flags {
|
||||
IFF_LIVE_RENAME_OK = 1<<30,
|
||||
IFF_TX_SKB_NO_LINEAR = BIT_ULL(31),
|
||||
IFF_CHANGE_PROTO_DOWN = BIT_ULL(32),
|
||||
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
};
|
||||
|
||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||
@@ -1738,6 +1739,7 @@ enum netdev_priv_flags {
|
||||
@@ -1741,6 +1742,7 @@ enum netdev_priv_flags {
|
||||
#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
|
||||
#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
|
||||
#define IFF_TX_SKB_NO_LINEAR IFF_TX_SKB_NO_LINEAR
|
||||
@ -35,7 +35,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/* Specifies the type of the struct net_device::ml_priv pointer */
|
||||
enum netdev_ml_priv_type {
|
||||
@@ -2106,6 +2108,11 @@ struct net_device {
|
||||
@@ -2109,6 +2111,11 @@ struct net_device {
|
||||
const struct tlsdev_ops *tlsdev_ops;
|
||||
#endif
|
||||
|
||||
@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
const struct header_ops *header_ops;
|
||||
|
||||
unsigned char operstate;
|
||||
@@ -2181,6 +2188,10 @@ struct net_device {
|
||||
@@ -2184,6 +2191,10 @@ struct net_device {
|
||||
struct mctp_dev __rcu *mctp_ptr;
|
||||
#endif
|
||||
|
||||
|
@ -36,7 +36,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
// Lantech 8330-262D-E can operate at 2500base-X, but incorrectly report
|
||||
// 2500MBd NRZ in their EEPROM
|
||||
SFP_QUIRK_M("Lantech", "8330-262D-E", sfp_quirk_2500basex),
|
||||
@@ -2334,7 +2337,8 @@ static void sfp_sm_main(struct sfp *sfp,
|
||||
@@ -2339,7 +2342,8 @@ static void sfp_sm_main(struct sfp *sfp,
|
||||
* or t_start_up, so assume there is a fault.
|
||||
*/
|
||||
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
|
||||
@ -46,7 +46,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
|
||||
init_done:
|
||||
/* Create mdiobus and start trying for PHY */
|
||||
@@ -2563,10 +2567,12 @@ static void sfp_check_state(struct sfp *
|
||||
@@ -2568,10 +2572,12 @@ static void sfp_check_state(struct sfp *
|
||||
mutex_lock(&sfp->st_mutex);
|
||||
state = sfp_get_state(sfp);
|
||||
changed = state ^ sfp->state;
|
||||
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2098,6 +2098,8 @@ struct net_device {
|
||||
@@ -2101,6 +2101,8 @@ struct net_device {
|
||||
struct netdev_hw_addr_list mc;
|
||||
struct netdev_hw_addr_list dev_addrs;
|
||||
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__u8 inner_protocol_type:1;
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -6067,6 +6067,9 @@ static enum gro_result dev_gro_receive(s
|
||||
@@ -6069,6 +6069,9 @@ static enum gro_result dev_gro_receive(s
|
||||
int same_flow;
|
||||
int grow;
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (netif_elide_gro(skb->dev))
|
||||
goto normal;
|
||||
|
||||
@@ -8081,6 +8084,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -8083,6 +8086,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info,
|
||||
@@ -8132,6 +8177,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -8134,6 +8179,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -8228,6 +8274,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
@@ -8230,6 +8276,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
|
||||
@@ -9047,6 +9094,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -9049,6 +9096,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/**
|
||||
* napi_disable - prevent NAPI from scheduling
|
||||
@@ -3365,6 +3366,7 @@ struct softnet_data {
|
||||
@@ -3368,6 +3369,7 @@ struct softnet_data {
|
||||
unsigned int processed;
|
||||
unsigned int time_squeeze;
|
||||
unsigned int received_rps;
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4576,7 +4576,7 @@ static int rps_ipi_queued(struct softnet
|
||||
@@ -4578,7 +4578,7 @@ static int rps_ipi_queued(struct softnet
|
||||
#ifdef CONFIG_RPS
|
||||
struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
|
||||
|
||||
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
sd->rps_ipi_next = mysd->rps_ipi_list;
|
||||
mysd->rps_ipi_list = sd;
|
||||
|
||||
@@ -5757,6 +5757,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
@@ -5759,6 +5759,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
/* Network device is going away, flush any packets still pending */
|
||||
static void flush_backlog(struct work_struct *work)
|
||||
{
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct sk_buff *skb, *tmp;
|
||||
struct softnet_data *sd;
|
||||
|
||||
@@ -5772,9 +5774,18 @@ static void flush_backlog(struct work_st
|
||||
@@ -5774,9 +5776,18 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
__skb_unlink(skb, &sd->process_queue);
|
||||
@@ -5782,7 +5793,18 @@ static void flush_backlog(struct work_st
|
||||
@@ -5784,7 +5795,18 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -86,7 +86,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static bool flush_required(int cpu)
|
||||
@@ -6465,6 +6487,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -6467,6 +6489,7 @@ static int process_backlog(struct napi_s
|
||||
|
||||
local_irq_disable();
|
||||
rps_lock(sd);
|
||||
@ -94,7 +94,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (skb_queue_empty(&sd->input_pkt_queue)) {
|
||||
/*
|
||||
* Inline a custom version of __napi_complete().
|
||||
@@ -6474,7 +6497,8 @@ static int process_backlog(struct napi_s
|
||||
@@ -6476,7 +6499,8 @@ static int process_backlog(struct napi_s
|
||||
* We can use a plain write instead of clear_bit(),
|
||||
* and we dont need an smp_mb() memory barrier.
|
||||
*/
|
||||
@ -104,7 +104,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
again = false;
|
||||
} else {
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
@@ -6891,6 +6915,57 @@ int dev_set_threaded(struct net_device *
|
||||
@@ -6893,6 +6917,57 @@ int dev_set_threaded(struct net_device *
|
||||
}
|
||||
EXPORT_SYMBOL(dev_set_threaded);
|
||||
|
||||
@ -162,7 +162,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
{
|
||||
@@ -11369,6 +11444,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11371,6 +11446,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
local_irq_enable();
|
||||
|
||||
@ -172,7 +172,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#ifdef CONFIG_RPS
|
||||
remsd = oldsd->rps_ipi_list;
|
||||
oldsd->rps_ipi_list = NULL;
|
||||
@@ -11708,6 +11786,7 @@ static int __init net_dev_init(void)
|
||||
@@ -11710,6 +11788,7 @@ static int __init net_dev_init(void)
|
||||
sd->cpu = i;
|
||||
#endif
|
||||
|
||||
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2132,6 +2132,8 @@ struct net_device {
|
||||
@@ -2135,6 +2135,8 @@ struct net_device {
|
||||
struct netdev_hw_addr_list mc;
|
||||
struct netdev_hw_addr_list dev_addrs;
|
||||
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -7606,6 +7606,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -7608,6 +7608,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info,
|
||||
@@ -7657,6 +7699,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -7659,6 +7701,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -7753,6 +7796,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
@@ -7755,6 +7798,7 @@ static void __netdev_upper_dev_unlink(st
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@ -109,7 +109,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER,
|
||||
&changeupper_info.info);
|
||||
|
||||
@@ -8805,6 +8849,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -8807,6 +8851,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2167,7 +2167,7 @@ struct net_device {
|
||||
@@ -2170,7 +2170,7 @@ struct net_device {
|
||||
#if IS_ENABLED(CONFIG_AX25)
|
||||
void *ax25_ptr;
|
||||
#endif
|
||||
|
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/**
|
||||
* napi_disable - prevent NAPI from scheduling
|
||||
@@ -3127,6 +3128,7 @@ struct softnet_data {
|
||||
@@ -3130,6 +3131,7 @@ struct softnet_data {
|
||||
unsigned int processed;
|
||||
unsigned int time_squeeze;
|
||||
unsigned int received_rps;
|
||||
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4606,7 +4606,7 @@ static int napi_schedule_rps(struct soft
|
||||
@@ -4608,7 +4608,7 @@ static int napi_schedule_rps(struct soft
|
||||
struct softnet_data *mysd = this_cpu_ptr(&softnet_data);
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
sd->rps_ipi_next = mysd->rps_ipi_list;
|
||||
mysd->rps_ipi_list = sd;
|
||||
|
||||
@@ -5787,6 +5787,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
@@ -5789,6 +5789,8 @@ static DEFINE_PER_CPU(struct work_struct
|
||||
/* Network device is going away, flush any packets still pending */
|
||||
static void flush_backlog(struct work_struct *work)
|
||||
{
|
||||
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct sk_buff *skb, *tmp;
|
||||
struct softnet_data *sd;
|
||||
|
||||
@@ -5801,8 +5803,17 @@ static void flush_backlog(struct work_st
|
||||
@@ -5803,8 +5805,17 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
|
||||
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
|
||||
__skb_unlink(skb, &sd->process_queue);
|
||||
@@ -5810,7 +5821,16 @@ static void flush_backlog(struct work_st
|
||||
@@ -5812,7 +5823,16 @@ static void flush_backlog(struct work_st
|
||||
input_queue_head_incr(sd);
|
||||
}
|
||||
}
|
||||
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static bool flush_required(int cpu)
|
||||
@@ -5942,6 +5962,7 @@ static int process_backlog(struct napi_s
|
||||
@@ -5944,6 +5964,7 @@ static int process_backlog(struct napi_s
|
||||
}
|
||||
|
||||
rps_lock_irq_disable(sd);
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (skb_queue_empty(&sd->input_pkt_queue)) {
|
||||
/*
|
||||
* Inline a custom version of __napi_complete().
|
||||
@@ -5951,7 +5972,8 @@ static int process_backlog(struct napi_s
|
||||
@@ -5953,7 +5974,8 @@ static int process_backlog(struct napi_s
|
||||
* We can use a plain write instead of clear_bit(),
|
||||
* and we dont need an smp_mb() memory barrier.
|
||||
*/
|
||||
@ -101,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
again = false;
|
||||
} else {
|
||||
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
||||
@@ -6367,6 +6389,55 @@ int dev_set_threaded(struct net_device *
|
||||
@@ -6369,6 +6391,55 @@ int dev_set_threaded(struct net_device *
|
||||
}
|
||||
EXPORT_SYMBOL(dev_set_threaded);
|
||||
|
||||
@ -157,7 +157,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
{
|
||||
@@ -11139,6 +11210,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
@@ -11141,6 +11212,9 @@ static int dev_cpu_dead(unsigned int old
|
||||
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
||||
local_irq_enable();
|
||||
|
||||
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#ifdef CONFIG_RPS
|
||||
remsd = oldsd->rps_ipi_list;
|
||||
oldsd->rps_ipi_list = NULL;
|
||||
@@ -11442,6 +11516,7 @@ static int __init net_dev_init(void)
|
||||
@@ -11444,6 +11518,7 @@ static int __init net_dev_init(void)
|
||||
INIT_CSD(&sd->defer_csd, trigger_rx_softirq, sd);
|
||||
spin_lock_init(&sd->defer_lock);
|
||||
|
||||
|
@ -295,6 +295,7 @@ CONFIG_NR_CPUS=4
|
||||
CONFIG_NVMEM=y
|
||||
# CONFIG_NVMEM_IMX_IIM is not set
|
||||
CONFIG_NVMEM_IMX_OCOTP=y
|
||||
# CONFIG_NVMEM_IMX_OCOTP_ELE is not set
|
||||
# CONFIG_NVMEM_SNVS_LPGPR is not set
|
||||
CONFIG_NVMEM_SYSFS=y
|
||||
CONFIG_OF=y
|
||||
|
@ -35,8 +35,8 @@ CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_ARM_CRYPTO=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
# CONFIG_ARM_IPQ806X_FAB_DEVFREQ is not set
|
||||
# CONFIG_ARM_KRAIT_CACHE_DEVFREQ is not set
|
||||
CONFIG_ARM_IPQ806X_FAB_DEVFREQ=y
|
||||
CONFIG_ARM_KRAIT_CACHE_DEVFREQ=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_ARM_PATCH_IDIV=y
|
||||
@ -71,8 +71,8 @@ CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
|
@ -39,8 +39,8 @@ CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_ARM_CRYPTO=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
# CONFIG_ARM_IPQ806X_FAB_DEVFREQ is not set
|
||||
# CONFIG_ARM_KRAIT_CACHE_DEVFREQ is not set
|
||||
CONFIG_ARM_IPQ806X_FAB_DEVFREQ=y
|
||||
CONFIG_ARM_KRAIT_CACHE_DEVFREQ=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_ARM_PATCH_IDIV=y
|
||||
@ -75,8 +75,8 @@ CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
|
@ -1 +0,0 @@
|
||||
BOARDNAME:=Generic
|
@ -413,6 +413,7 @@ CONFIG_NR_CPUS=16
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_NVMEM=y
|
||||
# CONFIG_NVMEM_IMX_IIM is not set
|
||||
# CONFIG_NVMEM_IMX_OCOTP_ELE is not set
|
||||
# CONFIG_NVMEM_SNVS_LPGPR is not set
|
||||
# CONFIG_NVMEM_SPMI_SDAM is not set
|
||||
CONFIG_NVMEM_SYSFS=y
|
||||
|
@ -334,7 +334,7 @@ Signed-off-by: Wolfram Sang <wsa@kernel.org>
|
||||
|
||||
--- a/drivers/i2c/busses/i2c-mv64xxx.c
|
||||
+++ b/drivers/i2c/busses/i2c-mv64xxx.c
|
||||
@@ -989,7 +989,7 @@ mv64xxx_i2c_probe(struct platform_device
|
||||
@@ -1000,7 +1000,7 @@ mv64xxx_i2c_probe(struct platform_device
|
||||
if (IS_ERR(drv_data->reg_base))
|
||||
return PTR_ERR(drv_data->reg_base);
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
ARCH:=aarch64
|
||||
BOARD:=ipq807x
|
||||
BOARDNAME:=Qualcomm Atheros IPQ807x
|
||||
BOARD:=qualcommax
|
||||
BOARDNAME:=Qualcomm Atheros 802.11ax WiSoC-s
|
||||
FEATURES:=squashfs ramdisk fpu nand rtc emmc
|
||||
KERNELNAME:=Image dtbs
|
||||
CPU_TYPE:=cortex-a53
|
||||
SUBTARGETS:=generic
|
||||
SUBTARGETS:=ipq807x
|
||||
|
||||
KERNEL_PATCHVER:=6.1
|
||||
|
||||
@ -14,8 +14,8 @@ include $(INCLUDE_DIR)/target.mk
|
||||
DEFAULT_PACKAGES += \
|
||||
kmod-usb3 kmod-usb-dwc3 kmod-usb-dwc3-qcom \
|
||||
kmod-leds-gpio kmod-gpio-button-hotplug \
|
||||
kmod-qca-nss-dp qca-ssdk-shell kmod-phy-aquantia \
|
||||
ath11k-firmware-ipq8074 kmod-ath11k-ahb wpad-openssl \
|
||||
kmod-qca-nss-dp qca-ssdk-shell \
|
||||
kmod-ath11k-ahb wpad-openssl \
|
||||
uboot-envtools automount losetup
|
||||
|
||||
$(eval $(call BuildTarget))
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user