move *_mbus_dram_info out of platform_data
Subsystems (12)
Andrew Lunn
maintainercover move *_mbus_dram_info out of platform_data
As a step towords device tree support for orion based system, this patchset removes the *_mbus_dram_info from platform_data for various devices and replaces it with one instance of the strucutre in plat-orion and a getter function to retreive it. In order that none orion usage of these drivers still work, a dummy function is also provided which returns NULL, indicating it is not necassary to perform address map setup.
Boot tested on kirkwood, compile tested on other orion based systems.
Andrew Lunn (4):
[orion] Consolidate the address map setup on Orion based platforms. [orion] Move the *_mbus_dram_info structure into the orion platform
and call it orion_mbus_dram_info everywhere.
[orion] Get address map from plat-orion instead of via platform_data. [orion] Remove address map info from all platform data strucutures.
arch/arm/mach-dove/addr-map.c | 121 +++++++---------- arch/arm/mach-dove/common.c | 16 +-- arch/arm/mach-dove/common.h | 1 - arch/arm/mach-dove/pcie.c | 4 +- arch/arm/mach-kirkwood/addr-map.c | 137 +++++-------------- arch/arm/mach-kirkwood/common.c | 17 +-- arch/arm/mach-kirkwood/common.h | 1 - arch/arm/mach-kirkwood/mpp.c | 1 - arch/arm/mach-kirkwood/pcie.c | 4 +- arch/arm/mach-mv78xx0/addr-map.c | 102 +++------------ arch/arm/mach-mv78xx0/common.c | 22 ++-- arch/arm/mach-mv78xx0/common.h | 1 - arch/arm/mach-mv78xx0/mpp.c | 1 - arch/arm/mach-mv78xx0/pcie.c | 4 +- arch/arm/mach-orion5x/addr-map.c | 146 +++++++-------------- arch/arm/mach-orion5x/common.c | 23 +--- arch/arm/mach-orion5x/common.h | 3 +- arch/arm/mach-orion5x/include/mach/orion5x.h | 2 +- arch/arm/mach-orion5x/mpp.c | 1 - arch/arm/mach-orion5x/pci.c | 5 +- arch/arm/plat-orion/Makefile | 2 +- arch/arm/plat-orion/addr-map.c | 174 +++++++++++++++++++++++++ arch/arm/plat-orion/common.c | 43 ++----- arch/arm/plat-orion/include/plat/addr-map.h | 53 ++++++++ arch/arm/plat-orion/include/plat/audio.h | 3 - arch/arm/plat-orion/include/plat/common.h | 17 +-- arch/arm/plat-orion/include/plat/ehci-orion.h | 1 - arch/arm/plat-orion/include/plat/mv_xor.h | 6 - arch/arm/plat-orion/include/plat/mvsdio.h | 1 - arch/arm/plat-orion/include/plat/pcie.h | 3 +- arch/arm/plat-orion/pcie.c | 6 +- drivers/ata/sata_mv.c | 19 ++- drivers/dma/mv_xor.c | 11 +- drivers/mmc/host/mvsdio.c | 13 +- drivers/net/mv643xx_eth.c | 10 +- drivers/usb/host/ehci-orion.c | 10 +- include/linux/ata_platform.h | 3 - include/linux/mbus.h | 13 ++- sound/soc/kirkwood/kirkwood-dma.c | 15 ++- 39 files changed, 493 insertions(+), 522 deletions(-) create mode 100644 arch/arm/plat-orion/addr-map.c create mode 100644 arch/arm/plat-orion/include/plat/addr-map.h
Signature · 1 line
1.7.2.5
Andrew Lunn
maintainerPATCH 1/4 Consolidate the address map setup on Orion based platforms.
Compile tested on Dove, orion5x, mv78xx0. Boot tested on Kirkwood.
--- arch/arm/mach-dove/addr-map.c | 113 +++++++----------- arch/arm/mach-kirkwood/addr-map.c | 138 ++++++--------------- arch/arm/mach-mv78xx0/addr-map.c | 102 ++++------------- arch/arm/mach-orion5x/addr-map.c | 146 ++++++++--------------- arch/arm/mach-orion5x/common.c | 7 +- arch/arm/mach-orion5x/common.h | 2 +- arch/arm/mach-orion5x/include/mach/orion5x.h | 2 +- arch/arm/plat-orion/Makefile | 2 +- arch/arm/plat-orion/addr-map.c | 166 ++++++++++++++++++++++++++ arch/arm/plat-orion/include/plat/addr-map.h | 52 ++++++++ 10 files changed, 375 insertions(+), 355 deletions(-) create mode 100644 arch/arm/plat-orion/addr-map.c create mode 100644 arch/arm/plat-orion/include/plat/addr-map.h
arch/arm/mach-dove/addr-map.c +45 -68
@@ -14,6 +14,7 @@#include <linux/io.h> #include <asm/mach/arch.h> #include <asm/setup.h> +#include <plat/addr-map.h> #include "common.h" /*
@@ -34,14 +35,6 @@#define ATTR_PCIE_MEM 0xe8#define ATTR_SCRATCHPAD 0x0 -/* -* CPU Address Decode Windows registers -*/ -#define WIN_CTRL (n) (BRIDGE_VIRT_BASE + ((n) << 4) + 0x0) -#define WIN_BASE (n) (BRIDGE_VIRT_BASE + ((n) << 4) + 0x4) -#define WIN_REMAP_LO (n) (BRIDGE_VIRT_BASE + ((n) << 4) + 0x8) -#define WIN_REMAP_HI (n) (BRIDGE_VIRT_BASE + ((n) << 4) + 0xc) -struct mbus_dram_target_info dove_mbus_dram_info;static inline void __iomem *ddr_map_sc (int i)
@@ -49,78 +42,62 @@ static inline void __iomem *ddr_map_sc(int i)return (void __iomem *)(DOVE_MC_VIRT_BASE +0x100 + ((i) <<4 )); } -static int cpu_win_can_remap (int win) -{ -if (win <4 ) -return 1 ; - -return 0 ; -} - -static void __init setup_cpu_win (int win,u32 base,u32 size, -u8 target,u8 attr,int remap) -{ -u32 ctrl; - - base &=0xffff0000 ; - ctrl = ((size -1 ) &0xffff0000 ) | (attr <<8 ) | (target <<4 ) |1 ; - -writel (base,WIN_BASE (win)); -writel (ctrl,WIN_CTRL (win)); -if (cpu_win_can_remap (win)) { -if (remap <0 ) - remap = base; -writel (remap &0xffff0000 ,WIN_REMAP_LO (win)); -writel (0 ,WIN_REMAP_HI (win)); - } -} - -void __init dove_setup_cpu_mbus (void ) -{ -int i; -int cs; +/* +* Description of the windows needed by the platform code +*/ +static struct __initdata orion_addr_map_cfg addr_map_cfg = { + .num_wins =8 , + .remappable_wins =4 , + .bridge_virt_base =BRIDGE_VIRT_BASE , +}; +static const struct __initdata orion_addr_map_info addr_map_info[] = {/* -* First, disable and clear windows. +* Windows for PCIe IO+MEM space. */ -for (i =0 ; i <8 ; i++) { -writel (0 ,WIN_BASE (i)); -writel (0 ,WIN_CTRL (i)); -if (cpu_win_can_remap (i)) { -writel (0 ,WIN_REMAP_LO (i)); -writel (0 ,WIN_REMAP_HI (i)); - } - } - + {0 ,DOVE_PCIE0_IO_PHYS_BASE ,DOVE_PCIE0_IO_SIZE , +TARGET_PCIE0 ,ATTR_PCIE_IO ,DOVE_PCIE0_IO_BUS_BASE + }, + {1 ,DOVE_PCIE1_IO_PHYS_BASE ,DOVE_PCIE1_IO_SIZE , +TARGET_PCIE1 ,ATTR_PCIE_IO ,DOVE_PCIE1_IO_BUS_BASE + }, + {2 ,DOVE_PCIE0_MEM_PHYS_BASE ,DOVE_PCIE0_MEM_SIZE , +TARGET_PCIE0 ,ATTR_PCIE_MEM ,-1 + }, + {3 ,DOVE_PCIE1_MEM_PHYS_BASE ,DOVE_PCIE1_MEM_SIZE , +TARGET_PCIE1 ,ATTR_PCIE_MEM ,-1 + },/* -* Setup windows for PCIe IO+MEM space. +* Window for CESA engine. */ -setup_cpu_win (0 ,DOVE_PCIE0_IO_PHYS_BASE ,DOVE_PCIE0_IO_SIZE , -TARGET_PCIE0 ,ATTR_PCIE_IO ,DOVE_PCIE0_IO_BUS_BASE ); -setup_cpu_win (1 ,DOVE_PCIE1_IO_PHYS_BASE ,DOVE_PCIE1_IO_SIZE , -TARGET_PCIE1 ,ATTR_PCIE_IO ,DOVE_PCIE1_IO_BUS_BASE ); -setup_cpu_win (2 ,DOVE_PCIE0_MEM_PHYS_BASE ,DOVE_PCIE0_MEM_SIZE , -TARGET_PCIE0 ,ATTR_PCIE_MEM ,-1 ); -setup_cpu_win (3 ,DOVE_PCIE1_MEM_PHYS_BASE ,DOVE_PCIE1_MEM_SIZE , -TARGET_PCIE1 ,ATTR_PCIE_MEM ,-1 ); - + {4 ,DOVE_CESA_PHYS_BASE ,DOVE_CESA_SIZE , +TARGET_CESA ,ATTR_CESA ,-1 + },/* -* Setup window for CESA engine. +* Window to the BootROM for Standby and Sleep Resume */ -setup_cpu_win (4 ,DOVE_CESA_PHYS_BASE ,DOVE_CESA_SIZE , -TARGET_CESA ,ATTR_CESA ,-1 ); - + {5 ,DOVE_BOOTROM_PHYS_BASE ,DOVE_BOOTROM_SIZE , +TARGET_BOOTROM ,ATTR_BOOTROM ,-1 + },/* -* Setup the Window to the BootROM for Standby and Sleep Resume +* Window to the PMU Scratch Pad space */ -setup_cpu_win (5 ,DOVE_BOOTROM_PHYS_BASE ,DOVE_BOOTROM_SIZE , -TARGET_BOOTROM ,ATTR_BOOTROM ,-1 ); + {6 ,DOVE_SCRATCHPAD_PHYS_BASE ,DOVE_SCRATCHPAD_SIZE , +TARGET_SCRATCHPAD ,ATTR_SCRATCHPAD ,-1 + }, +/* End marker */ + {-1 ,0 ,0 ,0 ,0 ,0 } +}; + +void __init dove_setup_cpu_mbus (void ) +{ +int i; +int cs;/* -* Setup the Window to the PMU Scratch Pad space +* Disable, clear and configure windows. */ -setup_cpu_win (6 ,DOVE_SCRATCHPAD_PHYS_BASE ,DOVE_SCRATCHPAD_SIZE , -TARGET_SCRATCHPAD ,ATTR_SCRATCHPAD ,-1 ); +orion_config_wins (&addr_map_cfg, addr_map_info);/* * Setup MBUS dram target info.
arch/arm/mach-kirkwood/addr-map.c +39 -99
170 lines not on this page · raw message
arch/arm/mach-mv78xx0/addr-map.c +21 -81
148 lines not on this page · raw message
arch/arm/mach-orion5x/addr-map.c +48 -98
206 lines not on this page · raw message
arch/arm/mach-orion5x/common.c +1 -6
@@ -169,12 +169,7 @@ void __init orion5x_xor_init(void)****************************************************************************/ static void __init orion5x_crypto_init (void ) { -int ret; - - ret =orion5x_setup_sram_win (); -if (ret) -return ; - +orion5x_setup_sram_win ();orion_crypto_init (ORION5X_CRYPTO_PHYS_BASE ,ORION5X_SRAM_PHYS_BASE ,SZ_8K ,IRQ_ORION5X_CESA ); }
arch/arm/mach-orion5x/common.h +1 -1
@@ -27,7 +27,7 @@ void orion5x_setup_dev0_win(u32 base, u32 size);void orion5x_setup_dev1_win (u32 base,u32 size);void orion5x_setup_dev2_win (u32 base,u32 size);void orion5x_setup_pcie_wa_win (u32 base,u32 size); -int orion5x_setup_sram_win (void ); +void orion5x_setup_sram_win (void );void orion5x_ehci0_init (void );void orion5x_ehci1_init (void );
arch/arm/mach-orion5x/include/mach/orion5x.h +1 -1
@@ -69,7 +69,7 @@******************************************************************************/ #define ORION5X_DDR_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x00000) - +#define ORION5X_DDR_WINDOW_CPU_BASE (ORION5X_DDR_VIRT_BASE | 0x1500)#define ORION5X_DEV_BUS_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x10000)#define ORION5X_DEV_BUS_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x10000)#define ORION5X_DEV_BUS_REG (x) (ORION5X_DEV_BUS_VIRT_BASE | (x))
arch/arm/plat-orion/Makefile +1 -1
@@ -2,7 +2,7 @@ # Makefile for the linux kernel. # -obj-y := irq.o pcie.o time.o common.o mpp.o +obj-y := irq.o pcie.o time.o common.o mpp.o addr-map.o obj-m := obj-n := obj- :=
arch/arm/plat-orion/addr-map.c new file +166 -0
166 lines not on this page · raw message
arch/arm/plat-orion/include/plat/addr-map.h new file +52 -0
52 lines not on this page · raw message
Signature · 1 line
1.7.2.5
Andrew Lunn
maintainerPATCH 2/4 Move the *_mbus_dram_info structure into the orion platform and call it orion_mbus_dram_info everywhere.
In reply to Andrew Lunn--- arch/arm/mach-dove/addr-map.c | 8 +++----- arch/arm/mach-dove/common.c | 11 ++++++----- arch/arm/mach-dove/common.h | 1 - arch/arm/mach-dove/pcie.c | 3 ++- arch/arm/mach-kirkwood/addr-map.c | 5 +---- arch/arm/mach-kirkwood/common.c | 15 ++++++++------- arch/arm/mach-kirkwood/common.h | 1 - arch/arm/mach-kirkwood/pcie.c | 3 ++- arch/arm/mach-mv78xx0/addr-map.c | 4 ---- arch/arm/mach-mv78xx0/common.c | 17 +++++++++-------- arch/arm/mach-mv78xx0/common.h | 1 - arch/arm/mach-mv78xx0/pcie.c | 3 ++- arch/arm/mach-orion5x/addr-map.c | 4 +--- arch/arm/mach-orion5x/common.c | 11 ++++++----- arch/arm/mach-orion5x/common.h | 1 - arch/arm/mach-orion5x/pci.c | 5 +++-- arch/arm/plat-orion/addr-map.c | 9 +++++---- arch/arm/plat-orion/include/plat/addr-map.h | 3 ++- 18 files changed, 50 insertions(+), 55 deletions(-)
arch/arm/mach-dove/addr-map.c +3 -5
@@ -35,8 +35,6 @@#define ATTR_PCIE_MEM 0xe8#define ATTR_SCRATCHPAD 0x0 -struct mbus_dram_target_info dove_mbus_dram_info; -static inline void __iomem *ddr_map_sc (int i) {return (void __iomem *)(DOVE_MC_VIRT_BASE +0x100 + ((i) <<4 ));
@@ -102,7 +100,7 @@ void __init dove_setup_cpu_mbus(void)/* * Setup MBUS dram target info. */ - dove_mbus_dram_info.mbus_dram_target_id =TARGET_DDR ; + orion_mbus_dram_info.mbus_dram_target_id =TARGET_DDR ;for (i =0 , cs =0 ; i <2 ; i++) {u32 map =readl (ddr_map_sc (i));
@@ -113,7 +111,7 @@ void __init dove_setup_cpu_mbus(void)if (map &1 ) {struct mbus_dram_window *w; - w = &dove_mbus_dram_info.cs[cs++]; + w = &orion_mbus_dram_info.cs[cs++]; w->cs_index = i; w->mbus_attr =0 ;/* CS address decoding done inside */ /* the DDR controller, no need to */
@@ -122,5 +120,5 @@ void __init dove_setup_cpu_mbus(void) w->size =0x100000 << (((map &0x000f0000 ) >>16 ) -4 ); } } - dove_mbus_dram_info.num_cs = cs; + orion_mbus_dram_info.num_cs = cs; }
arch/arm/mach-dove/common.c +6 -5
@@ -30,6 +30,7 @@#include <linux/irq.h> #include <plat/time.h> #include <plat/common.h> +#include <plat/addr-map.h> #include "common.h" static int get_tclk (void );
@@ -71,7 +72,7 @@ void __init dove_map_io(void)****************************************************************************/ void __init dove_ehci0_init (void ) { -orion_ehci_init (&dove_mbus_dram_info, +orion_ehci_init (&orion_mbus_dram_info,DOVE_USB0_PHYS_BASE ,IRQ_DOVE_USB0 ); }
@@ -80,7 +81,7 @@ void __init dove_ehci0_init(void)****************************************************************************/ void __init dove_ehci1_init (void ) { -orion_ehci_1_init (&dove_mbus_dram_info, +orion_ehci_1_init (&orion_mbus_dram_info,DOVE_USB1_PHYS_BASE ,IRQ_DOVE_USB1 ); }
@@ -89,7 +90,7 @@ void __init dove_ehci1_init(void)****************************************************************************/ void __init dove_ge00_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &dove_mbus_dram_info, +orion_ge00_init (eth_data, &orion_mbus_dram_info,DOVE_GE00_PHYS_BASE ,IRQ_DOVE_GE00_SUM ,0 ,get_tclk ()); }
@@ -107,7 +108,7 @@ void __init dove_rtc_init(void)****************************************************************************/ void __init dove_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &dove_mbus_dram_info, +orion_sata_init (sata_data, &orion_mbus_dram_info,DOVE_SATA_PHYS_BASE ,IRQ_DOVE_SATA ); }
@@ -198,7 +199,7 @@ struct sys_timer dove_timer = {****************************************************************************/ void __init dove_xor0_init (void ) { -orion_xor0_init (&dove_mbus_dram_info, +orion_xor0_init (&orion_mbus_dram_info,DOVE_XOR0_PHYS_BASE ,DOVE_XOR0_HIGH_PHYS_BASE ,IRQ_DOVE_XOR_00 ,IRQ_DOVE_XOR_01 ); }
arch/arm/mach-dove/common.h +0 -1
@@ -15,7 +15,6 @@ struct mv643xx_eth_platform_data;struct mv_sata_platform_data ;extern struct sys_timer dove_timer; -extern struct mbus_dram_target_info dove_mbus_dram_info;/* * Basic Dove init functions used early by machine-setup.
arch/arm/mach-dove/pcie.c +2 -1
@@ -19,6 +19,7 @@#include <plat/pcie.h> #include <mach/irqs.h> #include <mach/bridge-regs.h> +#include <plat/addr-map.h> #include "common.h" struct pcie_port {
@@ -50,7 +51,7 @@ static int __init dove_pcie_setup(int nr, struct pci_sys_data *sys)*/ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &dove_mbus_dram_info); +orion_pcie_setup (pp->base, &orion_mbus_dram_info);/* * IORESOURCE_IO
arch/arm/mach-kirkwood/addr-map.c +1 -4
@@ -35,8 +35,6 @@#define ATTR_PCIE1_MEM 0xd8#define ATTR_SRAM 0x01 -struct mbus_dram_target_info kirkwood_mbus_dram_info; -/* * Description of the windows needed by the platform code */
@@ -88,6 +86,5 @@ void __init kirkwood_setup_cpu_mbus(void)/* * Setup MBUS dram target info. */ -orion_setup_cpu_mbus_target (&addr_map_cfg, &kirkwood_mbus_dram_info, -DDR_WINDOW_CPU_BASE ); +orion_setup_cpu_mbus_target (&addr_map_cfg,DDR_WINDOW_CPU_BASE ); }
arch/arm/mach-kirkwood/common.c +8 -7
@@ -30,6 +30,7 @@#include <plat/orion_nand.h> #include <plat/common.h> #include <plat/time.h> +#include <plat/addr-map.h> #include "common.h" /*****************************************************************************
@@ -73,7 +74,7 @@ unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED;void __init kirkwood_ehci_init (void ) { kirkwood_clk_ctrl |=CGC_USB0 ; -orion_ehci_init (&kirkwood_mbus_dram_info, +orion_ehci_init (&orion_mbus_dram_info,USB_PHYS_BASE ,IRQ_KIRKWOOD_USB ); }
@@ -85,7 +86,7 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) { kirkwood_clk_ctrl |=CGC_GE0 ; -orion_ge00_init (eth_data, &kirkwood_mbus_dram_info, +orion_ge00_init (eth_data, &orion_mbus_dram_info,GE00_PHYS_BASE ,IRQ_KIRKWOOD_GE00_SUM ,IRQ_KIRKWOOD_GE00_ERR , kirkwood_tclk); }
@@ -99,7 +100,7 @@ void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) kirkwood_clk_ctrl |=CGC_GE1 ; -orion_ge01_init (eth_data, &kirkwood_mbus_dram_info, +orion_ge01_init (eth_data, &orion_mbus_dram_info,GE01_PHYS_BASE ,IRQ_KIRKWOOD_GE01_SUM ,IRQ_KIRKWOOD_GE01_ERR , kirkwood_tclk); }
@@ -178,7 +179,7 @@ void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data)if (sata_data->n_ports >1 ) kirkwood_clk_ctrl |=CGC_SATA1 ; -orion_sata_init (sata_data, &kirkwood_mbus_dram_info, +orion_sata_init (sata_data, &orion_mbus_dram_info,SATA_PHYS_BASE ,IRQ_KIRKWOOD_SATA ); }
@@ -221,7 +222,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data) mvsdio_data->clock =100000000 ; else mvsdio_data->clock = 200000000; - mvsdio_data->dram = &kirkwood_mbus_dram_info; + mvsdio_data->dram = &orion_mbus_dram_info; kirkwood_clk_ctrl |=CGC_SDIO ; kirkwood_sdio.dev.platform_data = mvsdio_data;platform_device_register (&kirkwood_sdio);
@@ -285,7 +286,7 @@ static void __init kirkwood_xor0_init(void) { kirkwood_clk_ctrl |=CGC_XOR0 ; -orion_xor0_init (&kirkwood_mbus_dram_info, +orion_xor0_init (&orion_mbus_dram_info,XOR0_PHYS_BASE ,XOR0_HIGH_PHYS_BASE ,IRQ_KIRKWOOD_XOR_00 ,IRQ_KIRKWOOD_XOR_01 ); }
@@ -364,7 +365,7 @@ static struct resource kirkwood_i2s_resources[] = { };static struct kirkwood_asoc_platform_data kirkwood_i2s_data = { - .dram = &kirkwood_mbus_dram_info, + .dram = &orion_mbus_dram_info, .burst =128 , };
arch/arm/mach-kirkwood/common.h +0 -1
@@ -30,7 +30,6 @@ void kirkwood_init(void);void kirkwood_init_early (void );void kirkwood_init_irq (void ); -extern struct mbus_dram_target_info kirkwood_mbus_dram_info;void kirkwood_setup_cpu_mbus (void );void kirkwood_enable_pcie (void );
arch/arm/mach-kirkwood/pcie.c +2 -1
@@ -17,6 +17,7 @@#include <asm/mach/pci.h> #include <plat/pcie.h> #include <mach/bridge-regs.h> +#include <plat/addr-map.h> #include "common.h" void kirkwood_enable_pcie (void )
@@ -208,7 +209,7 @@ static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)*/ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &kirkwood_mbus_dram_info); +orion_pcie_setup (pp->base, &orion_mbus_dram_info);return 1 ; }
arch/arm/mach-mv78xx0/addr-map.c +0 -4
@@ -37,8 +37,6 @@#define WIN0_OFF (n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4))#define WIN8_OFF (n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4)) -struct mbus_dram_target_info mv78xx0_mbus_dram_info; -static void __init __iomem *win_cfg_base (int win) {/*
@@ -73,11 +71,9 @@ void __init mv78xx0_setup_cpu_mbus(void)*/ if (mv78xx0_core_index () ==0 )orion_setup_cpu_mbus_target (&addr_map_cfg, - &mv78xx0_mbus_dram_info,DDR_WINDOW_CPU0_BASE );else orion_setup_cpu_mbus_target (&addr_map_cfg, - &mv78xx0_mbus_dram_info,DDR_WINDOW_CPU1_BASE ); }
arch/arm/mach-mv78xx0/common.c +9 -8
@@ -23,6 +23,7 @@#include <plat/orion_nand.h> #include <plat/time.h> #include <plat/common.h> +#include <plat/addr-map.h> #include "common.h" static int get_tclk (void );
@@ -169,7 +170,7 @@ void __init mv78xx0_map_io(void)****************************************************************************/ void __init mv78xx0_ehci0_init (void ) { -orion_ehci_init (&mv78xx0_mbus_dram_info, +orion_ehci_init (&orion_mbus_dram_info,USB0_PHYS_BASE ,IRQ_MV78XX0_USB_0 ); }
@@ -179,7 +180,7 @@ void __init mv78xx0_ehci0_init(void)****************************************************************************/ void __init mv78xx0_ehci1_init (void ) { -orion_ehci_1_init (&mv78xx0_mbus_dram_info, +orion_ehci_1_init (&orion_mbus_dram_info,USB1_PHYS_BASE ,IRQ_MV78XX0_USB_1 ); }
@@ -189,7 +190,7 @@ void __init mv78xx0_ehci1_init(void)****************************************************************************/ void __init mv78xx0_ehci2_init (void ) { -orion_ehci_2_init (&mv78xx0_mbus_dram_info, +orion_ehci_2_init (&orion_mbus_dram_info,USB2_PHYS_BASE ,IRQ_MV78XX0_USB_2 ); }
@@ -199,7 +200,7 @@ void __init mv78xx0_ehci2_init(void)****************************************************************************/ void __init mv78xx0_ge00_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &mv78xx0_mbus_dram_info, +orion_ge00_init (eth_data, &orion_mbus_dram_info,GE00_PHYS_BASE ,IRQ_MV78XX0_GE00_SUM ,IRQ_MV78XX0_GE_ERR ,get_tclk ()); }
@@ -210,7 +211,7 @@ void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data)****************************************************************************/ void __init mv78xx0_ge01_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge01_init (eth_data, &mv78xx0_mbus_dram_info, +orion_ge01_init (eth_data, &orion_mbus_dram_info,GE01_PHYS_BASE ,IRQ_MV78XX0_GE01_SUM ,NO_IRQ ,get_tclk ()); }
@@ -234,7 +235,7 @@ void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) eth_data->duplex =DUPLEX_FULL ; } -orion_ge10_init (eth_data, &mv78xx0_mbus_dram_info, +orion_ge10_init (eth_data, &orion_mbus_dram_info,GE10_PHYS_BASE ,IRQ_MV78XX0_GE10_SUM ,NO_IRQ ,get_tclk ()); }
@@ -258,7 +259,7 @@ void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) eth_data->duplex =DUPLEX_FULL ; } -orion_ge11_init (eth_data, &mv78xx0_mbus_dram_info, +orion_ge11_init (eth_data, &orion_mbus_dram_info,GE11_PHYS_BASE ,IRQ_MV78XX0_GE11_SUM ,NO_IRQ ,get_tclk ()); }
@@ -277,7 +278,7 @@ void __init mv78xx0_i2c_init(void)****************************************************************************/ void __init mv78xx0_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &mv78xx0_mbus_dram_info, +orion_sata_init (sata_data, &orion_mbus_dram_info,SATA_PHYS_BASE ,IRQ_MV78XX0_SATA ); }
arch/arm/mach-mv78xx0/common.h +0 -1
@@ -23,7 +23,6 @@ void mv78xx0_init(void);void mv78xx0_init_early (void );void mv78xx0_init_irq (void ); -extern struct mbus_dram_target_info mv78xx0_mbus_dram_info;void mv78xx0_setup_cpu_mbus (void );void mv78xx0_setup_pcie_io_win (int window,u32 base,u32 size,int maj,int min);
arch/arm/mach-mv78xx0/pcie.c +2 -1
@@ -15,6 +15,7 @@#include <asm/irq.h> #include <asm/mach/pci.h> #include <plat/pcie.h> +#include <plat/addr-map.h> #include "common.h" struct pcie_port {
@@ -153,7 +154,7 @@ static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys)* Generic PCIe unit setup. */ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &mv78xx0_mbus_dram_info); +orion_pcie_setup (pp->base, &orion_mbus_dram_info); sys->resource[0 ] = &pp->res[0 ]; sys->resource[1 ] = &pp->res[1 ];
arch/arm/mach-orion5x/addr-map.c +1 -3
@@ -56,7 +56,6 @@#define ATTR_DEV_BOOT 0xf#define ATTR_SRAM 0x0 -struct mbus_dram_target_info orion5x_mbus_dram_info;static int __initdata win_alloc_count; static int __init cpu_win_can_remap(const struct orion_addr_map_cfg *cfg,
@@ -114,8 +113,7 @@ void __init orion5x_setup_cpu_mbus_bridge(void)/* * Setup MBUS dram target info. */ -orion_setup_cpu_mbus_target (&addr_map_cfg, &orion5x_mbus_dram_info, -ORION5X_DDR_WINDOW_CPU_BASE ); +orion_setup_cpu_mbus_target (&addr_map_cfg,ORION5X_DDR_WINDOW_CPU_BASE ); }void __init orion5x_setup_dev_boot_win (u32 base,u32 size)
arch/arm/mach-orion5x/common.c +6 -5
@@ -31,6 +31,7 @@#include <plat/orion_nand.h> #include <plat/time.h> #include <plat/common.h> +#include <plat/addr-map.h> #include "common.h" /*****************************************************************************
@@ -71,7 +72,7 @@ void __init orion5x_map_io(void)****************************************************************************/ void __init orion5x_ehci0_init (void ) { -orion_ehci_init (&orion5x_mbus_dram_info, +orion_ehci_init (&orion_mbus_dram_info,ORION5X_USB0_PHYS_BASE ,IRQ_ORION5X_USB0_CTRL ); }
@@ -81,7 +82,7 @@ void __init orion5x_ehci0_init(void)****************************************************************************/ void __init orion5x_ehci1_init (void ) { -orion_ehci_1_init (&orion5x_mbus_dram_info, +orion_ehci_1_init (&orion_mbus_dram_info,ORION5X_USB1_PHYS_BASE ,IRQ_ORION5X_USB1_CTRL ); }
@@ -91,7 +92,7 @@ void __init orion5x_ehci1_init(void)****************************************************************************/ void __init orion5x_eth_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &orion5x_mbus_dram_info, +orion_ge00_init (eth_data, &orion_mbus_dram_info,ORION5X_ETH_PHYS_BASE ,IRQ_ORION5X_ETH_SUM ,IRQ_ORION5X_ETH_ERR , orion5x_tclk); }
@@ -121,7 +122,7 @@ void __init orion5x_i2c_init(void)****************************************************************************/ void __init orion5x_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &orion5x_mbus_dram_info, +orion_sata_init (sata_data, &orion_mbus_dram_info,ORION5X_SATA_PHYS_BASE ,IRQ_ORION5X_SATA ); }
@@ -158,7 +159,7 @@ void __init orion5x_uart1_init(void)****************************************************************************/ void __init orion5x_xor_init (void ) { -orion_xor0_init (&orion5x_mbus_dram_info, +orion_xor0_init (&orion_mbus_dram_info,ORION5X_XOR_PHYS_BASE ,ORION5X_XOR_PHYS_BASE +0x200 ,IRQ_ORION5X_XOR0 ,IRQ_ORION5X_XOR1 );
arch/arm/mach-orion5x/common.h +0 -1
@@ -20,7 +20,6 @@ extern struct sys_timer orion5x_timer;* functions to map its interfaces and by the machine-setup to map its on- * board devices. Details in /mach-orion/addr-map.c */ -extern struct mbus_dram_target_info orion5x_mbus_dram_info;void orion5x_setup_cpu_mbus_bridge (void );void orion5x_setup_dev_boot_win (u32 base,u32 size);void orion5x_setup_dev0_win (u32 base,u32 size);
arch/arm/mach-orion5x/pci.c +3 -2
@@ -18,6 +18,7 @@#include <asm/irq.h> #include <asm/mach/pci.h> #include <plat/pcie.h> +#include <plat/addr-map.h> #include "common.h" /*****************************************************************************
@@ -145,7 +146,7 @@ static int __init pcie_setup(struct pci_sys_data *sys)/* * Generic PCIe unit setup. */ -orion_pcie_setup (PCIE_BASE , &orion5x_mbus_dram_info); +orion_pcie_setup (PCIE_BASE , &orion_mbus_dram_info);/* * Check whether to apply Orion-1/Orion-NAS PCIe config
@@ -477,7 +478,7 @@ static int __init pci_setup(struct pci_sys_data *sys)/* * Point PCI unit MBUS decode windows to DRAM space. */ -orion5x_setup_pci_wins (&orion5x_mbus_dram_info); +orion5x_setup_pci_wins (&orion_mbus_dram_info);/* * Master + Slave enable
arch/arm/plat-orion/addr-map.c +5 -4
@@ -14,6 +14,8 @@#include <linux/io.h> #include <plat/addr-map.h> +struct mbus_dram_target_info orion_mbus_dram_info; +/* * DDR target is the same on all Orion platforms. */
@@ -134,14 +136,13 @@ void __init orion_config_wins(struct orion_addr_map_cfg * cfg,* Setup MBUS dram target info. */ void __init orion_setup_cpu_mbus_target (const struct orion_addr_map_cfg *cfg, -struct mbus_dram_target_info *info,const u32 ddr_window_cpu_base) {void __iomem *addr;int i;int cs; - info->mbus_dram_target_id =TARGET_DDR ; + orion_mbus_dram_info.mbus_dram_target_id =TARGET_DDR ; addr = (void __iomem *)ddr_window_cpu_base;
@@ -155,12 +156,12 @@ void __init orion_setup_cpu_mbus_target(const struct orion_addr_map_cfg *cfg,if (size &1 ) {struct mbus_dram_window *w; - w = &info->cs[cs++]; + w = &orion_mbus_dram_info.cs[cs++]; w->cs_index = i; w->mbus_attr =0xf & ~(1 << i); w->base = base &0xffff0000 ; w->size = (size |0x0000ffff ) +1 ; } } - info->num_cs = cs; + orion_mbus_dram_info.num_cs = cs; }
arch/arm/plat-orion/include/plat/addr-map.h +2 -1
@@ -11,6 +11,8 @@ #ifndef __PLAT_ADDR_MAP_H #define __PLAT_ADDR_MAP_H +extern struct mbus_dram_target_info orion_mbus_dram_info; + struct orion_addr_map_cfg { const int num_wins; /* Total number of windows */ const int remappable_wins;
@@ -47,6 +49,5 @@ void __init orion_setup_cpu_win(const struct orion_addr_map_cfg *cfg, const u8 attr, const int remap);void __init orion_setup_cpu_mbus_target (const struct orion_addr_map_cfg *cfg, -struct mbus_dram_target_info *info,const u32 ddr_window_cpu_base);#endif
Signature · 1 line
1.7.2.5
Andrew Lunn
maintainerPATCH 3/4 Get address map from plat-orion instead of via platform_data.
In reply to Andrew LunnUse an getter function in plat-orion/addr-map.c to get the address map structure, rather than pass it to drivers in the platfrom_data structures. When the drivers are built for none orion platforms, a dummy function is provided instead which returns NULL.
--- arch/arm/mach-dove/pcie.c | 3 +-- arch/arm/mach-kirkwood/mpp.c | 1 - arch/arm/mach-kirkwood/pcie.c | 3 +-- arch/arm/mach-mv78xx0/mpp.c | 1 - arch/arm/mach-mv78xx0/pcie.c | 3 +-- arch/arm/mach-orion5x/mpp.c | 1 - arch/arm/mach-orion5x/pci.c | 2 +- arch/arm/plat-orion/addr-map.c | 7 +++++++ arch/arm/plat-orion/include/plat/pcie.h | 3 +-- arch/arm/plat-orion/pcie.c | 6 +++--- drivers/ata/sata_mv.c | 19 +++++++++++-------- drivers/dma/mv_xor.c | 11 ++++++----- drivers/mmc/host/mvsdio.c | 13 ++++++++----- drivers/net/mv643xx_eth.c | 10 ++++++---- drivers/usb/host/ehci-orion.c | 10 ++++++---- include/linux/mbus.h | 13 ++++++++++++- sound/soc/kirkwood/kirkwood-dma.c | 15 +++++++++------ 17 files changed, 73 insertions(+), 48 deletions(-)
arch/arm/mach-dove/pcie.c +1 -2
@@ -10,7 +10,6 @@#include <linux/kernel.h> #include <linux/pci.h> -#include <linux/mbus.h> #include <video/vga.h> #include <asm/mach/pci.h> #include <asm/mach/arch.h>
@@ -51,7 +50,7 @@ static int __init dove_pcie_setup(int nr, struct pci_sys_data *sys)*/ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &orion_mbus_dram_info); +orion_pcie_setup (pp->base);/* * IORESOURCE_IO
arch/arm/mach-kirkwood/mpp.c +0 -1
@@ -10,7 +10,6 @@#include <linux/kernel.h> #include <linux/init.h> -#include <linux/mbus.h> #include <linux/io.h> #include <asm/gpio.h> #include <mach/hardware.h>
arch/arm/mach-kirkwood/pcie.c +1 -2
@@ -11,7 +11,6 @@#include <linux/kernel.h> #include <linux/pci.h> #include <linux/slab.h> -#include <linux/mbus.h> #include <video/vga.h> #include <asm/irq.h> #include <asm/mach/pci.h>
@@ -209,7 +208,7 @@ static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)*/ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &orion_mbus_dram_info); +orion_pcie_setup (pp->base);return 1 ; }
arch/arm/mach-mv78xx0/mpp.c +0 -1
@@ -10,7 +10,6 @@#include <linux/kernel.h> #include <linux/init.h> -#include <linux/mbus.h> #include <linux/io.h> #include <plat/mpp.h> #include <asm/gpio.h>
arch/arm/mach-mv78xx0/pcie.c +1 -2
@@ -10,7 +10,6 @@#include <linux/kernel.h> #include <linux/pci.h> -#include <linux/mbus.h> #include <video/vga.h> #include <asm/irq.h> #include <asm/mach/pci.h>
@@ -154,7 +153,7 @@ static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys)* Generic PCIe unit setup. */ orion_pcie_set_local_bus_nr (pp->base, sys->busnr); -orion_pcie_setup (pp->base, &orion_mbus_dram_info); +orion_pcie_setup (pp->base); sys->resource[0 ] = &pp->res[0 ]; sys->resource[1 ] = &pp->res[1 ];
arch/arm/mach-orion5x/mpp.c +0 -1
@@ -10,7 +10,6 @@#include <linux/kernel.h> #include <linux/init.h> -#include <linux/mbus.h> #include <linux/io.h> #include <mach/hardware.h> #include <plat/mpp.h>
arch/arm/mach-orion5x/pci.c +1 -1
@@ -146,7 +146,7 @@ static int __init pcie_setup(struct pci_sys_data *sys)/* * Generic PCIe unit setup. */ -orion_pcie_setup (PCIE_BASE , &orion_mbus_dram_info); +orion_pcie_setup (PCIE_BASE );/* * Check whether to apply Orion-1/Orion-NAS PCIe config
arch/arm/plat-orion/addr-map.c +7 -0
@@ -9,6 +9,7 @@*/ #include <linux/kernel.h> +#include <linux/module.h> #include <linux/init.h> #include <linux/mbus.h> #include <linux/io.h>
@@ -16,6 +17,12 @@struct mbus_dram_target_info orion_mbus_dram_info; +const struct mbus_dram_target_info *mv_mbus_dram_info (void ) +{ +return &orion_mbus_dram_info; +} +EXPORT_SYMBOL_GPL (mv_mbus_dram_info); +/* * DDR target is the same on all Orion platforms. */
arch/arm/plat-orion/include/plat/pcie.h +1 -2
@@ -20,8 +20,7 @@ int orion_pcie_x4_mode(void __iomem *base);int orion_pcie_get_local_bus_nr (void __iomem *base);void orion_pcie_set_local_bus_nr (void __iomem *base,int nr);void orion_pcie_reset (void __iomem *base); -void orion_pcie_setup (void __iomem *base, -struct mbus_dram_target_info *dram); +void orion_pcie_setup (void __iomem *base);int orion_pcie_rd_conf (void __iomem *base,struct pci_bus *bus,u32 devfn,int where,int size,u32 *val); int orion_pcie_rd_conf_tlp(void __iomem *base, struct pci_bus *bus,
arch/arm/plat-orion/pcie.c +3 -3
@@ -13,6 +13,7 @@#include <linux/mbus.h> #include <asm/mach/pci.h> #include <plat/pcie.h> +#include <plat/addr-map.h> #include <linux/delay.h> /*
@@ -175,8 +176,7 @@ static void __init orion_pcie_setup_wins(void __iomem *base,writel (((size -1 ) &0xffff0000 ) |1 , base +PCIE_BAR_CTRL_OFF (1 )); } -void __init orion_pcie_setup (void __iomem *base, -struct mbus_dram_target_info *dram) +void __init orion_pcie_setup (void __iomem *base) {u16 cmd;u32 mask;
@@ -184,7 +184,7 @@ void __init orion_pcie_setup(void __iomem *base,/* * Point PCIe unit MBUS decode windows to DRAM space. */ -orion_pcie_setup_wins (base, dram); +orion_pcie_setup_wins (base, &orion_mbus_dram_info);/* * Master + slave enable.
drivers/ata/sata_mv.c +11 -8
@@ -3988,7 +3988,7 @@ static int mv_create_dma_pools(struct mv_host_priv *hpriv, struct device *dev) }static void mv_conf_mbus_windows (struct mv_host_priv *hpriv, -struct mbus_dram_target_info *dram) +const struct mbus_dram_target_info *dram) {int i;
@@ -3998,7 +3998,7 @@ static void mv_conf_mbus_windows(struct mv_host_priv *hpriv, }for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i; writel(((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) |
@@ -4019,6 +4019,7 @@ static void mv_conf_mbus_windows(struct mv_host_priv *hpriv,static int mv_platform_probe (struct platform_device *pdev) {const struct mv_sata_platform_data *mv_platform_data; +const struct mbus_dram_target_info *dram;const struct ata_port_info *ppi[] = { &mv_port_info[chip_soc],NULL };struct ata_host *host;
@@ -4072,8 +4073,9 @@ static int mv_platform_probe(struct platform_device *pdev)/* * (Re-)program MBUS remapping windows if we are asked to. */ -if (mv_platform_data->dram !=NULL ) -mv_conf_mbus_windows (hpriv, mv_platform_data->dram); + dram =mv_mbus_dram_info (); +if (dram) +mv_conf_mbus_windows (hpriv, dram); rc =mv_create_dma_pools (hpriv, &pdev->dev);if (rc)
@@ -4139,17 +4141,18 @@ static int mv_platform_suspend(struct platform_device *pdev, pm_message_t state)static int mv_platform_resume (struct platform_device *pdev) {struct ata_host *host =dev_get_drvdata (&pdev->dev); +const struct mbus_dram_target_info *dram;int ret;if (host) {struct mv_host_priv *hpriv = host->private_data; -const struct mv_sata_platform_data *mv_platform_data = \ - pdev->dev.platform_data; +/* * (Re-)program MBUS remapping windows if we are asked to. */ -if (mv_platform_data->dram !=NULL ) -mv_conf_mbus_windows (hpriv, mv_platform_data->dram); + dram =mv_mbus_dram_info (); +if (dram) +mv_conf_mbus_windows (hpriv, dram);/* initialize adapter */ ret =mv_init_host (host);
drivers/dma/mv_xor.c +6 -5
@@ -1250,7 +1250,7 @@ static int __devinit mv_xor_probe(struct platform_device *pdev)static void mv_xor_conf_mbus_windows (struct mv_xor_shared_private *msp, -struct mbus_dram_target_info *dram) +const struct mbus_dram_target_info *dram) {void __iomem *base = msp->xor_base;u32 win_enable =0 ;
@@ -1264,7 +1264,7 @@ mv_xor_conf_mbus_windows(struct mv_xor_shared_private *msp, }for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i; writel((cs->base & 0xffff0000) | (cs->mbus_attr << 8) |
@@ -1290,7 +1290,7 @@ static struct platform_driver mv_xor_driver = {static int mv_xor_shared_probe (struct platform_device *pdev) { -struct mv_xor_platform_shared_data *msd = pdev->dev.platform_data; +const struct mbus_dram_target_info *dram;struct mv_xor_shared_private *msp;struct resource *res;
@@ -1323,8 +1323,9 @@ static int mv_xor_shared_probe(struct platform_device *pdev)/* * (Re-)program MBUS remapping windows if we are asked to. */ -if (msd !=NULL && msd->dram !=NULL ) -mv_xor_conf_mbus_windows (msp, msd->dram); + dram =mv_mbus_dram_info (); +if (dram) +mv_xor_conf_mbus_windows (msp, dram);return 0 ; }
drivers/mmc/host/mvsdio.c +8 -5
@@ -679,8 +679,9 @@ static const struct mmc_host_ops mvsd_ops = { .enable_sdio_irq = mvsd_enable_sdio_irq, }; -static void __init mv_conf_mbus_windows (struct mvsd_host *host, -struct mbus_dram_target_info *dram) +static void __init +mv_conf_mbus_windows (struct mvsd_host *host, +const struct mbus_dram_target_info *dram) {void __iomem *iobase = host->base;int i;
@@ -691,7 +692,7 @@ static void __init mv_conf_mbus_windows(struct mvsd_host *host, }for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i; writel(((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) | (dram->mbus_dram_target_id << 4) | 1,
@@ -705,6 +706,7 @@ static int __init mvsd_probe(struct platform_device *pdev)struct mmc_host *mmc =NULL ;struct mvsd_host *host =NULL ;const struct mvsdio_platform_data *mvsd_data; +const struct mbus_dram_target_info *dram;struct resource *r;int ret, irq;
@@ -755,8 +757,9 @@ static int __init mvsd_probe(struct platform_device *pdev) }/* (Re-)program MBUS remapping windows if we are asked to. */ -if (mvsd_data->dram !=NULL ) -mv_conf_mbus_windows (host, mvsd_data->dram); + dram =mv_mbus_dram_info (); +if (dram) +mv_conf_mbus_windows (host, dram);mvsd_power_down (host);
drivers/net/mv643xx_eth.c +6 -4
@@ -2512,7 +2512,7 @@ static void mv643xx_eth_netpoll(struct net_device *dev)/* platform glue ************************************************************/ static void mv643xx_eth_conf_mbus_windows (struct mv643xx_eth_shared_private *msp, -struct mbus_dram_target_info *dram) +const struct mbus_dram_target_info *dram) {void __iomem *base = msp->base;u32 win_enable;
@@ -2530,7 +2530,7 @@ mv643xx_eth_conf_mbus_windows(struct mv643xx_eth_shared_private *msp, win_protect =0 ;for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i; writel((cs->base & 0xffff0000) | (cs->mbus_attr << 8) |
@@ -2580,6 +2580,7 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev)static int mv643xx_eth_version_printed;struct mv643xx_eth_shared_platform_data *pd = pdev->dev.platform_data;struct mv643xx_eth_shared_private *msp; +const struct mbus_dram_target_info *dram;struct resource *res;int ret;
@@ -2644,8 +2645,9 @@ static int mv643xx_eth_shared_probe(struct platform_device *pdev)/* * (Re-)program MBUS remapping windows if we are asked to. */ -if (pd !=NULL && pd->dram !=NULL ) -mv643xx_eth_conf_mbus_windows (msp, pd->dram); + dram =mv_mbus_dram_info (); +if (dram) +mv643xx_eth_conf_mbus_windows (msp, dram);/* * Detect hardware parameters.
drivers/usb/host/ehci-orion.c +6 -4
@@ -172,7 +172,7 @@ static const struct hc_driver ehci_orion_hc_driver = {static void __init ehci_orion_conf_mbus_windows (struct usb_hcd *hcd, -struct mbus_dram_target_info *dram) +const struct mbus_dram_target_info *dram) {int i;
@@ -182,7 +182,7 @@ ehci_orion_conf_mbus_windows(struct usb_hcd *hcd, }for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i; wrl(USB_WINDOW_CTRL(i), ((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) |
@@ -194,6 +194,7 @@ ehci_orion_conf_mbus_windows(struct usb_hcd *hcd,static int __devinit ehci_orion_drv_probe (struct platform_device *pdev) {struct orion_ehci_data *pd = pdev->dev.platform_data; +const struct mbus_dram_target_info *dram;struct resource *res;struct usb_hcd *hcd;struct ehci_hcd *ehci;
@@ -259,8 +260,9 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev)/* * (Re-)program MBUS remapping windows if we are asked to. */ -if (pd !=NULL && pd->dram !=NULL ) -ehci_orion_conf_mbus_windows (hcd, pd->dram); + dram =mv_mbus_dram_info (); +if (dram) +ehci_orion_conf_mbus_windows (hcd, dram);/* * setup Orion USB controller.
include/linux/mbus.h +12 -1
@@ -32,5 +32,16 @@ struct mbus_dram_target_info } cs[4]; }; - +/* +* The Marvell mbus is to be found only on SOCs from the Orion family +* at the moment. Provide a dummy stub for other architectures. +*/ +#ifdef CONFIG_PLAT_ORION +extern const struct mbus_dram_target_info *mv_mbus_dram_info (void ); +#else +static inline const struct mbus_dram_target_info *mv_mbus_dram_info (void ) +{ +return NULL ; +} +#endif #endif
sound/soc/kirkwood/kirkwood-dma.c +9 -6
@@ -94,9 +94,10 @@ static irqreturn_t kirkwood_dma_irq(int irq, void *dev_id)return IRQ_HANDLED ; } -static void kirkwood_dma_conf_mbus_windows (void __iomem *base,int win, -unsigned long dma, -struct mbus_dram_target_info *dram) +static void +kirkwood_dma_conf_mbus_windows (void __iomem *base,int win, +unsigned long dma, +const struct mbus_dram_target_info *dram) {int i;
@@ -106,7 +107,7 @@ static void kirkwood_dma_conf_mbus_windows(void __iomem *base, int win,/* try to find matching cs for current dma address */ for (i =0 ; i < dram->num_cs; i++) { -struct mbus_dram_window *cs = dram->cs + i; +const struct mbus_dram_window *cs = dram->cs + i;if ((cs->base &0xffff0000 ) < (dma &0xffff0000 )) {writel (cs->base &0xffff0000 , base +KIRKWOOD_AUDIO_WIN_BASE_REG (win));
@@ -127,6 +128,7 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;struct kirkwood_dma_data *priv;struct kirkwood_dma_priv *prdata =snd_soc_platform_get_drvdata (platform); +const struct mbus_dram_target_info *dram;unsigned long addr; priv =snd_soc_dai_get_dma_data (cpu_dai, substream);
@@ -175,15 +177,16 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)writel ((unsigned long )-1 , priv->io +KIRKWOOD_ERR_MASK ); } + dram =mv_mbus_dram_info (); addr =virt_to_phys (substream->dma_buffer.area);if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { prdata->play_stream = substream;kirkwood_dma_conf_mbus_windows (priv->io, -KIRKWOOD_PLAYBACK_WIN , addr, priv->dram); +KIRKWOOD_PLAYBACK_WIN , addr, dram); }else { prdata->rec_stream = substream;kirkwood_dma_conf_mbus_windows (priv->io, -KIRKWOOD_RECORD_WIN , addr, priv->dram); +KIRKWOOD_RECORD_WIN , addr, dram); }return 0 ;
Signature · 1 line
1.7.2.5
Andrew Lunn
maintainerPATCH 4/4 Remove address map info from all platform data strucutures.
In reply to Andrew Lunn--- arch/arm/mach-dove/common.c | 15 +++------ arch/arm/mach-kirkwood/common.c | 16 +++------ arch/arm/mach-mv78xx0/common.c | 21 +++++------- arch/arm/mach-orion5x/common.c | 15 +++------ arch/arm/plat-orion/common.c | 43 +++++------------------- arch/arm/plat-orion/include/plat/audio.h | 3 -- arch/arm/plat-orion/include/plat/common.h | 17 ++------- arch/arm/plat-orion/include/plat/ehci-orion.h | 1 - arch/arm/plat-orion/include/plat/mv_xor.h | 6 --- arch/arm/plat-orion/include/plat/mvsdio.h | 1 - include/linux/ata_platform.h | 3 -- 11 files changed, 36 insertions(+), 105 deletions(-)
arch/arm/mach-dove/common.c +5 -10
@@ -14,7 +14,6 @@#include <linux/platform_device.h> #include <linux/pci.h> #include <linux/clk.h> -#include <linux/mbus.h> #include <linux/ata_platform.h> #include <linux/gpio.h> #include <asm/page.h>
@@ -72,8 +71,7 @@ void __init dove_map_io(void)****************************************************************************/ void __init dove_ehci0_init (void ) { -orion_ehci_init (&orion_mbus_dram_info, -DOVE_USB0_PHYS_BASE ,IRQ_DOVE_USB0 ); +orion_ehci_init (DOVE_USB0_PHYS_BASE ,IRQ_DOVE_USB0 ); }/*****************************************************************************
@@ -81,8 +79,7 @@ void __init dove_ehci0_init(void)****************************************************************************/ void __init dove_ehci1_init (void ) { -orion_ehci_1_init (&orion_mbus_dram_info, -DOVE_USB1_PHYS_BASE ,IRQ_DOVE_USB1 ); +orion_ehci_1_init (DOVE_USB1_PHYS_BASE ,IRQ_DOVE_USB1 ); }/*****************************************************************************
@@ -90,7 +87,7 @@ void __init dove_ehci1_init(void)****************************************************************************/ void __init dove_ge00_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &orion_mbus_dram_info, +orion_ge00_init (eth_data,DOVE_GE00_PHYS_BASE ,IRQ_DOVE_GE00_SUM ,0 ,get_tclk ()); }
@@ -108,8 +105,7 @@ void __init dove_rtc_init(void)****************************************************************************/ void __init dove_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &orion_mbus_dram_info, -DOVE_SATA_PHYS_BASE ,IRQ_DOVE_SATA ); +orion_sata_init (sata_data,DOVE_SATA_PHYS_BASE ,IRQ_DOVE_SATA ); }
@@ -199,8 +195,7 @@ struct sys_timer dove_timer = {****************************************************************************/ void __init dove_xor0_init (void ) { -orion_xor0_init (&orion_mbus_dram_info, -DOVE_XOR0_PHYS_BASE ,DOVE_XOR0_HIGH_PHYS_BASE , +orion_xor0_init (DOVE_XOR0_PHYS_BASE ,DOVE_XOR0_HIGH_PHYS_BASE ,IRQ_DOVE_XOR_00 ,IRQ_DOVE_XOR_01 ); }
arch/arm/mach-kirkwood/common.c +5 -11
@@ -12,7 +12,6 @@#include <linux/init.h> #include <linux/platform_device.h> #include <linux/serial_8250.h> -#include <linux/mbus.h> #include <linux/ata_platform.h> #include <linux/mtd/nand.h> #include <linux/dma-mapping.h>
@@ -74,8 +73,7 @@ unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED;void __init kirkwood_ehci_init (void ) { kirkwood_clk_ctrl |=CGC_USB0 ; -orion_ehci_init (&orion_mbus_dram_info, -USB_PHYS_BASE ,IRQ_KIRKWOOD_USB ); +orion_ehci_init (USB_PHYS_BASE ,IRQ_KIRKWOOD_USB ); }
@@ -86,7 +84,7 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) { kirkwood_clk_ctrl |=CGC_GE0 ; -orion_ge00_init (eth_data, &orion_mbus_dram_info, +orion_ge00_init (eth_data,GE00_PHYS_BASE ,IRQ_KIRKWOOD_GE00_SUM ,IRQ_KIRKWOOD_GE00_ERR , kirkwood_tclk); }
@@ -100,7 +98,7 @@ void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) kirkwood_clk_ctrl |=CGC_GE1 ; -orion_ge01_init (eth_data, &orion_mbus_dram_info, +orion_ge01_init (eth_data,GE01_PHYS_BASE ,IRQ_KIRKWOOD_GE01_SUM ,IRQ_KIRKWOOD_GE01_ERR , kirkwood_tclk); }
@@ -179,8 +177,7 @@ void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data)if (sata_data->n_ports >1 ) kirkwood_clk_ctrl |=CGC_SATA1 ; -orion_sata_init (sata_data, &orion_mbus_dram_info, -SATA_PHYS_BASE ,IRQ_KIRKWOOD_SATA ); +orion_sata_init (sata_data,SATA_PHYS_BASE ,IRQ_KIRKWOOD_SATA ); }
@@ -222,7 +219,6 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data) mvsdio_data->clock =100000000 ; else mvsdio_data->clock = 200000000; - mvsdio_data->dram = &orion_mbus_dram_info; kirkwood_clk_ctrl |=CGC_SDIO ; kirkwood_sdio.dev.platform_data = mvsdio_data;platform_device_register (&kirkwood_sdio);
@@ -286,8 +282,7 @@ static void __init kirkwood_xor0_init(void) { kirkwood_clk_ctrl |=CGC_XOR0 ; -orion_xor0_init (&orion_mbus_dram_info, -XOR0_PHYS_BASE ,XOR0_HIGH_PHYS_BASE , +orion_xor0_init (XOR0_PHYS_BASE ,XOR0_HIGH_PHYS_BASE ,IRQ_KIRKWOOD_XOR_00 ,IRQ_KIRKWOOD_XOR_01 ); }
@@ -365,7 +360,6 @@ static struct resource kirkwood_i2s_resources[] = { };static struct kirkwood_asoc_platform_data kirkwood_i2s_data = { - .dram = &orion_mbus_dram_info, .burst =128 , };
arch/arm/mach-mv78xx0/common.c +8 -13
@@ -12,7 +12,6 @@#include <linux/init.h> #include <linux/platform_device.h> #include <linux/serial_8250.h> -#include <linux/mbus.h> #include <linux/ata_platform.h> #include <linux/ethtool.h> #include <asm/mach/map.h>
@@ -170,8 +169,7 @@ void __init mv78xx0_map_io(void)****************************************************************************/ void __init mv78xx0_ehci0_init (void ) { -orion_ehci_init (&orion_mbus_dram_info, -USB0_PHYS_BASE ,IRQ_MV78XX0_USB_0 ); +orion_ehci_init (USB0_PHYS_BASE ,IRQ_MV78XX0_USB_0 ); }
@@ -180,8 +178,7 @@ void __init mv78xx0_ehci0_init(void)****************************************************************************/ void __init mv78xx0_ehci1_init (void ) { -orion_ehci_1_init (&orion_mbus_dram_info, -USB1_PHYS_BASE ,IRQ_MV78XX0_USB_1 ); +orion_ehci_1_init (USB1_PHYS_BASE ,IRQ_MV78XX0_USB_1 ); }
@@ -190,8 +187,7 @@ void __init mv78xx0_ehci1_init(void)****************************************************************************/ void __init mv78xx0_ehci2_init (void ) { -orion_ehci_2_init (&orion_mbus_dram_info, -USB2_PHYS_BASE ,IRQ_MV78XX0_USB_2 ); +orion_ehci_2_init (USB2_PHYS_BASE ,IRQ_MV78XX0_USB_2 ); }
@@ -200,7 +196,7 @@ void __init mv78xx0_ehci2_init(void)****************************************************************************/ void __init mv78xx0_ge00_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &orion_mbus_dram_info, +orion_ge00_init (eth_data,GE00_PHYS_BASE ,IRQ_MV78XX0_GE00_SUM ,IRQ_MV78XX0_GE_ERR ,get_tclk ()); }
@@ -211,7 +207,7 @@ void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data)****************************************************************************/ void __init mv78xx0_ge01_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge01_init (eth_data, &orion_mbus_dram_info, +orion_ge01_init (eth_data,GE01_PHYS_BASE ,IRQ_MV78XX0_GE01_SUM ,NO_IRQ ,get_tclk ()); }
@@ -235,7 +231,7 @@ void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) eth_data->duplex =DUPLEX_FULL ; } -orion_ge10_init (eth_data, &orion_mbus_dram_info, +orion_ge10_init (eth_data,GE10_PHYS_BASE ,IRQ_MV78XX0_GE10_SUM ,NO_IRQ ,get_tclk ()); }
@@ -259,7 +255,7 @@ void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) eth_data->duplex =DUPLEX_FULL ; } -orion_ge11_init (eth_data, &orion_mbus_dram_info, +orion_ge11_init (eth_data,GE11_PHYS_BASE ,IRQ_MV78XX0_GE11_SUM ,NO_IRQ ,get_tclk ()); }
@@ -278,8 +274,7 @@ void __init mv78xx0_i2c_init(void)****************************************************************************/ void __init mv78xx0_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &orion_mbus_dram_info, -SATA_PHYS_BASE ,IRQ_MV78XX0_SATA ); +orion_sata_init (sata_data,SATA_PHYS_BASE ,IRQ_MV78XX0_SATA ); }
arch/arm/mach-orion5x/common.c +5 -10
@@ -15,7 +15,6 @@#include <linux/platform_device.h> #include <linux/dma-mapping.h> #include <linux/serial_8250.h> -#include <linux/mbus.h> #include <linux/mv643xx_i2c.h> #include <linux/ata_platform.h> #include <net/dsa.h>
@@ -72,8 +71,7 @@ void __init orion5x_map_io(void)****************************************************************************/ void __init orion5x_ehci0_init (void ) { -orion_ehci_init (&orion_mbus_dram_info, -ORION5X_USB0_PHYS_BASE ,IRQ_ORION5X_USB0_CTRL ); +orion_ehci_init (ORION5X_USB0_PHYS_BASE ,IRQ_ORION5X_USB0_CTRL ); }
@@ -82,8 +80,7 @@ void __init orion5x_ehci0_init(void)****************************************************************************/ void __init orion5x_ehci1_init (void ) { -orion_ehci_1_init (&orion_mbus_dram_info, -ORION5X_USB1_PHYS_BASE ,IRQ_ORION5X_USB1_CTRL ); +orion_ehci_1_init (ORION5X_USB1_PHYS_BASE ,IRQ_ORION5X_USB1_CTRL ); }
@@ -92,7 +89,7 @@ void __init orion5x_ehci1_init(void)****************************************************************************/ void __init orion5x_eth_init (struct mv643xx_eth_platform_data *eth_data) { -orion_ge00_init (eth_data, &orion_mbus_dram_info, +orion_ge00_init (eth_data,ORION5X_ETH_PHYS_BASE ,IRQ_ORION5X_ETH_SUM ,IRQ_ORION5X_ETH_ERR , orion5x_tclk); }
@@ -122,8 +119,7 @@ void __init orion5x_i2c_init(void)****************************************************************************/ void __init orion5x_sata_init (struct mv_sata_platform_data *sata_data) { -orion_sata_init (sata_data, &orion_mbus_dram_info, -ORION5X_SATA_PHYS_BASE ,IRQ_ORION5X_SATA ); +orion_sata_init (sata_data,ORION5X_SATA_PHYS_BASE ,IRQ_ORION5X_SATA ); }
@@ -159,8 +155,7 @@ void __init orion5x_uart1_init(void)****************************************************************************/ void __init orion5x_xor_init (void ) { -orion_xor0_init (&orion_mbus_dram_info, -ORION5X_XOR_PHYS_BASE , +orion_xor0_init (ORION5X_XOR_PHYS_BASE ,ORION5X_XOR_PHYS_BASE +0x200 ,IRQ_ORION5X_XOR0 ,IRQ_ORION5X_XOR1 ); }
arch/arm/plat-orion/common.c +9 -34
169 lines not on this page · raw message
arch/arm/plat-orion/include/plat/audio.h +0 -3
@@ -1,11 +1,8 @@#ifndef __PLAT_AUDIO_H#define __PLAT_AUDIO_H -#include <linux/mbus.h> -struct kirkwood_asoc_platform_data {u32 tclk; -struct mbus_dram_target_info *dram;int burst; };#endif
arch/arm/plat-orion/include/plat/common.h +4 -13
@@ -37,28 +37,24 @@ void __init orion_rtc_init(unsigned long mapbase, unsigned long irq);void __init orion_ge00_init (struct mv643xx_eth_platform_data *eth_data, -struct mbus_dram_target_info *mbus_dram_info,unsigned long mapbase,unsigned long irq,unsigned long irq_err,int tclk);void __init orion_ge01_init (struct mv643xx_eth_platform_data *eth_data, -struct mbus_dram_target_info *mbus_dram_info,unsigned long mapbase,unsigned long irq,unsigned long irq_err,int tclk);void __init orion_ge10_init (struct mv643xx_eth_platform_data *eth_data, -struct mbus_dram_target_info *mbus_dram_info,unsigned long mapbase,unsigned long irq,unsigned long irq_err,int tclk); void __init orion_ge11_init(struct mv643xx_eth_platform_data *eth_data, - struct mbus_dram_target_info *mbus_dram_info, unsigned long mapbase, unsigned long irq, unsigned long irq_err,
@@ -82,8 +78,7 @@ void __init orion_spi_1_init(unsigned long mapbase,void __init orion_wdt_init (unsigned long tclk); -void __init orion_xor0_init (struct mbus_dram_target_info *mbus_dram_info, -unsigned long mapbase_low, +void __init orion_xor0_init (unsigned long mapbase_low,unsigned long mapbase_high,unsigned long irq_0,unsigned long irq_1);
@@ -93,20 +88,16 @@ void __init orion_xor1_init(unsigned long mapbase_low,unsigned long irq_0, unsigned long irq_1); -void __init orion_ehci_init (struct mbus_dram_target_info *mbus_dram_info, -unsigned long mapbase, +void __init orion_ehci_init (unsigned long mapbase,unsigned long irq); -void __init orion_ehci_1_init (struct mbus_dram_target_info *mbus_dram_info, -unsigned long mapbase, +void __init orion_ehci_1_init (unsigned long mapbase,unsigned long irq); -void __init orion_ehci_2_init (struct mbus_dram_target_info *mbus_dram_info, -unsigned long mapbase, +void __init orion_ehci_2_init (unsigned long mapbase,unsigned long irq);void __init orion_sata_init (struct mv_sata_platform_data *sata_data, -struct mbus_dram_target_info *mbus_dram_info,unsigned long mapbase,unsigned long irq);
arch/arm/plat-orion/include/plat/ehci-orion.h +0 -1
@@ -19,7 +19,6 @@ enum orion_ehci_phy_ver { };struct orion_ehci_data { -struct mbus_dram_target_info *dram;enum orion_ehci_phy_ver phy_version; };
arch/arm/plat-orion/include/plat/mv_xor.h +0 -6
@@ -13,12 +13,6 @@#define MV_XOR_SHARED_NAME "mv_xor_shared"#define MV_XOR_NAME "mv_xor" -struct mbus_dram_target_info ; - -struct mv_xor_platform_shared_data { -struct mbus_dram_target_info *dram; -}; -struct mv_xor_platform_data {struct platform_device *shared;int hw_id;
arch/arm/plat-orion/include/plat/mvsdio.h +0 -1
@@ -12,7 +12,6 @@#include <linux/mbus.h> struct mvsdio_platform_data { -struct mbus_dram_target_info *dram;unsigned int clock;int gpio_card_detect;int gpio_write_protect;
include/linux/ata_platform.h +0 -3
@@ -27,10 +27,7 @@ extern int __devexit __pata_platform_remove(struct device *dev);/* * Marvell SATA private data */ -struct mbus_dram_target_info ; -struct mv_sata_platform_data { -struct mbus_dram_target_info *dram;int n_ports;/* number of sata ports */ };
Signature · 1 line
1.7.2.5
cover move *_mbus_dram_info out of platform_data
In reply to Andrew LunnHi,
Quoted 9 lines
As a step towords device tree support for orion based system, this patchset removes the
*_mbus_dram_infofromplatform_datafor various devices and replaces it with one instance of the strucutre in plat-orion and a getter function to retreive it. In order that none orion usage of these drivers still work, a dummy function is also provided which returns NULL, indicating it is not necassary to perform address map setup.Boot tested on kirkwood, compile tested on other orion based systems.
For all four patches:
Signature · 1 line
Michael
cover move *_mbus_dram_info out of platform_data
In reply to Andrew LunnAndrew,
Quoted 8 lines · Andrew Lunn
Boot tested on kirkwood, compile tested on other orion based systems.
Andrew Lunn (4):
[orion] Consolidate the address map setup on Orion based platforms. [orion] Move the*_mbus_dram_infostructure into the orion platform
and call itorion_mbus_dram_infoeverywhere.
[orion] Get address map from plat-orion instead of viaplatform_data. [orion] Remove address map info from all platform data strucutures.
Do you have a public git tree I could pull from? I'd like to assist with testing / contributing towards this. If you've started on a kirkwood.dtsi I could base off of, that would be great.
thx,
Jason.