MIPS: Netlogic: Fix USB block's coherent DMA mask
PATCH 1/2 MIPS: Netlogic: Fix USB block's coherent DMA mask
From: Ganesan Ramalingam <[email protected]>
The on-chip USB controller on Netlogic XLP does not suppport DMA beyond 32-bit physical address. Set the coherent_dma_mask of the USB in its PCI fixup to support this.
Signed-off-by Ganesan Ramalingam <[email protected]>
Signed-off-by Jayachandran C <[email protected]>
--- arch/mips/netlogic/xlp/usb-init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/netlogic/xlp/usb-init.c +1 -1
@@ -119,7 +119,7 @@ static u64 xlp_usb_dmamask = ~(u32)0;static void nlm_usb_fixup_final (struct pci_dev *dev) { dev->dev.dma_mask = &xlp_usb_dmamask; - dev->dev.coherent_dma_mask =DMA_BIT_MASK (64 ); + dev->dev.coherent_dma_mask =DMA_BIT_MASK (32 );switch (dev->devfn) {case 0x10 : dev->irq =PIC_EHCI_0_IRQ ;
Signature · 1 line
1.7.9.5
PATCH 2/2 MIPS: Netlogic: Add XLP PIC irqdomain
Add a legacy irq domain for the XLP PIC interrupts. This will be used when interrupts are assigned from the device tree. This change is required after commit c5cdc67 "irqdomain: Remove temporary MIPS workaround code".
Signed-off-by Jayachandran C <[email protected]>
--- arch/mips/netlogic/common/irq.c | 68 ++++++++++++++++++++++++++++++------ arch/mips/netlogic/dts/xlp_evp.dts | 3 +- arch/mips/netlogic/dts/xlp_svp.dts | 3 +- 3 files changed, 61 insertions(+), 13 deletions(-)
arch/mips/netlogic/common/irq.c +57 -11
@@ -40,6 +40,10 @@#include <linux/slab.h> #include <linux/irq.h> +#include <linux/irqdomain.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <asm/errno.h> #include <asm/signal.h> #include <asm/ptrace.h>
@@ -223,17 +227,6 @@ static void nlm_init_node_irqs(int node) nodep->irqmask = irqmask; } -void __init arch_init_irq (void ) -{ -/* Initialize the irq descriptors */ -nlm_init_percpu_irqs (); -nlm_init_node_irqs (0 ); -write_c0_eimr (nlm_current_node ()->irqmask); -#if defined(CONFIG_CPU_XLR ) -nlm_setup_fmn_irq (); -#endif -} -void nlm_smp_irq_init (int hwcpuid) {int node, cpu;
@@ -266,3 +259,56 @@ asmlinkage void plat_irq_dispatch(void)/* top level irq handling */ do_IRQ (nlm_irq_to_xirq (node, i)); } + +#ifdef CONFIG_OF +static struct irq_domain *xlp_pic_domain; + +static const struct irq_domain_ops xlp_pic_irq_domain_ops = { + .xlate = irq_domain_xlate_onetwocell, +}; + +static int __init xlp_of_pic_init (struct device_node *node, +struct device_node *parent) +{ +const int n_picirqs =PIC_IRT_LAST_IRQ -PIC_IRQ_BASE +1 ; +struct resource res; +int socid, ret; + +/* we need a hack to get the PIC's SoC chip id */ + ret =of_address_to_resource (node,0 , &res); +if (ret <0 ) { +pr_err ("PIC %s: reg property not found!\n" , node->name); +return -EINVAL ; + } + socid = (res.start >>18 ) &0x3 ; + xlp_pic_domain =irq_domain_add_legacy (node, n_picirqs, +nlm_irq_to_xirq (socid,PIC_IRQ_BASE ),PIC_IRQ_BASE , + &xlp_pic_irq_domain_ops,NULL ); +if (xlp_pic_domain ==NULL ) { +pr_err ("PIC %s: Creating legacy domain failed!\n" , node->name); +return -EINVAL ; + } +pr_info ("Node %d: IRQ domain created for PIC@%pa\n" , socid, + &res.start); +return 0 ; +} + +static struct of_device_id __initdata xlp_pic_irq_ids[] = { + { .compatible ="netlogic,xlp-pic" , .data = xlp_of_pic_init }, + {}, +}; +#endif + +void __init arch_init_irq (void ) +{ +/* Initialize the irq descriptors */ +nlm_init_percpu_irqs (); +nlm_init_node_irqs (0 ); +write_c0_eimr (nlm_current_node ()->irqmask); +#if defined(CONFIG_CPU_XLR ) +nlm_setup_fmn_irq (); +#endif +#if defined(CONFIG_OF ) +of_irq_init (xlp_pic_irq_ids); +#endif +}
arch/mips/netlogic/dts/xlp_evp.dts +2 -1
@@ -76,10 +76,11 @@ }; }; pic: pic@4000 { - interrupt-controller; + compatible = "netlogic,xlp-pic"; #address-cells = <0>; #interrupt-cells = <1>; reg = <0 0x4000 0x200>; + interrupt-controller; }; nor_flash@1,0 {
arch/mips/netlogic/dts/xlp_svp.dts +2 -1
@@ -76,10 +76,11 @@ }; }; pic: pic@4000 { - interrupt-controller; + compatible = "netlogic,xlp-pic"; #address-cells = <0>; #interrupt-cells = <1>; reg = <0 0x4000 0x200>; + interrupt-controller; }; nor_flash@1,0 {
Signature · 1 line
1.7.9.5