My collection of IXP4xx patches for the next window
Subsystems (6)
Hi,
this is (more or less) what I wish to push in the next window:
Arnd Bergmann (1):
ARM: IXP4xx: use __iomem pointers for MMIO
Krzysztof Ha?asa (10):
IXP4xx: Fix Goramo MultiLink platform compilation.
IXP4xx: Fix off-by-one bug in Goramo MultiLink platform.
IXP4xx: HW pseudo-random generator is available on IXP45x/46x only.
IXP4xx: ixp4xx_crypto driver requires Queue Manager and NPE drivers.
ARM: fix DMA-bounce code to allow sync from_device and to_device with bidirectional mappings.
IXP4xx: Remove time limit for PCI TRDY to enable use of slow devices.
WAN: Remove redundant HDLC info printed by IXP4xx HSS driver.
IXP4xx crypto: MOD_AES{128,192,256} already include key size.
IXP4xx: Always ioremap() Queue Manager MMIO region at boot.
IXP4xx: map CPU config registers within VMALLOC region.
Tim Gardner (1):
ixp4xx: Declare MODULE_FIRMWARE usage
I will send not yet posted patches. Please comment.
Signature · 1 line
Krzysztof Halasa
PATCH 1/10 IXP4xx: Fix Goramo MultiLink platform compilation.
arch/arm/mach-ixp4xx/goramo_mlr.c +1 -0
@@ -15,6 +15,7 @@#include <asm/mach/arch.h> #include <asm/mach/flash.h> #include <asm/mach/pci.h> +#include <asm/system_info.h> #define SLOT_ETHA 0x0B/* IDSEL = AD21 */ #define SLOT_ETHB 0x0C/* IDSEL = AD20 */
Signature · 1 line
Krzysztof Halasa
PATCH 2/10 IXP4xx: Fix off-by-one bug in Goramo MultiLink platform.
In reply to Krzysztof Halasaarch/arm/mach-ixp4xx/goramo_mlr.c +1 -1
@@ -330,7 +330,7 @@ static struct platform_device device_hss_tab[] = { }; -static struct platform_device *device_tab[6 ]__initdata = { +static struct platform_device *device_tab[7 ]__initdata = { &device_flash,/* index 0 */ };
Signature · 1 line
Krzysztof Halasa
PATCH 3/10 IXP4xx: HW pseudo-random generator is available on IXP45x/46x only.
In reply to Krzysztof Halasadrivers/char/hw_random/Kconfig +3 -3
@@ -127,12 +127,12 @@ config HW_RANDOM_VIA If unsure, say Y. config HW_RANDOM_IXP4XX - tristate "Intel IXP4xx NPU HW Random Number Generator support" + tristate "Intel IXP4xx NPU HW Pseudo-Random Number Generator support" depends on HW_RANDOM && ARCH_IXP4XX default HW_RANDOM ---help--- - This driver provides kernel-side support for the Random - Number Generator hardware found on the Intel IXP4xx NPU. + This driver provides kernel-side support for the Pseudo-Random + Number Generator hardware found on the Intel IXP45x/46x NPU. To compile this driver as a module, choose M here: the module will be called ixp4xx-rng.
drivers/char/hw_random/ixp4xx-rng.c +4 -1
@@ -45,6 +45,9 @@ static int __init ixp4xx_rng_init(void)void __iomem * rng_base;int err; +if (!cpu_is_ixp46x ())/* includes IXP455 */ +return -ENOSYS ; + rng_base =ioremap (0x70002100 ,4 );if (!rng_base)return -ENOMEM ;
@@ -68,5 +71,5 @@ module_init(ixp4xx_rng_init);module_exit (ixp4xx_rng_exit);MODULE_AUTHOR ("Deepak Saxena <[email protected]>" ); -MODULE_DESCRIPTION ("H/W Random Number Generator (RNG) driver for IXP4xx" ); +MODULE_DESCRIPTION ("H/W Pseudo-Random Number Generator (RNG) driver for IXP45x/46x" );MODULE_LICENSE ("GPL" );
Signature · 1 line
Krzysztof Halasa
PATCH 4/10 IXP4xx: ixp4xx_crypto driver requires Queue Manager and NPE drivers.
In reply to Krzysztof Halasadrivers/crypto/Kconfig +1 -1
@@ -224,7 +224,7 @@ config CRYPTO_DEV_TALITOS config CRYPTO_DEV_IXP4XX tristate "Driver for IXP4xx crypto hardware acceleration" - depends on ARCH_IXP4XX + depends on ARCH_IXP4XX && IXP4XX_QMGR && IXP4XX_NPE select CRYPTO_DES select CRYPTO_ALGAPI select CRYPTO_AUTHENC
Signature · 1 line
Krzysztof Halasa
PATCH 5/10 ARM: fix DMA-bounce code to allow sync from_device and to_device with bidirectional mappings.
In reply to Krzysztof Halasaarch/arm/common/dmabounce.c +2 -2
@@ -375,7 +375,7 @@ static int __dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, off = addr - buf->safe_dma_addr; -BUG_ON (buf->direction != dir); +BUG_ON (buf->direction != dir && buf->direction !=DMA_BIDIRECTIONAL ); dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x off=%#lx) mapped to %p (dma=%#x)\n", __func__, buf->ptr, virt_to_dma(dev, buf->ptr), off,
@@ -415,7 +415,7 @@ static int __dmabounce_sync_for_device(struct device *dev, dma_addr_t addr, off = addr - buf->safe_dma_addr; -BUG_ON (buf->direction != dir); +BUG_ON (buf->direction != dir && buf->direction !=DMA_BIDIRECTIONAL ); dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x off=%#lx) mapped to %p (dma=%#x)\n", __func__, buf->ptr, virt_to_dma(dev, buf->ptr), off,
Signature · 1 line
Krzysztof Halasa
PATCH 6/10 IXP4xx: Remove time limit for PCI TRDY to enable use of slow devices.
In reply to Krzysztof Halasaarch/arm/mach-ixp4xx/common-pci.c +1 -0
@@ -410,6 +410,7 @@ void __init ixp4xx_pci_preinit(void)* Enable the IO window to be way up high, at 0xfffffc00 */ local_write_config (PCI_BASE_ADDRESS_5 ,4 ,0xfffffc01 ); +local_write_config (0x40 ,4 ,0x000080FF );/* No TRDY time limit */ }else {printk ("PCI: IXP4xx is target - No bus scan performed\n" ); }
Signature · 1 line
Krzysztof Halasa
PATCH 7/10 WAN: Remove redundant HDLC info printed by IXP4xx HSS driver.
In reply to Krzysztof Halasadrivers/net/wan/ixp4xx_hss.c +1 -1
@@ -1363,7 +1363,7 @@ static int __devinit hss_init_one(struct platform_device *pdev)platform_set_drvdata (pdev, port); -netdev_info (dev,"HSS-%i\n" , port->id); +netdev_info (dev,"initialized\n" );return 0 ; err_free_netdev:
Signature · 1 line
Krzysztof Halasa
PATCH 8/10 IXP4xx crypto: MOD_AES{128, 192, 256} already include key size.
In reply to Krzysztof Halasadrivers/crypto/ixp4xx_crypto.c +6 -6
@@ -750,12 +750,12 @@ static int setup_cipher(struct crypto_tfm *tfm, int encrypt, }if (cipher_cfg &MOD_AES ) {switch (key_len) { -case 16 : keylen_cfg =MOD_AES128 |KEYLEN_128 ;break ; -case 24 : keylen_cfg =MOD_AES192 |KEYLEN_192 ;break ; -case 32 : keylen_cfg =MOD_AES256 |KEYLEN_256 ;break ; -default : - *flags |=CRYPTO_TFM_RES_BAD_KEY_LEN ; -return -EINVAL ; +case 16 : keylen_cfg =MOD_AES128 ;break ; +case 24 : keylen_cfg =MOD_AES192 ;break ; +case 32 : keylen_cfg =MOD_AES256 ;break ; +default : + *flags |=CRYPTO_TFM_RES_BAD_KEY_LEN ; +return -EINVAL ; } cipher_cfg |= keylen_cfg; }else if (cipher_cfg &MOD_3DES ) {
Signature · 1 line
Krzysztof Halasa
PATCH 9/10 IXP4xx: Always ioremap() Queue Manager MMIO region at boot.
In reply to Krzysztof HalasaIt doesn't make much sense to map QMgr dynamically - we almost always need it and the static mapping will be needed for little-endian data-coherent operation (to make QMgr region value-coherent).
arch/arm/mach-ixp4xx/common.c +5 -0
@@ -67,6 +67,11 @@ static struct map_desc ixp4xx_io_desc[] __initdata = { .pfn = __phys_to_pfn(IXP4XX_PCI_CFG_BASE_PHYS), .length = IXP4XX_PCI_CFG_REGION_SIZE, .type = MT_DEVICE + }, { /* Queue Manager */ + .virtual = IXP4XX_QMGR_BASE_VIRT, + .pfn = __phys_to_pfn(IXP4XX_QMGR_BASE_PHYS), + .length = IXP4XX_QMGR_REGION_SIZE, + .type = MT_DEVICE }, #ifdef CONFIG_DEBUG_LL { /* Debug UART mapping */
arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h +4 -3
@@ -30,19 +30,20 @@* * 0x50000000 0x10000000 ioremap'd EXP BUS * -* 0x6000000 0x00004000 ioremap'd QMgr +* 0x60000000 0x00004000 0xffbe7000 QMgr * -* 0xC0000000 0x00001000 0xffbff000 PCI CFG +* 0xC8000000 0x00013000 0xffbeb000 On-Chip Peripherals * * 0xC4000000 0x00001000 0xffbfe000 EXP CFG * -* 0xC8000000 0x00013000 0xffbeb000 On-Chip Peripherals +* 0xC0000000 0x00001000 0xffbff000 PCI CFG */ /* * Queue Manager */ #define IXP4XX_QMGR_BASE_PHYS (0x60000000) +#define IXP4XX_QMGR_BASE_VIRT IOMEM(0xFFBE7000)#define IXP4XX_QMGR_REGION_SIZE (0x00004000)/*
arch/arm/mach-ixp4xx/include/mach/qmgr.h +6 -6
@@ -86,7 +86,7 @@ void qmgr_release_queue(unsigned int queue);static inline void qmgr_put_entry (unsigned int queue,u32 val) { -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;#if DEBUG_QMGR BUG_ON (!qmgr_queue_descs[queue]);/* not yet requested */
@@ -99,7 +99,7 @@ static inline void qmgr_put_entry(unsigned int queue, u32 val)static inline u32 qmgr_get_entry (unsigned int queue) {u32 val; -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ; val =__raw_readl (&qmgr_regs->acc[queue][0 ]);#if DEBUG_QMGR BUG_ON (!qmgr_queue_descs[queue]);/* not yet requested */
@@ -112,14 +112,14 @@ static inline u32 qmgr_get_entry(unsigned int queue)static inline int __qmgr_get_stat1 (unsigned int queue) { -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;return (__raw_readl (&qmgr_regs->stat1[queue >>3 ]) >> ((queue &7 ) <<2 )) &0xF ; }static inline int __qmgr_get_stat2 (unsigned int queue) { -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;BUG_ON (queue >=HALF_QUEUES );return (__raw_readl (&qmgr_regs->stat2[queue >>4 ]) >> ((queue &0xF ) <<1 )) &0x3 ;
@@ -145,7 +145,7 @@ static inline int qmgr_stat_empty(unsigned int queue)*/ static inline int qmgr_stat_below_low_watermark (unsigned int queue) { -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;if (queue >=HALF_QUEUES )return (__raw_readl (&qmgr_regs->statne_h) >> (queue -HALF_QUEUES )) &0x01 ;
@@ -172,7 +172,7 @@ static inline int qmgr_stat_above_high_watermark(unsigned int queue)*/ static inline int qmgr_stat_full (unsigned int queue) { -extern struct qmgr_regs __iomem *qmgr_regs; +const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;if (queue >=HALF_QUEUES )return (__raw_readl (&qmgr_regs->statf_h) >> (queue -HALF_QUEUES )) &0x01 ;
arch/arm/mach-ixp4xx/ixp4xx_qmgr.c +2 -12
@@ -14,7 +14,7 @@#include <linux/module.h> #include <mach/qmgr.h> -struct qmgr_regs __iomem *qmgr_regs; +static const struct qmgr_regs __iomem *qmgr_regs = (void __iomem *)IXP4XX_QMGR_BASE_VIRT ;static struct resource *mem_res;static spinlock_t qmgr_lock;static u32 used_sram_bitmap[4 ];/* 128 16-dword pages */
@@ -32,7 +32,7 @@ void qmgr_set_irq(unsigned int queue, int src,spin_lock_irqsave (&qmgr_lock, flags);if (queue <HALF_QUEUES ) { -u32 __iomem *reg; +const u32 __iomem *reg;int bit;BUG_ON (src >QUEUE_IRQ_SRC_NOT_FULL ); reg = &qmgr_regs->irqsrc[queue >>3 ];/* 8 queues per u32 */
@@ -293,12 +293,6 @@ static int qmgr_init(void)if (mem_res ==NULL )return -EBUSY ; - qmgr_regs =ioremap (IXP4XX_QMGR_BASE_PHYS ,IXP4XX_QMGR_REGION_SIZE ); -if (qmgr_regs ==NULL ) { - err = -ENOMEM ; - goto error_map; - } -/* reset qmgr registers */ for (i =0 ; i <4 ; i++) {__raw_writel (0x33333333 , &qmgr_regs->stat1[i]);
@@ -347,8 +341,6 @@ static int qmgr_init(void) error_irq2:free_irq (IRQ_IXP4XX_QM1 ,NULL ); error_irq: -iounmap (qmgr_regs); -error_map:release_mem_region (IXP4XX_QMGR_BASE_PHYS ,IXP4XX_QMGR_REGION_SIZE );return err; }
@@ -359,7 +351,6 @@ static void qmgr_remove(void)free_irq (IRQ_IXP4XX_QM2 ,NULL );synchronize_irq (IRQ_IXP4XX_QM1 );synchronize_irq (IRQ_IXP4XX_QM2 ); -iounmap (qmgr_regs);release_mem_region (IXP4XX_QMGR_BASE_PHYS ,IXP4XX_QMGR_REGION_SIZE ); }
@@ -369,7 +360,6 @@ module_exit(qmgr_remove);MODULE_LICENSE ("GPL v2" );MODULE_AUTHOR ("Krzysztof Halasa" ); -EXPORT_SYMBOL (qmgr_regs);EXPORT_SYMBOL (qmgr_set_irq);EXPORT_SYMBOL (qmgr_enable_irq);EXPORT_SYMBOL (qmgr_disable_irq);
Signature · 1 line
Krzysztof Halasa
PATCH 10/10 IXP4xx: map CPU config registers within VMALLOC region.
In reply to Krzysztof HalasaThe extra 1MB-aligned debug console mapping is no longer needed as well.
arch/arm/mach-ixp4xx/common.c +0 -8
@@ -73,14 +73,6 @@ static struct map_desc ixp4xx_io_desc[] __initdata = { .length = IXP4XX_QMGR_REGION_SIZE, .type =MT_DEVICE }, -#ifdef CONFIG_DEBUG_LL - {/* Debug UART mapping */ - .virtual = (unsigned long)IXP4XX_DEBUG_UART_BASE_VIRT, - .pfn = __phys_to_pfn(IXP4XX_DEBUG_UART_BASE_PHYS), - .length = IXP4XX_DEBUG_UART_REGION_SIZE, - .type = MT_DEVICE - } -#endif };void __init ixp4xx_map_io (void )
arch/arm/mach-ixp4xx/include/mach/debug-macro.S +2 -2
@@ -17,8 +17,8 @@ #else mov \rp, #0 #endif - orr \rv, \rp, #0xff000000 @ virtual - orr \rv, \rv, #0x00b00000 + orr \rv, \rp, #0xfe000000 @ virtual + orr \rv, \rv, #0x00f00000 orr \rp, \rp, #0xc8000000 @ physical .endm
arch/arm/mach-ixp4xx/include/mach/ixp4xx-regs.h +19 -28
71 lines not on this page · raw message
Signature · 1 line
Krzysztof Halasa