From a44e437ac63184aaeb7cd8f76fb8907c75842f29 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Thu, 15 May 2014 09:11:49 +0200 Subject: microblaze: Enable SERIAL_OF_PLATFORM SERIAL_OF_PLATFORM is required for getting 8250 to work. Reported-by: Subbaraya Sundeep Bhatta Signed-off-by: Michal Simek --- arch/microblaze/configs/mmu_defconfig | 1 + arch/microblaze/configs/nommu_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/microblaze/configs/mmu_defconfig b/arch/microblaze/configs/mmu_defconfig index deaf45ab642..e2f6543b91e 100644 --- a/arch/microblaze/configs/mmu_defconfig +++ b/arch/microblaze/configs/mmu_defconfig @@ -49,6 +49,7 @@ CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y +CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_HW_RANDOM is not set CONFIG_XILINX_HWICAP=y CONFIG_I2C=y diff --git a/arch/microblaze/configs/nommu_defconfig b/arch/microblaze/configs/nommu_defconfig index 10b5172283d..a29ebd4a9fc 100644 --- a/arch/microblaze/configs/nommu_defconfig +++ b/arch/microblaze/configs/nommu_defconfig @@ -58,6 +58,7 @@ CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y +CONFIG_SERIAL_OF_PLATFORM=y # CONFIG_HW_RANDOM is not set CONFIG_XILINX_HWICAP=y CONFIG_I2C=y -- cgit v1.2.3-70-g09d2 From 3b3b6853bc9502282e7f53c117a18f20f0581fd9 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 12:56:53 +0200 Subject: microblaze: Return default dma operations Return Microblaze default dma operations and remove bus notifier which setups the same dma operations by default when device is added to the system. Signed-off-by: Michal Simek --- arch/microblaze/include/asm/dma-mapping.h | 14 +++----------- arch/microblaze/kernel/setup.c | 28 ---------------------------- 2 files changed, 3 insertions(+), 39 deletions(-) diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index 46460f1c49c..cf8056011a0 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h @@ -43,8 +43,6 @@ static inline unsigned long device_to_mask(struct device *dev) return 0xfffffffful; } -extern struct dma_map_ops *dma_ops; - /* * Available generic sets of operations */ @@ -52,15 +50,9 @@ extern struct dma_map_ops dma_direct_ops; static inline struct dma_map_ops *get_dma_ops(struct device *dev) { - /* We don't handle the NULL dev case for ISA for now. We could - * do it via an out of line call but it is not needed for now. The - * only ISA DMA device we support is the floppy and we have a hack - * in the floppy driver directly to get a device for us. - */ - if (unlikely(!dev) || !dev->archdata.dma_ops) - return NULL; - - return dev->archdata.dma_ops; + if (dev && dev->archdata.dma_ops) + return dev->archdata.dma_ops; + return &dma_direct_ops; } static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops) diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index 67cc4b282cc..ef011295777 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c @@ -229,31 +229,3 @@ static int __init debugfs_tlb(void) device_initcall(debugfs_tlb); # endif #endif - -static int dflt_bus_notify(struct notifier_block *nb, - unsigned long action, void *data) -{ - struct device *dev = data; - - /* We are only intereted in device addition */ - if (action != BUS_NOTIFY_ADD_DEVICE) - return 0; - - set_dma_ops(dev, &dma_direct_ops); - - return NOTIFY_DONE; -} - -static struct notifier_block dflt_plat_bus_notifier = { - .notifier_call = dflt_bus_notify, - .priority = INT_MAX, -}; - -static int __init setup_bus_notifier(void) -{ - bus_register_notifier(&platform_bus_type, &dflt_plat_bus_notifier); - - return 0; -} - -arch_initcall(setup_bus_notifier); -- cgit v1.2.3-70-g09d2 From 28d1880c6872af3d1c17bc46da5795b9eba04bee Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:29:45 +0200 Subject: microblaze: Do not setup pci_dma_ops pci_dma_ops are dma_direct_ops which are setup by default that's why not setup it again. Signed-off-by: Michal Simek --- arch/microblaze/include/asm/pci.h | 8 -------- arch/microblaze/pci/pci-common.c | 16 ---------------- 2 files changed, 24 deletions(-) diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h index 935f9bec414..dea209cccf7 100644 --- a/arch/microblaze/include/asm/pci.h +++ b/arch/microblaze/include/asm/pci.h @@ -49,14 +49,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) /* We don't do dynamic PCI IRQ allocation */ } -#ifdef CONFIG_PCI -extern void set_pci_dma_ops(struct dma_map_ops *dma_ops); -extern struct dma_map_ops *get_pci_dma_ops(void); -#else /* CONFIG_PCI */ -#define set_pci_dma_ops(d) -#define get_pci_dma_ops() NULL -#endif - #ifdef CONFIG_PCI static inline void pci_dma_burst_advice(struct pci_dev *pdev, enum pci_dma_burst_strategy *strat, diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index 70996cc66aa..99ac12ad4b9 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c @@ -47,24 +47,10 @@ static int global_phb_number; /* Global phb counter */ /* ISA Memory physical address */ resource_size_t isa_mem_base; -static struct dma_map_ops *pci_dma_ops = &dma_direct_ops; - unsigned long isa_io_base; unsigned long pci_dram_offset; static int pci_bus_count; - -void set_pci_dma_ops(struct dma_map_ops *dma_ops) -{ - pci_dma_ops = dma_ops; -} - -struct dma_map_ops *get_pci_dma_ops(void) -{ - return pci_dma_ops; -} -EXPORT_SYMBOL(get_pci_dma_ops); - struct pci_controller *pcibios_alloc_controller(struct device_node *dev) { struct pci_controller *phb; @@ -886,8 +872,6 @@ void pcibios_setup_bus_devices(struct pci_bus *bus) */ set_dev_node(&dev->dev, pcibus_to_node(dev->bus)); - /* Hook up default DMA ops */ - set_dma_ops(&dev->dev, pci_dma_ops); dev->dev.archdata.dma_data = (void *)PCI_DRAM_OFFSET; /* Read default IRQs and fixup if necessary */ -- cgit v1.2.3-70-g09d2 From 193bca5934db1ca1d0ffcedf551030ff5556a07c Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:37:02 +0200 Subject: microblaze: Cleanup PCI_DRAM_OFFSET handling PCI_DRAM_OFFSET/pci_dram_offset is 0 all the time and there is no difference for PCI and !PCI cases. Also remove the whole code which setup archdata.dma_data which is completely unused. Signed-off-by: Michal Simek --- arch/microblaze/include/asm/device.h | 1 - arch/microblaze/include/asm/io.h | 3 --- arch/microblaze/kernel/dma.c | 23 +++-------------------- arch/microblaze/pci/pci-common.c | 3 --- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/arch/microblaze/include/asm/device.h b/arch/microblaze/include/asm/device.h index 123b2fe72d0..eb639b479c7 100644 --- a/arch/microblaze/include/asm/device.h +++ b/arch/microblaze/include/asm/device.h @@ -14,7 +14,6 @@ struct device_node; struct dev_archdata { /* DMA operations on that device */ struct dma_map_ops *dma_ops; - void *dma_data; }; struct pdev_archdata { diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h index 1e4c3329f62..433751b2a00 100644 --- a/arch/microblaze/include/asm/io.h +++ b/arch/microblaze/include/asm/io.h @@ -19,17 +19,14 @@ #ifndef CONFIG_PCI #define _IO_BASE 0 #define _ISA_MEM_BASE 0 -#define PCI_DRAM_OFFSET 0 #else #define _IO_BASE isa_io_base #define _ISA_MEM_BASE isa_mem_base -#define PCI_DRAM_OFFSET pci_dram_offset struct pci_dev; extern void pci_iounmap(struct pci_dev *dev, void __iomem *); #define pci_iounmap pci_iounmap extern unsigned long isa_io_base; -extern unsigned long pci_dram_offset; extern resource_size_t isa_mem_base; #endif diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c index da68d00fd08..8f9b99508e7 100644 --- a/arch/microblaze/kernel/dma.c +++ b/arch/microblaze/kernel/dma.c @@ -13,23 +13,6 @@ #include #include -/* - * Generic direct DMA implementation - * - * This implementation supports a per-device offset that can be applied if - * the address at which memory is visible to devices is not 0. Platform code - * can set archdata.dma_data to an unsigned long holding the offset. By - * default the offset is PCI_DRAM_OFFSET. - */ - -static unsigned long get_dma_direct_offset(struct device *dev) -{ - if (likely(dev)) - return (unsigned long)dev->archdata.dma_data; - - return PCI_DRAM_OFFSET; /* FIXME Not sure if is correct */ -} - #define NOT_COHERENT_CACHE static void *dma_direct_alloc_coherent(struct device *dev, size_t size, @@ -51,7 +34,7 @@ static void *dma_direct_alloc_coherent(struct device *dev, size_t size, return NULL; ret = page_address(page); memset(ret, 0, size); - *dma_handle = virt_to_phys(ret) + get_dma_direct_offset(dev); + *dma_handle = virt_to_phys(ret); return ret; #endif @@ -77,7 +60,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, /* FIXME this part of code is untested */ for_each_sg(sgl, sg, nents, i) { - sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); + sg->dma_address = sg_phys(sg); __dma_sync(page_to_phys(sg_page(sg)) + sg->offset, sg->length, direction); } @@ -104,7 +87,7 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev, struct dma_attrs *attrs) { __dma_sync(page_to_phys(page) + offset, size, direction); - return page_to_phys(page) + offset + get_dma_direct_offset(dev); + return page_to_phys(page) + offset; } static inline void dma_direct_unmap_page(struct device *dev, diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index 99ac12ad4b9..2cf412f4db4 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c @@ -48,7 +48,6 @@ static int global_phb_number; /* Global phb counter */ resource_size_t isa_mem_base; unsigned long isa_io_base; -unsigned long pci_dram_offset; static int pci_bus_count; struct pci_controller *pcibios_alloc_controller(struct device_node *dev) @@ -872,8 +871,6 @@ void pcibios_setup_bus_devices(struct pci_bus *bus) */ set_dev_node(&dev->dev, pcibus_to_node(dev->bus)); - dev->dev.archdata.dma_data = (void *)PCI_DRAM_OFFSET; - /* Read default IRQs and fixup if necessary */ dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); } -- cgit v1.2.3-70-g09d2 From 635eca2d31bfc44b519a50e0cdf9ad9125179906 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:36:54 +0200 Subject: microblaze: Clean device dma_ops structure No code is setting up dma_operation for device. Use dma_direct_ops for all cases. Signed-off-by: Michal Simek --- arch/microblaze/include/asm/device.h | 2 -- arch/microblaze/include/asm/dma-mapping.h | 7 ------- 2 files changed, 9 deletions(-) diff --git a/arch/microblaze/include/asm/device.h b/arch/microblaze/include/asm/device.h index eb639b479c7..aae3b3c6a03 100644 --- a/arch/microblaze/include/asm/device.h +++ b/arch/microblaze/include/asm/device.h @@ -12,8 +12,6 @@ struct device_node; struct dev_archdata { - /* DMA operations on that device */ - struct dma_map_ops *dma_ops; }; struct pdev_archdata { diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index cf8056011a0..48180ea8633 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h @@ -50,16 +50,9 @@ extern struct dma_map_ops dma_direct_ops; static inline struct dma_map_ops *get_dma_ops(struct device *dev) { - if (dev && dev->archdata.dma_ops) - return dev->archdata.dma_ops; return &dma_direct_ops; } -static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops) -{ - dev->archdata.dma_ops = ops; -} - static inline int dma_supported(struct device *dev, u64 mask) { struct dma_map_ops *ops = get_dma_ops(dev); -- cgit v1.2.3-70-g09d2 From ff97ba6d2f69d97aca4428ab012a13383a10892c Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:08:44 +0200 Subject: microblaze: Remove device_to_mask Completely unused function - remove it. Signed-off-by: Michal Simek --- arch/microblaze/include/asm/dma-mapping.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index 48180ea8633..ab353723076 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h @@ -35,14 +35,6 @@ #define __dma_alloc_coherent(dev, gfp, size, handle) NULL #define __dma_free_coherent(size, addr) ((void)0) -static inline unsigned long device_to_mask(struct device *dev) -{ - if (dev->dma_mask && *dev->dma_mask) - return *dev->dma_mask; - /* Assume devices without mask can take 32 bit addresses */ - return 0xfffffffful; -} - /* * Available generic sets of operations */ -- cgit v1.2.3-70-g09d2 From 6b3f246e398cc9afc61e3a65a116fabb6d5ca7aa Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:12:25 +0200 Subject: microblaze: Do not setup empty unmap_sg function No reason to setup empty function. Core is checking if this function should be called or not. Signed-off-by: Michal Simek --- arch/microblaze/kernel/dma.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c index 8f9b99508e7..4633c36c1b3 100644 --- a/arch/microblaze/kernel/dma.c +++ b/arch/microblaze/kernel/dma.c @@ -68,12 +68,6 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, return nents; } -static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction direction, - struct dma_attrs *attrs) -{ -} - static int dma_direct_dma_supported(struct device *dev, u64 mask) { return 1; @@ -164,7 +158,6 @@ struct dma_map_ops dma_direct_ops = { .alloc = dma_direct_alloc_coherent, .free = dma_direct_free_coherent, .map_sg = dma_direct_map_sg, - .unmap_sg = dma_direct_unmap_sg, .dma_supported = dma_direct_dma_supported, .map_page = dma_direct_map_page, .unmap_page = dma_direct_unmap_page, -- cgit v1.2.3-70-g09d2 From bf5db2fbd65e6225a8aa749d4e788e223518d486 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 16 May 2014 13:16:49 +0200 Subject: microblaze: Use generic device.h pdev_archdata dma_mask is completely unused. Use generic device.h Signed-off-by: Michal Simek --- arch/microblaze/include/asm/Kbuild | 1 + arch/microblaze/include/asm/device.h | 23 ----------------------- drivers/of/platform.c | 3 --- 3 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 arch/microblaze/include/asm/device.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index c98ed95c054..35b3ecaf25d 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -2,6 +2,7 @@ generic-y += barrier.h generic-y += clkdev.h generic-y += cputime.h +generic-y += device.h generic-y += exec.h generic-y += hash.h generic-y += mcs_spinlock.h diff --git a/arch/microblaze/include/asm/device.h b/arch/microblaze/include/asm/device.h deleted file mode 100644 index aae3b3c6a03..00000000000 --- a/arch/microblaze/include/asm/device.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Arch specific extensions to struct device - * - * This file is subject to the terms and conditions of the GNU General Public - * License v2. See the file "COPYING" in the main directory of this archive - * for more details. - */ - -#ifndef _ASM_MICROBLAZE_DEVICE_H -#define _ASM_MICROBLAZE_DEVICE_H - -struct device_node; - -struct dev_archdata { -}; - -struct pdev_archdata { - u64 dma_mask; -}; - -#endif /* _ASM_MICROBLAZE_DEVICE_H */ - - diff --git a/drivers/of/platform.c b/drivers/of/platform.c index bd47fbc53dc..a83b9878415 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -174,9 +174,6 @@ struct platform_device *of_device_alloc(struct device_node *np, } dev->dev.of_node = of_node_get(np); -#if defined(CONFIG_MICROBLAZE) - dev->dev.dma_mask = &dev->archdata.dma_mask; -#endif dev->dev.parent = parent; if (bus_id) -- cgit v1.2.3-70-g09d2 From 8c770db925c0695af63f67161668df1dcfbe7172 Mon Sep 17 00:00:00 2001 From: Paul Bolle Date: Tue, 20 May 2014 11:55:50 +0200 Subject: microblaze: remove check for CONFIG_XILINX_CONSOLE There's been a check for CONFIG_XILINX_CONSOLE since v2.6.30. But the Kconfig symbol XILINX_CONSOLE was never added. Remove this check. And, since DUMMY_CONSOLE depends on VT, we can now drop the check for CONFIG_VT. Signed-off-by: Paul Bolle Signed-off-by: Michal Simek --- arch/microblaze/kernel/setup.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index ef011295777..ab5b488e1fd 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c @@ -71,13 +71,9 @@ void __init setup_arch(char **cmdline_p) xilinx_pci_init(); -#ifdef CONFIG_VT -#if defined(CONFIG_XILINX_CONSOLE) - conswitchp = &xil_con; -#elif defined(CONFIG_DUMMY_CONSOLE) +#if defined(CONFIG_DUMMY_CONSOLE) conswitchp = &dummy_con; #endif -#endif } #ifdef CONFIG_MTD_UCLINUX -- cgit v1.2.3-70-g09d2 From 225fba216261b0e24273f5f4eee504e3c7bd0255 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Wed, 4 Jun 2014 14:03:44 +0200 Subject: microblaze: Fix typo in head.S s/substract/subtract/ Signed-off-by: Antonio Ospite Cc: Michal Simek Cc: "Edgar E. Iglesias" Signed-off-by: Michal Simek --- arch/microblaze/kernel/head.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/microblaze/kernel/head.S b/arch/microblaze/kernel/head.S index 17645b2e2f0..4655ff342c6 100644 --- a/arch/microblaze/kernel/head.S +++ b/arch/microblaze/kernel/head.S @@ -205,7 +205,7 @@ GT4: /* r11 contains the rest - will be either 1 or 4 */ GT16: /* TLB0 is 16MB */ addik r9, r0, 0x1000000 /* means TLB0 is 16MB */ TLB1: - /* must be used r2 because of substract if failed */ + /* must be used r2 because of subtract if failed */ addik r2, r11, -0x0400000 bgei r2, GT20 /* size is greater than 16MB */ /* size is >16MB and <20MB */ -- cgit v1.2.3-70-g09d2