diff options
Diffstat (limited to 'drivers')
200 files changed, 308 insertions, 439 deletions
diff --git a/drivers/adc/adc-uclass.c b/drivers/adc/adc-uclass.c index a4c20f4d352..7e9ad85c3c0 100644 --- a/drivers/adc/adc-uclass.c +++ b/drivers/adc/adc-uclass.c @@ -14,8 +14,6 @@ #include <adc.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - #define ADC_UCLASS_PLATDATA_SIZE sizeof(struct adc_uclass_platdata) #define CHECK_NUMBER true #define CHECK_MASK (!CHECK_NUMBER) diff --git a/drivers/ata/dwc_ahci.c b/drivers/ata/dwc_ahci.c index 6c7371e3edd..bb45214fc24 100644 --- a/drivers/ata/dwc_ahci.c +++ b/drivers/ata/dwc_ahci.c @@ -18,8 +18,6 @@ #include <asm/io.h> #include <generic-phy.h> -DECLARE_GLOBAL_DATA_PTR; - struct dwc_ahci_priv { void *base; void *wrapper_base; diff --git a/drivers/clk/at91/clk-plladiv.c b/drivers/clk/at91/clk-plladiv.c index 0599d2893b5..520fd13f63a 100644 --- a/drivers/clk/at91/clk-plladiv.c +++ b/drivers/clk/at91/clk-plladiv.c @@ -12,8 +12,6 @@ #include <mach/at91_pmc.h> #include "pmc.h" -DECLARE_GLOBAL_DATA_PTR; - static int at91_plladiv_clk_enable(struct clk *clk) { return 0; diff --git a/drivers/clk/at91/clk-utmi.c b/drivers/clk/at91/clk-utmi.c index 875bf293f9c..54970b949fa 100644 --- a/drivers/clk/at91/clk-utmi.c +++ b/drivers/clk/at91/clk-utmi.c @@ -14,8 +14,6 @@ #include <mach/sama5_sfr.h> #include "pmc.h" -DECLARE_GLOBAL_DATA_PTR; - /* * The purpose of this clock is to generate a 480 MHz signal. A different * rate can't be configured. diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c index 0c0881237cb..de8013e40a0 100644 --- a/drivers/clk/at91/sckc.c +++ b/drivers/clk/at91/sckc.c @@ -8,8 +8,6 @@ #include <common.h> #include <dm.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct udevice_id at91_sckc_match[] = { { .compatible = "atmel,at91sam9x5-sckc" }, {} diff --git a/drivers/clk/clk-hsdk-cgu.c b/drivers/clk/clk-hsdk-cgu.c index 4362d583cb4..56ef08c032b 100644 --- a/drivers/clk/clk-hsdk-cgu.c +++ b/drivers/clk/clk-hsdk-cgu.c @@ -59,8 +59,6 @@ * |----------------------------> */ -DECLARE_GLOBAL_DATA_PTR; - #define CGU_ARC_IDIV 0x080 #define CGU_TUN_IDIV_TUN 0x380 #define CGU_TUN_IDIV_ROM 0x390 diff --git a/drivers/clk/clk_stm32h7.c b/drivers/clk/clk_stm32h7.c index 9ee2e2e999a..5516b486003 100644 --- a/drivers/clk/clk_stm32h7.c +++ b/drivers/clk/clk_stm32h7.c @@ -15,8 +15,6 @@ #include <dt-bindings/clock/stm32h7-clks.h> -DECLARE_GLOBAL_DATA_PTR; - /* RCC CR specific definitions */ #define RCC_CR_HSION BIT(0) #define RCC_CR_HSIRDY BIT(2) diff --git a/drivers/clk/clk_zynqmp.c b/drivers/clk/clk_zynqmp.c index d0d6c898bc5..3f249752fb6 100644 --- a/drivers/clk/clk_zynqmp.c +++ b/drivers/clk/clk_zynqmp.c @@ -13,8 +13,6 @@ #include <asm/arch/sys_proto.h> #include <dm.h> -DECLARE_GLOBAL_DATA_PTR; - static const resource_size_t zynqmp_crf_apb_clkc_base = 0xfd1a0020; static const resource_size_t zynqmp_crl_apb_clkc_base = 0xff5e0020; diff --git a/drivers/clk/exynos/clk-exynos7420.c b/drivers/clk/exynos/clk-exynos7420.c index e34945dbbcc..832b2d8765e 100644 --- a/drivers/clk/exynos/clk-exynos7420.c +++ b/drivers/clk/exynos/clk-exynos7420.c @@ -14,8 +14,6 @@ #include <dt-bindings/clock/exynos7420-clk.h> #include "clk-pll.h" -DECLARE_GLOBAL_DATA_PTR; - #define DIVIDER(reg, shift, mask) \ (((readl(reg) >> shift) & mask) + 1) diff --git a/drivers/clk/rockchip/clk_rk3036.c b/drivers/clk/rockchip/clk_rk3036.c index 560222b96c4..c8aab7bb7d9 100644 --- a/drivers/clk/rockchip/clk_rk3036.c +++ b/drivers/clk/rockchip/clk_rk3036.c @@ -17,8 +17,6 @@ #include <dt-bindings/clock/rk3036-cru.h> #include <linux/log2.h> -DECLARE_GLOBAL_DATA_PTR; - enum { VCO_MAX_HZ = 2400U * 1000000, VCO_MIN_HZ = 600 * 1000000, @@ -317,11 +315,19 @@ static struct clk_ops rk3036_clk_ops = { .set_rate = rk3036_clk_set_rate, }; -static int rk3036_clk_probe(struct udevice *dev) +static int rk3036_clk_ofdata_to_platdata(struct udevice *dev) { struct rk3036_clk_priv *priv = dev_get_priv(dev); priv->cru = dev_read_addr_ptr(dev); + + return 0; +} + +static int rk3036_clk_probe(struct udevice *dev) +{ + struct rk3036_clk_priv *priv = dev_get_priv(dev); + rkclk_init(priv->cru); return 0; @@ -367,6 +373,7 @@ U_BOOT_DRIVER(rockchip_rk3036_cru) = { .id = UCLASS_CLK, .of_match = rk3036_clk_ids, .priv_auto_alloc_size = sizeof(struct rk3036_clk_priv), + .ofdata_to_platdata = rk3036_clk_ofdata_to_platdata, .ops = &rk3036_clk_ops, .bind = rk3036_clk_bind, .probe = rk3036_clk_probe, diff --git a/drivers/clk/rockchip/clk_rk3128.c b/drivers/clk/rockchip/clk_rk3128.c index 132d50dda38..b4dd8d261a4 100644 --- a/drivers/clk/rockchip/clk_rk3128.c +++ b/drivers/clk/rockchip/clk_rk3128.c @@ -18,8 +18,6 @@ #include <dt-bindings/clock/rk3128-cru.h> #include <linux/log2.h> -DECLARE_GLOBAL_DATA_PTR; - enum { VCO_MAX_HZ = 2400U * 1000000, VCO_MIN_HZ = 600 * 1000000, @@ -546,11 +544,19 @@ static struct clk_ops rk3128_clk_ops = { .set_rate = rk3128_clk_set_rate, }; +static int rk3128_clk_ofdata_to_platdata(struct udevice *dev) +{ + struct rk3128_clk_priv *priv = dev_get_priv(dev); + + priv->cru = dev_read_addr_ptr(dev); + + return 0; +} + static int rk3128_clk_probe(struct udevice *dev) { struct rk3128_clk_priv *priv = dev_get_priv(dev); - priv->cru = (struct rk3128_cru *)dev_read_addr(dev); rkclk_init(priv->cru); return 0; @@ -590,6 +596,7 @@ U_BOOT_DRIVER(rockchip_rk3128_cru) = { .id = UCLASS_CLK, .of_match = rk3128_clk_ids, .priv_auto_alloc_size = sizeof(struct rk3128_clk_priv), + .ofdata_to_platdata = rk3128_clk_ofdata_to_platdata, .ops = &rk3128_clk_ops, .bind = rk3128_clk_bind, .probe = rk3128_clk_probe, diff --git a/drivers/clk/rockchip/clk_rk3188.c b/drivers/clk/rockchip/clk_rk3188.c index cfe6abe4701..e6bf0442366 100644 --- a/drivers/clk/rockchip/clk_rk3188.c +++ b/drivers/clk/rockchip/clk_rk3188.c @@ -23,8 +23,6 @@ #include <dm/uclass-internal.h> #include <linux/log2.h> -DECLARE_GLOBAL_DATA_PTR; - enum rk3188_clk_type { RK3188_CRU, RK3188A_CRU, diff --git a/drivers/clk/rockchip/clk_rk322x.c b/drivers/clk/rockchip/clk_rk322x.c index ebcab73002d..91f5208aa4f 100644 --- a/drivers/clk/rockchip/clk_rk322x.c +++ b/drivers/clk/rockchip/clk_rk322x.c @@ -17,8 +17,6 @@ #include <dt-bindings/clock/rk3228-cru.h> #include <linux/log2.h> -DECLARE_GLOBAL_DATA_PTR; - enum { VCO_MAX_HZ = 3200U * 1000000, VCO_MIN_HZ = 800 * 1000000, diff --git a/drivers/clk/rockchip/clk_rk3288.c b/drivers/clk/rockchip/clk_rk3288.c index 3a36d04096b..78ada2d2db4 100644 --- a/drivers/clk/rockchip/clk_rk3288.c +++ b/drivers/clk/rockchip/clk_rk3288.c @@ -893,12 +893,25 @@ static int __maybe_unused rk3288_clk_set_parent(struct clk *clk, struct clk *par return -ENOENT; } +static int rk3288_clk_enable(struct clk *clk) +{ + switch (clk->id) { + case HCLK_USBHOST0: + case HCLK_HSIC: + return 0; + } + + debug("%s: unsupported clk %ld\n", __func__, clk->id); + return -ENOENT; +} + static struct clk_ops rk3288_clk_ops = { .get_rate = rk3288_clk_get_rate, .set_rate = rk3288_clk_set_rate, #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) .set_parent = rk3288_clk_set_parent, #endif + .enable = rk3288_clk_enable, }; static int rk3288_clk_ofdata_to_platdata(struct udevice *dev) diff --git a/drivers/clk/rockchip/clk_rk3328.c b/drivers/clk/rockchip/clk_rk3328.c index 046b4e4c2ff..f9a1e969a85 100644 --- a/drivers/clk/rockchip/clk_rk3328.c +++ b/drivers/clk/rockchip/clk_rk3328.c @@ -18,8 +18,6 @@ #include <dm/lists.h> #include <dt-bindings/clock/rk3328-cru.h> -DECLARE_GLOBAL_DATA_PTR; - struct pll_div { u32 refdiv; u32 fbdiv; diff --git a/drivers/clk/rockchip/clk_rk3368.c b/drivers/clk/rockchip/clk_rk3368.c index ea00f1fc9cc..e5a14ba4729 100644 --- a/drivers/clk/rockchip/clk_rk3368.c +++ b/drivers/clk/rockchip/clk_rk3368.c @@ -20,8 +20,6 @@ #include <dm/lists.h> #include <dt-bindings/clock/rk3368-cru.h> -DECLARE_GLOBAL_DATA_PTR; - #if CONFIG_IS_ENABLED(OF_PLATDATA) struct rk3368_clk_plat { struct dtd_rockchip_rk3368_cru dtd; diff --git a/drivers/clk/rockchip/clk_rk3399.c b/drivers/clk/rockchip/clk_rk3399.c index fb74c441ff9..86d8ca55bf9 100644 --- a/drivers/clk/rockchip/clk_rk3399.c +++ b/drivers/clk/rockchip/clk_rk3399.c @@ -20,8 +20,6 @@ #include <dm/lists.h> #include <dt-bindings/clock/rk3399-cru.h> -DECLARE_GLOBAL_DATA_PTR; - #if CONFIG_IS_ENABLED(OF_PLATDATA) struct rk3399_clk_plat { struct dtd_rockchip_rk3399_cru dtd; diff --git a/drivers/clk/rockchip/clk_rv1108.c b/drivers/clk/rockchip/clk_rv1108.c index 958fc785926..1cd8ab5d58b 100644 --- a/drivers/clk/rockchip/clk_rv1108.c +++ b/drivers/clk/rockchip/clk_rv1108.c @@ -17,8 +17,6 @@ #include <dm/lists.h> #include <dt-bindings/clock/rv1108-cru.h> -DECLARE_GLOBAL_DATA_PTR; - enum { VCO_MAX_HZ = 2400U * 1000000, VCO_MIN_HZ = 600 * 1000000, @@ -209,12 +207,19 @@ static void rkclk_init(struct rv1108_cru *cru) printf("APLL: %d DPLL:%d GPLL:%d\n", apll, dpll, gpll); } -static int rv1108_clk_probe(struct udevice *dev) +static int rv1108_clk_ofdata_to_platdata(struct udevice *dev) { struct rv1108_clk_priv *priv = dev_get_priv(dev); priv->cru = dev_read_addr_ptr(dev); + return 0; +} + +static int rv1108_clk_probe(struct udevice *dev) +{ + struct rv1108_clk_priv *priv = dev_get_priv(dev); + rkclk_init(priv->cru); return 0; @@ -260,6 +265,7 @@ U_BOOT_DRIVER(clk_rv1108) = { .id = UCLASS_CLK, .of_match = rv1108_clk_ids, .priv_auto_alloc_size = sizeof(struct rv1108_clk_priv), + .ofdata_to_platdata = rv1108_clk_ofdata_to_platdata, .ops = &rv1108_clk_ops, .bind = rv1108_clk_bind, .probe = rv1108_clk_probe, diff --git a/drivers/cpu/cpu-uclass.c b/drivers/cpu/cpu-uclass.c index 73e4853939e..e47377a0fe7 100644 --- a/drivers/cpu/cpu-uclass.c +++ b/drivers/cpu/cpu-uclass.c @@ -12,8 +12,6 @@ #include <dm/lists.h> #include <dm/root.h> -DECLARE_GLOBAL_DATA_PTR; - int cpu_get_desc(struct udevice *dev, char *buf, int size) { struct cpu_ops *ops = cpu_get_ops(dev); diff --git a/drivers/ddr/altera/sdram.c b/drivers/ddr/altera/sdram.c index e74c5b039ec..0f688f9bcf7 100644 --- a/drivers/ddr/altera/sdram.c +++ b/drivers/ddr/altera/sdram.c @@ -12,8 +12,6 @@ #include <asm/arch/system_manager.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - struct sdram_prot_rule { u32 sdram_start; /* SDRAM start address */ u32 sdram_end; /* SDRAM end address */ diff --git a/drivers/ddr/fsl/main.c b/drivers/ddr/fsl/main.c index d0a7b3f1076..61bbce92d46 100644 --- a/drivers/ddr/fsl/main.c +++ b/drivers/ddr/fsl/main.c @@ -15,8 +15,6 @@ #include <fsl_ddr_sdram.h> #include <fsl_ddr.h> -DECLARE_GLOBAL_DATA_PTR; - /* * CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY is the physical address from the view * of DDR controllers. It is the same as CONFIG_SYS_DDR_SDRAM_BASE for diff --git a/drivers/dma/dma-uclass.c b/drivers/dma/dma-uclass.c index 3d0ce22fbc2..7f92d24bc18 100644 --- a/drivers/dma/dma-uclass.c +++ b/drivers/dma/dma-uclass.c @@ -16,8 +16,6 @@ #include <dm/device-internal.h> #include <errno.h> -DECLARE_GLOBAL_DATA_PTR; - int dma_get_device(u32 transfer_type, struct udevice **devp) { struct udevice *dev; diff --git a/drivers/fpga/socfpga.c b/drivers/fpga/socfpga.c index 6e14ebd26d5..aef796c741c 100644 --- a/drivers/fpga/socfpga.c +++ b/drivers/fpga/socfpga.c @@ -12,8 +12,6 @@ #include <asm/arch/reset_manager.h> #include <asm/arch/system_manager.h> -DECLARE_GLOBAL_DATA_PTR; - /* Timeout count */ #define FPGA_TIMEOUT_CNT 0x1000000 diff --git a/drivers/fpga/socfpga_arria10.c b/drivers/fpga/socfpga_arria10.c index d5763965ddc..ee18675f7e5 100644 --- a/drivers/fpga/socfpga_arria10.c +++ b/drivers/fpga/socfpga_arria10.c @@ -23,8 +23,6 @@ #define FPGA_TIMEOUT_MSEC 1000 /* timeout in ms */ #define FPGA_TIMEOUT_CNT 0x1000000 -DECLARE_GLOBAL_DATA_PTR; - static const struct socfpga_fpga_manager *fpga_manager_base = (void *)SOCFPGA_FPGAMGRREGS_ADDRESS; @@ -111,12 +109,12 @@ static int wait_for_nconfig_pin_and_nstatus_pin(void) unsigned long mask = ALT_FPGAMGR_IMGCFG_STAT_F2S_NCONFIG_PIN_SET_MSK | ALT_FPGAMGR_IMGCFG_STAT_F2S_NSTATUS_PIN_SET_MSK; - /* Poll until f2s_nconfig_pin and f2s_nstatus_pin; loop until de-asserted, - * timeout at 1000ms + /* + * Poll until f2s_nconfig_pin and f2s_nstatus_pin; loop until + * de-asserted, timeout at 1000ms */ - return wait_for_bit_le32(&fpga_manager_base->imgcfg_stat, - mask, - false, FPGA_TIMEOUT_MSEC, false); + return wait_for_bit_le32(&fpga_manager_base->imgcfg_stat, mask, + true, FPGA_TIMEOUT_MSEC, false); } static int wait_for_f2s_nstatus_pin(unsigned long value) diff --git a/drivers/fpga/socfpga_gen5.c b/drivers/fpga/socfpga_gen5.c index 3dfb0303d36..88ae035e29d 100644 --- a/drivers/fpga/socfpga_gen5.c +++ b/drivers/fpga/socfpga_gen5.c @@ -12,8 +12,6 @@ #include <asm/arch/reset_manager.h> #include <asm/arch/system_manager.h> -DECLARE_GLOBAL_DATA_PTR; - #define FPGA_TIMEOUT_CNT 0x1000000 static struct socfpga_fpga_manager *fpgamgr_regs = diff --git a/drivers/gpio/hsdk-creg-gpio.c b/drivers/gpio/hsdk-creg-gpio.c index 8ca807a18f4..084a2da6522 100644 --- a/drivers/gpio/hsdk-creg-gpio.c +++ b/drivers/gpio/hsdk-creg-gpio.c @@ -16,8 +16,6 @@ #include <errno.h> #include <linux/printk.h> -DECLARE_GLOBAL_DATA_PTR; - #define HSDK_CREG_MAX_GPIO 8 #define GPIO_ACTIVATE 0x2 diff --git a/drivers/gpio/imx_rgpio2p.c b/drivers/gpio/imx_rgpio2p.c index 7825714e800..0de74cb67d9 100644 --- a/drivers/gpio/imx_rgpio2p.c +++ b/drivers/gpio/imx_rgpio2p.c @@ -14,8 +14,6 @@ #include <asm/io.h> #include <malloc.h> -DECLARE_GLOBAL_DATA_PTR; - enum imx_rgpio2p_direction { IMX_RGPIO2P_DIRECTION_IN, IMX_RGPIO2P_DIRECTION_OUT, diff --git a/drivers/gpio/mvebu_gpio.c b/drivers/gpio/mvebu_gpio.c index 85dea14c519..79942ff76a3 100644 --- a/drivers/gpio/mvebu_gpio.c +++ b/drivers/gpio/mvebu_gpio.c @@ -10,8 +10,6 @@ #include <asm/io.h> #include <errno.h> -DECLARE_GLOBAL_DATA_PTR; - #define MVEBU_GPIOS_PER_BANK 32 struct mvebu_gpio_regs { diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c index d0e365a54b0..c6427d7252b 100644 --- a/drivers/gpio/mxc_gpio.c +++ b/drivers/gpio/mxc_gpio.c @@ -158,8 +158,6 @@ int gpio_direction_output(unsigned gpio, int value) #ifdef CONFIG_DM_GPIO #include <fdtdec.h> -DECLARE_GLOBAL_DATA_PTR; - static int mxc_gpio_is_output(struct gpio_regs *regs, int offset) { u32 val; diff --git a/drivers/gpio/pm8916_gpio.c b/drivers/gpio/pm8916_gpio.c index 42f068ecb65..3b6de9d7152 100644 --- a/drivers/gpio/pm8916_gpio.c +++ b/drivers/gpio/pm8916_gpio.c @@ -14,8 +14,6 @@ #include <asm/gpio.h> #include <linux/bitops.h> -DECLARE_GLOBAL_DATA_PTR; - /* Register offset for each gpio */ #define REG_OFFSET(x) ((x) * 0x100) diff --git a/drivers/gpio/sandbox.c b/drivers/gpio/sandbox.c index 2a18f328576..02f2a245b8e 100644 --- a/drivers/gpio/sandbox.c +++ b/drivers/gpio/sandbox.c @@ -11,8 +11,6 @@ #include <dm/of.h> #include <dt-bindings/gpio/gpio.h> -DECLARE_GLOBAL_DATA_PTR; - /* Flags for each GPIO */ #define GPIOF_OUTPUT (1 << 0) /* Currently set as an output */ #define GPIOF_HIGH (1 << 1) /* Currently set high */ diff --git a/drivers/gpio/sunxi_gpio.c b/drivers/gpio/sunxi_gpio.c index ea6f3593b9e..706afce993b 100644 --- a/drivers/gpio/sunxi_gpio.c +++ b/drivers/gpio/sunxi_gpio.c @@ -21,8 +21,6 @@ #include <dm/device-internal.h> #include <dt-bindings/gpio/gpio.h> -DECLARE_GLOBAL_DATA_PTR; - #define SUNXI_GPIOS_PER_BANK SUNXI_GPIO_A_NR struct sunxi_gpio_platdata { diff --git a/drivers/gpio/tegra186_gpio.c b/drivers/gpio/tegra186_gpio.c index deb59e8b320..6d610ef118d 100644 --- a/drivers/gpio/tegra186_gpio.c +++ b/drivers/gpio/tegra186_gpio.c @@ -17,8 +17,6 @@ #include <dt-bindings/gpio/gpio.h> #include "tegra186_gpio_priv.h" -DECLARE_GLOBAL_DATA_PTR; - struct tegra186_gpio_port_data { const char *name; uint32_t offset; diff --git a/drivers/gpio/tegra_gpio.c b/drivers/gpio/tegra_gpio.c index 49655831585..faf950e2d3f 100644 --- a/drivers/gpio/tegra_gpio.c +++ b/drivers/gpio/tegra_gpio.c @@ -23,8 +23,6 @@ #include <dm/device-internal.h> #include <dt-bindings/gpio/gpio.h> -DECLARE_GLOBAL_DATA_PTR; - static const int CONFIG_SFIO = 0; static const int CONFIG_GPIO = 1; static const int DIRECTION_INPUT = 0; diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c index 7ed0c10f72e..d6329715db7 100644 --- a/drivers/i2c/ast_i2c.c +++ b/drivers/i2c/ast_i2c.c @@ -22,8 +22,6 @@ #define HIGHSPEED_TTIMEOUT 3 -DECLARE_GLOBAL_DATA_PTR; - /* * Device private data */ diff --git a/drivers/i2c/i2c-cdns.c b/drivers/i2c/i2c-cdns.c index 8265ce32106..a977a7fcbd3 100644 --- a/drivers/i2c/i2c-cdns.c +++ b/drivers/i2c/i2c-cdns.c @@ -19,8 +19,6 @@ #include <mapmem.h> #include <wait_bit.h> -DECLARE_GLOBAL_DATA_PTR; - /* i2c register set */ struct cdns_i2c_regs { u32 control; diff --git a/drivers/i2c/imx_lpi2c.c b/drivers/i2c/imx_lpi2c.c index 32d7809dba6..937410fa2c2 100644 --- a/drivers/i2c/imx_lpi2c.c +++ b/drivers/i2c/imx_lpi2c.c @@ -15,7 +15,6 @@ #include <fdtdec.h> #include <i2c.h> -DECLARE_GLOBAL_DATA_PTR; #define LPI2C_FIFO_SIZE 4 #define LPI2C_TIMEOUT_MS 100 diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c index 5d338151462..0759585c9e1 100644 --- a/drivers/i2c/omap24xx_i2c.c +++ b/drivers/i2c/omap24xx_i2c.c @@ -47,8 +47,6 @@ #include "omap24xx_i2c.h" -DECLARE_GLOBAL_DATA_PTR; - #define I2C_TIMEOUT 1000 /* Absolutely safe for status update at 100 kHz I2C: */ diff --git a/drivers/i2c/rk_i2c.c b/drivers/i2c/rk_i2c.c index 332280c220e..a09adcdc150 100644 --- a/drivers/i2c/rk_i2c.c +++ b/drivers/i2c/rk_i2c.c @@ -19,8 +19,6 @@ #include <dm/pinctrl.h> #include <linux/sizes.h> -DECLARE_GLOBAL_DATA_PTR; - /* i2c timerout */ #define I2C_TIMEOUT_MS 100 #define I2C_RETRY_COUNT 3 diff --git a/drivers/i2c/sandbox_i2c.c b/drivers/i2c/sandbox_i2c.c index f5978fda29b..6e02dac2ec1 100644 --- a/drivers/i2c/sandbox_i2c.c +++ b/drivers/i2c/sandbox_i2c.c @@ -14,8 +14,6 @@ #include <dm/lists.h> #include <dm/device-internal.h> -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_i2c_priv { bool test_mode; }; diff --git a/drivers/i2c/stm32f7_i2c.c b/drivers/i2c/stm32f7_i2c.c index 81f061aecd8..5ca0b7d4971 100644 --- a/drivers/i2c/stm32f7_i2c.c +++ b/drivers/i2c/stm32f7_i2c.c @@ -244,8 +244,6 @@ static struct stm32_i2c_setup stm32f7_setup = { .analog_filter = STM32_I2C_ANALOG_FILTER_ENABLE, }; -DECLARE_GLOBAL_DATA_PTR; - static int stm32_i2c_check_device_busy(struct stm32_i2c_priv *i2c_priv) { struct stm32_i2c_regs *regs = i2c_priv->regs; diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c index 7d23e51b69d..2d6cd0286e1 100644 --- a/drivers/i2c/tegra_i2c.c +++ b/drivers/i2c/tegra_i2c.c @@ -20,8 +20,6 @@ #include <asm/arch/gpio.h> #include <asm/arch-tegra/tegra_i2c.h> -DECLARE_GLOBAL_DATA_PTR; - enum i2c_type { TYPE_114, TYPE_STD, diff --git a/drivers/input/cros_ec_keyb.c b/drivers/input/cros_ec_keyb.c index 6fa35a63ddc..f0bf139ae19 100644 --- a/drivers/input/cros_ec_keyb.c +++ b/drivers/input/cros_ec_keyb.c @@ -15,8 +15,6 @@ #include <key_matrix.h> #include <stdio_dev.h> -DECLARE_GLOBAL_DATA_PTR; - enum { KBC_MAX_KEYS = 8, /* Maximum keys held down at once */ KBC_REPEAT_RATE_MS = 30, diff --git a/drivers/input/tegra-kbc.c b/drivers/input/tegra-kbc.c index cb5695784e9..1c2768345a8 100644 --- a/drivers/input/tegra-kbc.c +++ b/drivers/input/tegra-kbc.c @@ -19,8 +19,6 @@ #include <asm/arch-tegra/timer.h> #include <linux/input.h> -DECLARE_GLOBAL_DATA_PTR; - enum { KBC_MAX_GPIO = 24, KBC_MAX_KPENT = 8, /* size of keypress entry queue */ diff --git a/drivers/led/led_gpio.c b/drivers/led/led_gpio.c index 99766358871..5e0c524aecf 100644 --- a/drivers/led/led_gpio.c +++ b/drivers/led/led_gpio.c @@ -12,8 +12,6 @@ #include <asm/gpio.h> #include <dm/lists.h> -DECLARE_GLOBAL_DATA_PTR; - struct led_gpio_priv { struct gpio_desc gpio; }; diff --git a/drivers/mailbox/mailbox-uclass.c b/drivers/mailbox/mailbox-uclass.c index 822ae5b45e5..d053db031dd 100644 --- a/drivers/mailbox/mailbox-uclass.c +++ b/drivers/mailbox/mailbox-uclass.c @@ -9,8 +9,6 @@ #include <mailbox.h> #include <mailbox-uclass.h> -DECLARE_GLOBAL_DATA_PTR; - static inline struct mbox_ops *mbox_dev_ops(struct udevice *dev) { return (struct mbox_ops *)dev->driver->ops; diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c index bd2ec411c75..8d1df20bf9c 100644 --- a/drivers/mailbox/tegra-hsp.c +++ b/drivers/mailbox/tegra-hsp.c @@ -36,8 +36,6 @@ struct tegra_hsp { uint32_t db_base; }; -DECLARE_GLOBAL_DATA_PTR; - static uint32_t *tegra_hsp_reg(struct tegra_hsp *thsp, uint32_t db_id, uint32_t reg) { diff --git a/drivers/misc/cros_ec.c b/drivers/misc/cros_ec.c index eefaaa53ad4..bed80dc4554 100644 --- a/drivers/misc/cros_ec.c +++ b/drivers/misc/cros_ec.c @@ -42,8 +42,6 @@ enum { CROS_EC_CMD_HASH_TIMEOUT_MS = 2000, }; -DECLARE_GLOBAL_DATA_PTR; - void cros_ec_dump_data(const char *name, int cmd, const uint8_t *data, int len) { #ifdef DEBUG diff --git a/drivers/misc/cros_ec_sandbox.c b/drivers/misc/cros_ec_sandbox.c index 5924adee408..1f1e23e6d1c 100644 --- a/drivers/misc/cros_ec_sandbox.c +++ b/drivers/misc/cros_ec_sandbox.c @@ -51,8 +51,6 @@ * the EC image in with U-Boot (Vic has demonstrated a prototype for this). */ -DECLARE_GLOBAL_DATA_PTR; - #define KEYBOARD_ROWS 8 #define KEYBOARD_COLS 13 diff --git a/drivers/misc/cros_ec_spi.c b/drivers/misc/cros_ec_spi.c index 253d91a5537..51714a471c8 100644 --- a/drivers/misc/cros_ec_spi.c +++ b/drivers/misc/cros_ec_spi.c @@ -19,8 +19,6 @@ #include <errno.h> #include <spi.h> -DECLARE_GLOBAL_DATA_PTR; - int cros_ec_spi_packet(struct udevice *udev, int out_bytes, int in_bytes) { struct cros_ec_dev *dev = dev_get_uclass_priv(udev); diff --git a/drivers/misc/i2c_eeprom_emul.c b/drivers/misc/i2c_eeprom_emul.c index 52aa7d69e96..6f84e815e82 100644 --- a/drivers/misc/i2c_eeprom_emul.c +++ b/drivers/misc/i2c_eeprom_emul.c @@ -19,8 +19,6 @@ #define debug_buffer(x, ...) #endif -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_i2c_flash_plat_data { enum sandbox_i2c_eeprom_test_mode test_mode; const char *filename; diff --git a/drivers/misc/spltest_sandbox.c b/drivers/misc/spltest_sandbox.c index 1fef8252ab8..24aba78882a 100644 --- a/drivers/misc/spltest_sandbox.c +++ b/drivers/misc/spltest_sandbox.c @@ -9,8 +9,6 @@ #include <dm.h> #include <dt-structs.h> -DECLARE_GLOBAL_DATA_PTR; - static int sandbox_spl_probe(struct udevice *dev) { struct dtd_sandbox_spl_test *plat = dev_get_platdata(dev); diff --git a/drivers/misc/syscon_sandbox.c b/drivers/misc/syscon_sandbox.c index ccfab3ef987..e78b6e476eb 100644 --- a/drivers/misc/syscon_sandbox.c +++ b/drivers/misc/syscon_sandbox.c @@ -12,8 +12,6 @@ #include <asm/test.h> #include <dm/lists.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct udevice_id sandbox_syscon_ids[] = { { .compatible = "sandbox,syscon0", .data = SYSCON0 }, { .compatible = "sandbox,syscon1", .data = SYSCON1 }, diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index 89a7c192424..8664a373a10 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -25,8 +25,6 @@ #ifdef CONFIG_DM_MMC #include <dm.h> -DECLARE_GLOBAL_DATA_PTR; - #define MMC_CLOCK_MAX 48000000 #define MMC_CLOCK_MIN 400000 diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c index bccd182e50c..752c660ea73 100644 --- a/drivers/mmc/bcm2835_sdhost.c +++ b/drivers/mmc/bcm2835_sdhost.c @@ -44,8 +44,6 @@ #include <mach/gpio.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - #define msleep(a) udelay(a * 1000) #define SDCMD 0x00 /* Command to SD card - 16 R/W */ diff --git a/drivers/mmc/gen_atmel_mci.c b/drivers/mmc/gen_atmel_mci.c index 1c108b5470d..186b3d7dbf1 100644 --- a/drivers/mmc/gen_atmel_mci.c +++ b/drivers/mmc/gen_atmel_mci.c @@ -22,8 +22,6 @@ #include <asm/arch/hardware.h> #include "atmel_mci.h" -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_SYS_MMC_CLK_OD # define CONFIG_SYS_MMC_CLK_OD 150000 #endif diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c index a3536b15ae6..0481e276c0f 100644 --- a/drivers/mmc/mmc-uclass.c +++ b/drivers/mmc/mmc-uclass.c @@ -12,8 +12,6 @@ #include <dm/lists.h> #include "mmc_private.h" -DECLARE_GLOBAL_DATA_PTR; - int dm_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *data) { diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c index 807dc9e72f6..4ba1436159d 100644 --- a/drivers/mmc/rockchip_dw_mmc.c +++ b/drivers/mmc/rockchip_dw_mmc.c @@ -18,8 +18,6 @@ #include <asm/arch/periph.h> #include <linux/err.h> -DECLARE_GLOBAL_DATA_PTR; - struct rockchip_mmc_plat { #if CONFIG_IS_ENABLED(OF_PLATDATA) struct dtd_rockchip_rk3288_dw_mshc dtplat; diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c index ab89be47644..8868f341f33 100644 --- a/drivers/mmc/rockchip_sdhci.c +++ b/drivers/mmc/rockchip_sdhci.c @@ -15,7 +15,6 @@ #include <sdhci.h> #include <clk.h> -DECLARE_GLOBAL_DATA_PTR; /* 400KHz is max freq for card ID etc. Use that as min */ #define EMMC_MIN_FREQ 400000 diff --git a/drivers/mmc/sandbox_mmc.c b/drivers/mmc/sandbox_mmc.c index 8a5d256c115..0945beb368a 100644 --- a/drivers/mmc/sandbox_mmc.c +++ b/drivers/mmc/sandbox_mmc.c @@ -12,8 +12,6 @@ #include <mmc.h> #include <asm/test.h> -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_mmc_plat { struct mmc_config cfg; struct mmc mmc; diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c index f5b21dd097d..47afa263ea0 100644 --- a/drivers/mmc/stm32_sdmmc2.c +++ b/drivers/mmc/stm32_sdmmc2.c @@ -189,8 +189,6 @@ struct stm32_sdmmc2_ctx { #define SDMMC_CMD_TIMEOUT 0xFFFFFFFF -DECLARE_GLOBAL_DATA_PTR; - static void stm32_sdmmc2_start_data(struct stm32_sdmmc2_priv *priv, struct mmc_data *data, struct stm32_sdmmc2_ctx *ctx) diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c index df6f32850e2..5292f2d3cc1 100644 --- a/drivers/mmc/sunxi_mmc.c +++ b/drivers/mmc/sunxi_mmc.c @@ -147,19 +147,19 @@ static int mmc_set_mod_clk(struct sunxi_mmc_priv *priv, unsigned int hz) oclk_dly = 0; sclk_dly = 5; #ifdef CONFIG_MACH_SUN9I - } else if (hz <= 50000000) { + } else if (hz <= 52000000) { oclk_dly = 5; sclk_dly = 4; } else { - /* hz > 50000000 */ + /* hz > 52000000 */ oclk_dly = 2; sclk_dly = 4; #else - } else if (hz <= 50000000) { + } else if (hz <= 52000000) { oclk_dly = 3; sclk_dly = 4; } else { - /* hz > 50000000 */ + /* hz > 52000000 */ oclk_dly = 1; sclk_dly = 4; #endif @@ -188,15 +188,16 @@ static int mmc_update_clk(struct sunxi_mmc_priv *priv) { unsigned int cmd; unsigned timeout_msecs = 2000; + unsigned long start = get_timer(0); cmd = SUNXI_MMC_CMD_START | SUNXI_MMC_CMD_UPCLK_ONLY | SUNXI_MMC_CMD_WAIT_PRE_OVER; + writel(cmd, &priv->reg->cmd); while (readl(&priv->reg->cmd) & SUNXI_MMC_CMD_START) { - if (!timeout_msecs--) + if (get_timer(start) > timeout_msecs) return -1; - udelay(1000); } /* clock update sets various irq status bits, clear these */ @@ -277,18 +278,21 @@ static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc, unsigned i; unsigned *buff = (unsigned int *)(reading ? data->dest : data->src); unsigned byte_cnt = data->blocksize * data->blocks; - unsigned timeout_usecs = (byte_cnt >> 8) * 1000; - if (timeout_usecs < 2000000) - timeout_usecs = 2000000; + unsigned timeout_msecs = byte_cnt >> 8; + unsigned long start; + + if (timeout_msecs < 2000) + timeout_msecs = 2000; /* Always read / write data through the CPU */ setbits_le32(&priv->reg->gctrl, SUNXI_MMC_GCTRL_ACCESS_BY_AHB); + start = get_timer(0); + for (i = 0; i < (byte_cnt >> 2); i++) { while (readl(&priv->reg->status) & status_bit) { - if (!timeout_usecs--) + if (get_timer(start) > timeout_msecs) return -1; - udelay(1); } if (reading) @@ -304,16 +308,16 @@ static int mmc_rint_wait(struct sunxi_mmc_priv *priv, struct mmc *mmc, uint timeout_msecs, uint done_bit, const char *what) { unsigned int status; + unsigned long start = get_timer(0); do { status = readl(&priv->reg->rint); - if (!timeout_msecs-- || + if ((get_timer(start) > timeout_msecs) || (status & SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT)) { debug("%s timeout %x\n", what, status & SUNXI_MMC_RINT_INTERRUPT_ERROR_BIT); return -ETIMEDOUT; } - udelay(1000); } while (!(status & done_bit)); return 0; @@ -405,15 +409,16 @@ static int sunxi_mmc_send_cmd_common(struct sunxi_mmc_priv *priv, } if (cmd->resp_type & MMC_RSP_BUSY) { + unsigned long start = get_timer(0); timeout_msecs = 2000; + do { status = readl(&priv->reg->status); - if (!timeout_msecs--) { + if (get_timer(start) > timeout_msecs) { debug("busy timeout\n"); error = -ETIMEDOUT; goto out; } - udelay(1000); } while (status & SUNXI_MMC_STATUS_CARD_DATA_BUSY); } diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c index 74745296b47..ee63166e553 100644 --- a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ -16,8 +16,6 @@ #include <asm/io.h> #include <asm/arch-tegra/tegra_mmc.h> -DECLARE_GLOBAL_DATA_PTR; - struct tegra_mmc_plat { struct mmc_config cfg; struct mmc mmc; diff --git a/drivers/mtd/nand/nand.c b/drivers/mtd/nand/nand.c index 6aa909fdd97..e4225852bd1 100644 --- a/drivers/mtd/nand/nand.c +++ b/drivers/mtd/nand/nand.c @@ -15,8 +15,6 @@ #define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE } #endif -DECLARE_GLOBAL_DATA_PTR; - int nand_curr_device = -1; static struct mtd_info *nand_info[CONFIG_SYS_MAX_NAND_DEVICE]; diff --git a/drivers/mtd/spi/sandbox.c b/drivers/mtd/spi/sandbox.c index 1ba68152322..7893efee12a 100644 --- a/drivers/mtd/spi/sandbox.c +++ b/drivers/mtd/spi/sandbox.c @@ -24,8 +24,6 @@ #include <dm/lists.h> #include <dm/uclass-internal.h> -DECLARE_GLOBAL_DATA_PTR; - /* * The different states that our SPI flash transitions between. * We need to keep track of this across multiple xfer calls since diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index 839cdbe1b0f..614a293234e 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -87,6 +87,19 @@ enum spi_nor_option_flags { /* SST specific */ #ifdef CONFIG_SPI_FLASH_SST +#define SST26_CMD_READ_BPR 0x72 +#define SST26_CMD_WRITE_BPR 0x42 + +#define SST26_BPR_8K_NUM 4 +#define SST26_MAX_BPR_REG_LEN (18 + 1) +#define SST26_BOUND_REG_SIZE ((32 + SST26_BPR_8K_NUM * 8) * SZ_1K) + +enum lock_ctl { + SST26_CTL_LOCK, + SST26_CTL_UNLOCK, + SST26_CTL_CHECK +}; + # define CMD_SST_BP 0x02 /* Byte Program */ # define CMD_SST_AAI_WP 0xAD /* Auto Address Incr Word Program */ diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 2e61685d3ea..b78a869f586 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -16,12 +16,11 @@ #include <spi.h> #include <spi_flash.h> #include <linux/log2.h> +#include <linux/sizes.h> #include <dma.h> #include "sf_internal.h" -DECLARE_GLOBAL_DATA_PTR; - static void spi_flash_addr(u32 addr, u8 *cmd) { /* cmd[0] is actual command */ @@ -541,6 +540,164 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, } #ifdef CONFIG_SPI_FLASH_SST +static bool sst26_process_bpr(u32 bpr_size, u8 *cmd, u32 bit, enum lock_ctl ctl) +{ + switch (ctl) { + case SST26_CTL_LOCK: + cmd[bpr_size - (bit / 8) - 1] |= BIT(bit % 8); + break; + case SST26_CTL_UNLOCK: + cmd[bpr_size - (bit / 8) - 1] &= ~BIT(bit % 8); + break; + case SST26_CTL_CHECK: + return !!(cmd[bpr_size - (bit / 8) - 1] & BIT(bit % 8)); + } + + return false; +} + +/* + * sst26wf016/sst26wf032/sst26wf064 have next block protection: + * 4x - 8 KByte blocks - read & write protection bits - upper addresses + * 1x - 32 KByte blocks - write protection bits + * rest - 64 KByte blocks - write protection bits + * 1x - 32 KByte blocks - write protection bits + * 4x - 8 KByte blocks - read & write protection bits - lower addresses + * + * We'll support only per 64k lock/unlock so lower and upper 64 KByte region + * will be treated as single block. + */ + +/* + * Lock, unlock or check lock status of the flash region of the flash (depending + * on the lock_ctl value) + */ +static int sst26_lock_ctl(struct spi_flash *flash, u32 ofs, size_t len, enum lock_ctl ctl) +{ + u32 i, bpr_ptr, rptr_64k, lptr_64k, bpr_size; + bool lower_64k = false, upper_64k = false; + u8 cmd, bpr_buff[SST26_MAX_BPR_REG_LEN] = {}; + int ret; + + /* Check length and offset for 64k alignment */ + if ((ofs & (SZ_64K - 1)) || (len & (SZ_64K - 1))) + return -EINVAL; + + if (ofs + len > flash->size) + return -EINVAL; + + /* SST26 family has only 16 Mbit, 32 Mbit and 64 Mbit IC */ + if (flash->size != SZ_2M && + flash->size != SZ_4M && + flash->size != SZ_8M) + return -EINVAL; + + bpr_size = 2 + (flash->size / SZ_64K / 8); + + cmd = SST26_CMD_READ_BPR; + ret = spi_flash_read_common(flash, &cmd, 1, bpr_buff, bpr_size); + if (ret < 0) { + printf("SF: fail to read block-protection register\n"); + return ret; + } + + rptr_64k = min_t(u32, ofs + len , flash->size - SST26_BOUND_REG_SIZE); + lptr_64k = max_t(u32, ofs, SST26_BOUND_REG_SIZE); + + upper_64k = ((ofs + len) > (flash->size - SST26_BOUND_REG_SIZE)); + lower_64k = (ofs < SST26_BOUND_REG_SIZE); + + /* Lower bits in block-protection register are about 64k region */ + bpr_ptr = lptr_64k / SZ_64K - 1; + + /* Process 64K blocks region */ + while (lptr_64k < rptr_64k) { + if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl)) + return EACCES; + + bpr_ptr++; + lptr_64k += SZ_64K; + } + + /* 32K and 8K region bits in BPR are after 64k region bits */ + bpr_ptr = (flash->size - 2 * SST26_BOUND_REG_SIZE) / SZ_64K; + + /* Process lower 32K block region */ + if (lower_64k) + if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl)) + return EACCES; + + bpr_ptr++; + + /* Process upper 32K block region */ + if (upper_64k) + if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl)) + return EACCES; + + bpr_ptr++; + + /* Process lower 8K block regions */ + for (i = 0; i < SST26_BPR_8K_NUM; i++) { + if (lower_64k) + if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl)) + return EACCES; + + /* In 8K area BPR has both read and write protection bits */ + bpr_ptr += 2; + } + + /* Process upper 8K block regions */ + for (i = 0; i < SST26_BPR_8K_NUM; i++) { + if (upper_64k) + if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl)) + return EACCES; + + /* In 8K area BPR has both read and write protection bits */ + bpr_ptr += 2; + } + + /* If we check region status we don't need to write BPR back */ + if (ctl == SST26_CTL_CHECK) + return 0; + + cmd = SST26_CMD_WRITE_BPR; + ret = spi_flash_write_common(flash, &cmd, 1, bpr_buff, bpr_size); + if (ret < 0) { + printf("SF: fail to write block-protection register\n"); + return ret; + } + + return 0; +} + +static int sst26_unlock(struct spi_flash *flash, u32 ofs, size_t len) +{ + return sst26_lock_ctl(flash, ofs, len, SST26_CTL_UNLOCK); +} + +static int sst26_lock(struct spi_flash *flash, u32 ofs, size_t len) +{ + return sst26_lock_ctl(flash, ofs, len, SST26_CTL_LOCK); +} + +/* + * Returns EACCES (positive value) if region is locked, 0 if region is unlocked, + * and negative on errors. + */ +static int sst26_is_locked(struct spi_flash *flash, u32 ofs, size_t len) +{ + /* + * is_locked function is used for check before reading or erasing flash + * region, so offset and length might be not 64k allighned, so adjust + * them to be 64k allighned as sst26_lock_ctl works only with 64k + * allighned regions. + */ + ofs -= ofs & (SZ_64K - 1); + len = len & (SZ_64K - 1) ? (len & ~(SZ_64K - 1)) + SZ_64K : len; + + return sst26_lock_ctl(flash, ofs, len, SST26_CTL_CHECK); +} + static int sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf) { struct spi_slave *spi = flash->spi; @@ -1033,6 +1190,15 @@ int spi_flash_scan(struct spi_flash *flash) } #endif +/* sst26wf series block protection implementation differs from other series */ +#if defined(CONFIG_SPI_FLASH_SST) + if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST && info->id[1] == 0x26) { + flash->flash_lock = sst26_lock; + flash->flash_unlock = sst26_unlock; + flash->flash_is_locked = sst26_is_locked; + } +#endif + /* Compute the flash size */ flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0; flash->page_size = info->page_size; diff --git a/drivers/mtd/spi/spi_flash_ids.c b/drivers/mtd/spi/spi_flash_ids.c index b789219e4e4..ef55abb01dd 100644 --- a/drivers/mtd/spi/spi_flash_ids.c +++ b/drivers/mtd/spi/spi_flash_ids.c @@ -94,6 +94,7 @@ const struct spi_flash_info spi_flash_ids[] = { {"s25fl016a", INFO(0x010214, 0x0, 64 * 1024, 32, 0) }, {"s25fl032a", INFO(0x010215, 0x0, 64 * 1024, 64, 0) }, {"s25fl064a", INFO(0x010216, 0x0, 64 * 1024, 128, 0) }, + {"s25fl208k", INFO(0x014014, 0x0, 64 * 1024, 16, 0) }, {"s25fl116k", INFO(0x014015, 0x0, 64 * 1024, 32, 0) }, {"s25fl164k", INFO(0x014017, 0x0140, 64 * 1024, 128, 0) }, {"s25fl128p_256k", INFO(0x012018, 0x0300, 256 * 1024, 64, RD_FULL | WR_QPP) }, @@ -151,6 +152,9 @@ const struct spi_flash_info spi_flash_ids[] = { {"sst25wf040", INFO(0xbf2504, 0x0, 64 * 1024, 8, SECT_4K | SST_WR) }, {"sst25wf040b", INFO(0x621613, 0x0, 64 * 1024, 8, SECT_4K) }, {"sst25wf080", INFO(0xbf2505, 0x0, 64 * 1024, 16, SECT_4K | SST_WR) }, + {"sst26wf016", INFO(0xbf2651, 0x0, 64 * 1024, 32, SECT_4K) }, + {"sst26wf032", INFO(0xbf2622, 0x0, 64 * 1024, 64, SECT_4K) }, + {"sst26wf064", INFO(0xbf2643, 0x0, 64 * 1024, 128, SECT_4K) }, #endif #ifdef CONFIG_SPI_FLASH_WINBOND /* WINBOND */ {"w25p80", INFO(0xef2014, 0x0, 64 * 1024, 16, 0) }, diff --git a/drivers/net/designware.c b/drivers/net/designware.c index 43670a7d0c9..765e3566450 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -23,8 +23,6 @@ #include <power/regulator.h> #include "designware.h" -DECLARE_GLOBAL_DATA_PTR; - static int dw_mdio_read(struct mii_dev *bus, int addr, int devad, int reg) { #ifdef CONFIG_DM_ETH diff --git a/drivers/net/e1000_spi.c b/drivers/net/e1000_spi.c index cb5f93d6523..b38f4df9f31 100644 --- a/drivers/net/e1000_spi.c +++ b/drivers/net/e1000_spi.c @@ -78,8 +78,6 @@ static inline struct e1000_hw *e1000_hw_from_spi(struct spi_slave *spi) } /* Not sure why all of these are necessary */ -void spi_init_r(void) { /* Nothing to do */ } -void spi_init_f(void) { /* Nothing to do */ } void spi_init(void) { /* Nothing to do */ } struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, diff --git a/drivers/net/fsl_mcdmafec.c b/drivers/net/fsl_mcdmafec.c index 00d905c299d..ad7e051722d 100644 --- a/drivers/net/fsl_mcdmafec.c +++ b/drivers/net/fsl_mcdmafec.c @@ -38,8 +38,6 @@ #include "MCD_dma.h" -DECLARE_GLOBAL_DATA_PTR; - struct fec_info_dma fec_info[] = { #ifdef CONFIG_SYS_FEC0_IOBASE { diff --git a/drivers/net/gmac_rockchip.c b/drivers/net/gmac_rockchip.c index 683e820108f..5ed3049fa68 100644 --- a/drivers/net/gmac_rockchip.c +++ b/drivers/net/gmac_rockchip.c @@ -25,8 +25,6 @@ #include <dt-bindings/clock/rk3288-cru.h> #include "designware.h" -DECLARE_GLOBAL_DATA_PTR; - /* * Platform data for the gmac * diff --git a/drivers/net/lpc32xx_eth.c b/drivers/net/lpc32xx_eth.c index cbef3359abe..1efe625c5fb 100644 --- a/drivers/net/lpc32xx_eth.c +++ b/drivers/net/lpc32xx_eth.c @@ -218,8 +218,6 @@ struct lpc32xx_eth_device { #define MII_MAX_PHY (MADR_PHY_MASK >> MADR_PHY_OFFSET) -DECLARE_GLOBAL_DATA_PTR; - #if defined(CONFIG_PHYLIB) || defined(CONFIG_MII) || defined(CONFIG_CMD_MII) /* * mii_reg_read - miiphy_read callback function. diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c index 505a2d1bee8..82838c62f24 100644 --- a/drivers/net/mcffec.c +++ b/drivers/net/mcffec.c @@ -33,8 +33,6 @@ #define BD_ENET_RX_W_E (BD_ENET_RX_WRAP | BD_ENET_RX_EMPTY) #define BD_ENET_TX_RDY_LST (BD_ENET_TX_READY | BD_ENET_TX_LAST) -DECLARE_GLOBAL_DATA_PTR; - struct fec_info_s fec_info[] = { #ifdef CONFIG_SYS_FEC0_IOBASE { diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 028fca96639..11dbf5375b1 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -10,8 +10,6 @@ #include <stdio_dev.h> #include <net.h> -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_NETCONSOLE_BUFFER_SIZE #define CONFIG_NETCONSOLE_BUFFER_SIZE 512 #endif diff --git a/drivers/net/phy/micrel_ksz8xxx.c b/drivers/net/phy/micrel_ksz8xxx.c index ec628bb27ad..62a44311750 100644 --- a/drivers/net/phy/micrel_ksz8xxx.c +++ b/drivers/net/phy/micrel_ksz8xxx.c @@ -15,8 +15,6 @@ #include <micrel.h> #include <phy.h> -DECLARE_GLOBAL_DATA_PTR; - static struct phy_driver KSZ804_driver = { .name = "Micrel KSZ804", .uid = 0x221510, diff --git a/drivers/net/phy/micrel_ksz90x1.c b/drivers/net/phy/micrel_ksz90x1.c index b350a61aa64..eb83cebbac0 100644 --- a/drivers/net/phy/micrel_ksz90x1.c +++ b/drivers/net/phy/micrel_ksz90x1.c @@ -17,8 +17,6 @@ #include <micrel.h> #include <phy.h> -DECLARE_GLOBAL_DATA_PTR; - /* * KSZ9021 - KSZ9031 common */ diff --git a/drivers/pch/pch-uclass.c b/drivers/pch/pch-uclass.c index af794eb5a12..0d3ce7f77c3 100644 --- a/drivers/pch/pch-uclass.c +++ b/drivers/pch/pch-uclass.c @@ -9,8 +9,6 @@ #include <dm.h> #include <pch.h> -DECLARE_GLOBAL_DATA_PTR; - int pch_get_spi_base(struct udevice *dev, ulong *sbasep) { struct pch_ops *ops = pch_get_ops(dev); diff --git a/drivers/pci/pci-aardvark.c b/drivers/pci/pci-aardvark.c index 69a4d81c2e5..864ac16f572 100644 --- a/drivers/pci/pci-aardvark.c +++ b/drivers/pci/pci-aardvark.c @@ -131,8 +131,6 @@ #define CFG_RD_UR_VAL 0xFFFFFFFF #define CFG_RD_CRS_VAL 0xFFFF0001 -DECLARE_GLOBAL_DATA_PTR; - /** * struct pcie_advk - Advk PCIe controller state * diff --git a/drivers/pci/pci-emul-uclass.c b/drivers/pci/pci-emul-uclass.c index dcea1924182..f89acd41dcb 100644 --- a/drivers/pci/pci-emul-uclass.c +++ b/drivers/pci/pci-emul-uclass.c @@ -12,8 +12,6 @@ #include <pci.h> #include <dm/lists.h> -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_pci_priv { int dev_count; }; diff --git a/drivers/pci/pci_sandbox.c b/drivers/pci/pci_sandbox.c index 6a84ee386d7..cd7ed0069ac 100644 --- a/drivers/pci/pci_sandbox.c +++ b/drivers/pci/pci_sandbox.c @@ -11,8 +11,6 @@ #include <inttypes.h> #include <pci.h> -DECLARE_GLOBAL_DATA_PTR; - static int sandbox_pci_write_config(struct udevice *bus, pci_dev_t devfn, uint offset, ulong value, enum pci_size_t size) diff --git a/drivers/pci/pci_tegra.c b/drivers/pci/pci_tegra.c index b5bd25ec563..2829b963b0e 100644 --- a/drivers/pci/pci_tegra.c +++ b/drivers/pci/pci_tegra.c @@ -43,8 +43,6 @@ * use the new standard APIs, with no ifdefs. */ -DECLARE_GLOBAL_DATA_PTR; - #define AFI_AXI_BAR0_SZ 0x00 #define AFI_AXI_BAR1_SZ 0x04 #define AFI_AXI_BAR2_SZ 0x08 diff --git a/drivers/phy/meson-gxl-usb2.c b/drivers/phy/meson-gxl-usb2.c index 15c9c89fd9e..de5a6ee82ab 100644 --- a/drivers/phy/meson-gxl-usb2.c +++ b/drivers/phy/meson-gxl-usb2.c @@ -21,8 +21,6 @@ #include <linux/bitops.h> #include <linux/compat.h> -DECLARE_GLOBAL_DATA_PTR; - /* bits [31:27] are read-only */ #define U2P_R0 0x0 #define U2P_R0_BYPASS_SEL BIT(0) diff --git a/drivers/phy/meson-gxl-usb3.c b/drivers/phy/meson-gxl-usb3.c index a385fbdf126..a85d747eed5 100644 --- a/drivers/phy/meson-gxl-usb3.c +++ b/drivers/phy/meson-gxl-usb3.c @@ -21,8 +21,6 @@ #include <linux/compat.h> #include <linux/bitfield.h> -DECLARE_GLOBAL_DATA_PTR; - #define USB_R0 0x00 #define USB_R0_P30_FSEL_MASK GENMASK(5, 0) #define USB_R0_P30_PHY_RESET BIT(6) diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c index 68e518fc790..bdca4c0238a 100644 --- a/drivers/phy/phy-uclass.c +++ b/drivers/phy/phy-uclass.c @@ -9,8 +9,6 @@ #include <dm.h> #include <generic-phy.h> -DECLARE_GLOBAL_DATA_PTR; - static inline struct phy_ops *phy_dev_ops(struct udevice *dev) { return (struct phy_ops *)dev->driver->ops; diff --git a/drivers/phy/sandbox-phy.c b/drivers/phy/sandbox-phy.c index 867c6fe7043..3ed6837e64a 100644 --- a/drivers/phy/sandbox-phy.c +++ b/drivers/phy/sandbox-phy.c @@ -9,8 +9,6 @@ #include <dm.h> #include <generic-phy.h> -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_phy_priv { bool initialized; bool on; diff --git a/drivers/pinctrl/aspeed/pinctrl_ast2500.c b/drivers/pinctrl/aspeed/pinctrl_ast2500.c index 01f97c1b48d..877f24b63fd 100644 --- a/drivers/pinctrl/aspeed/pinctrl_ast2500.c +++ b/drivers/pinctrl/aspeed/pinctrl_ast2500.c @@ -12,8 +12,6 @@ #include <asm/arch/scu_ast2500.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - /* * This driver works with very simple configuration that has the same name * for group and function. This way it is compatible with the Linux Kernel diff --git a/drivers/pinctrl/exynos/pinctrl-exynos7420.c b/drivers/pinctrl/exynos/pinctrl-exynos7420.c index 8ae5ce776a4..bcbe1a0529e 100644 --- a/drivers/pinctrl/exynos/pinctrl-exynos7420.c +++ b/drivers/pinctrl/exynos/pinctrl-exynos7420.c @@ -16,8 +16,6 @@ #include <asm/arch/pinmux.h> #include "pinctrl-exynos.h" -DECLARE_GLOBAL_DATA_PTR; - #define GPD1_OFFSET 0xc0 static struct exynos_pinctrl_config_data serial2_conf[] = { diff --git a/drivers/pinctrl/renesas/pfc.c b/drivers/pinctrl/renesas/pfc.c index 6194e6522e7..7d2e3261488 100644 --- a/drivers/pinctrl/renesas/pfc.c +++ b/drivers/pinctrl/renesas/pfc.c @@ -21,8 +21,6 @@ #include "sh_pfc.h" -DECLARE_GLOBAL_DATA_PTR; - enum sh_pfc_model { SH_PFC_R8A7790 = 0, SH_PFC_R8A7791, diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3036.c b/drivers/pinctrl/rockchip/pinctrl_rk3036.c index 7e93d85dbb9..e66ee9902ad 100644 --- a/drivers/pinctrl/rockchip/pinctrl_rk3036.c +++ b/drivers/pinctrl/rockchip/pinctrl_rk3036.c @@ -16,8 +16,6 @@ #include <asm/arch/periph.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - /* GRF_GPIO0A_IOMUX */ enum { GPIO0A3_SHIFT = 6, diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3328.c b/drivers/pinctrl/rockchip/pinctrl_rk3328.c index fa2356a7a1a..0a478a8a99a 100644 --- a/drivers/pinctrl/rockchip/pinctrl_rk3328.c +++ b/drivers/pinctrl/rockchip/pinctrl_rk3328.c @@ -15,8 +15,6 @@ #include <asm/io.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - enum { /* GPIO0A_IOMUX */ GPIO0A5_SEL_SHIFT = 10, diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3368.c b/drivers/pinctrl/rockchip/pinctrl_rk3368.c index 25249e377a6..a03827af2c4 100644 --- a/drivers/pinctrl/rockchip/pinctrl_rk3368.c +++ b/drivers/pinctrl/rockchip/pinctrl_rk3368.c @@ -17,8 +17,6 @@ #include <asm/arch/periph.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - /* PMUGRF_GPIO0B_IOMUX */ enum { GPIO0B5_SHIFT = 10, diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3399.c b/drivers/pinctrl/rockchip/pinctrl_rk3399.c index c7052257aa4..929035e6757 100644 --- a/drivers/pinctrl/rockchip/pinctrl_rk3399.c +++ b/drivers/pinctrl/rockchip/pinctrl_rk3399.c @@ -15,8 +15,6 @@ #include <asm/arch/clock.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - struct rk3399_pinctrl_priv { struct rk3399_grf_regs *grf; struct rk3399_pmugrf_regs *pmugrf; diff --git a/drivers/pinctrl/rockchip/pinctrl_rv1108.c b/drivers/pinctrl/rockchip/pinctrl_rv1108.c index 035f01a61cf..4c81bec15b8 100644 --- a/drivers/pinctrl/rockchip/pinctrl_rv1108.c +++ b/drivers/pinctrl/rockchip/pinctrl_rv1108.c @@ -14,8 +14,6 @@ #include <asm/arch/periph.h> #include <dm/pinctrl.h> -DECLARE_GLOBAL_DATA_PTR; - struct rv1108_pinctrl_priv { struct rv1108_grf *grf; }; diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c index 1847a492a37..36a374a1b63 100644 --- a/drivers/power/domain/power-domain-uclass.c +++ b/drivers/power/domain/power-domain-uclass.c @@ -9,8 +9,6 @@ #include <power-domain.h> #include <power-domain-uclass.h> -DECLARE_GLOBAL_DATA_PTR; - static inline struct power_domain_ops *power_domain_dev_ops(struct udevice *dev) { return (struct power_domain_ops *)dev->driver->ops; diff --git a/drivers/power/pmic/act8846.c b/drivers/power/pmic/act8846.c index 7d107f4427e..c233ac08b15 100644 --- a/drivers/power/pmic/act8846.c +++ b/drivers/power/pmic/act8846.c @@ -13,8 +13,6 @@ #include <power/act8846_pmic.h> #include <power/pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "REG", .driver = "act8846_reg"}, { }, diff --git a/drivers/power/pmic/i2c_pmic_emul.c b/drivers/power/pmic/i2c_pmic_emul.c index 38a2a04f177..c58ebb8825e 100644 --- a/drivers/power/pmic/i2c_pmic_emul.c +++ b/drivers/power/pmic/i2c_pmic_emul.c @@ -12,8 +12,6 @@ #include <power/pmic.h> #include <power/sandbox_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - /** * struct sandbox_i2c_pmic_plat_data - platform data for the PMIC * diff --git a/drivers/power/pmic/lp873x.c b/drivers/power/pmic/lp873x.c index 95c2b7e8c74..ec7b9bf29fd 100644 --- a/drivers/power/pmic/lp873x.c +++ b/drivers/power/pmic/lp873x.c @@ -15,8 +15,6 @@ #include <power/lp873x.h> #include <dm/device.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "ldo", .driver = LP873X_LDO_DRIVER }, { .prefix = "buck", .driver = LP873X_BUCK_DRIVER }, diff --git a/drivers/power/pmic/lp87565.c b/drivers/power/pmic/lp87565.c index 506769e3626..7c02f38ed86 100644 --- a/drivers/power/pmic/lp87565.c +++ b/drivers/power/pmic/lp87565.c @@ -15,8 +15,6 @@ #include <power/lp87565.h> #include <dm/device.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "buck", .driver = LP87565_BUCK_DRIVER }, { }, diff --git a/drivers/power/pmic/max77686.c b/drivers/power/pmic/max77686.c index b3ed84992ff..f4e0f7034d9 100644 --- a/drivers/power/pmic/max77686.c +++ b/drivers/power/pmic/max77686.c @@ -14,8 +14,6 @@ #include <power/regulator.h> #include <power/max77686_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "LDO", .driver = MAX77686_LDO_DRIVER }, { .prefix = "BUCK", .driver = MAX77686_BUCK_DRIVER }, diff --git a/drivers/power/pmic/max8997.c b/drivers/power/pmic/max8997.c index 5ebeb8a316b..66c1c15a2d3 100644 --- a/drivers/power/pmic/max8997.c +++ b/drivers/power/pmic/max8997.c @@ -12,8 +12,6 @@ #include <power/max8997_pmic.h> #include <errno.h> -DECLARE_GLOBAL_DATA_PTR; - static int max8997_reg_count(struct udevice *dev) { return PMIC_NUM_OF_REGS; diff --git a/drivers/power/pmic/max8998.c b/drivers/power/pmic/max8998.c index a7e04699e8b..8dd7e4886a6 100644 --- a/drivers/power/pmic/max8998.c +++ b/drivers/power/pmic/max8998.c @@ -12,8 +12,6 @@ #include <power/pmic.h> #include <power/max8998_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static int max8998_reg_count(struct udevice *dev) { return PMIC_NUM_OF_REGS; diff --git a/drivers/power/pmic/palmas.c b/drivers/power/pmic/palmas.c index 1e1ecb382e3..7e3b25d2c7f 100644 --- a/drivers/power/pmic/palmas.c +++ b/drivers/power/pmic/palmas.c @@ -15,8 +15,6 @@ #include <power/palmas.h> #include <dm/device.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "ldo", .driver = PALMAS_LDO_DRIVER }, { .prefix = "smps", .driver = PALMAS_SMPS_DRIVER }, diff --git a/drivers/power/pmic/pfuze100.c b/drivers/power/pmic/pfuze100.c index a06cbc07d49..32b8f71c3e4 100644 --- a/drivers/power/pmic/pfuze100.c +++ b/drivers/power/pmic/pfuze100.c @@ -14,8 +14,6 @@ #include <power/regulator.h> #include <power/pfuze100_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { /* sw[x], swbst */ { .prefix = "s", .driver = PFUZE100_REGULATOR_DRIVER }, diff --git a/drivers/power/pmic/pm8916.c b/drivers/power/pmic/pm8916.c index a048bbe7ce1..cd7c9061481 100644 --- a/drivers/power/pmic/pm8916.c +++ b/drivers/power/pmic/pm8916.c @@ -10,8 +10,6 @@ #include <power/pmic.h> #include <spmi/spmi.h> -DECLARE_GLOBAL_DATA_PTR; - #define PID_SHIFT 8 #define PID_MASK (0xFF << PID_SHIFT) #define REG_MASK 0xFF diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c index 9347b406889..5e8f6d61904 100644 --- a/drivers/power/pmic/pmic-uclass.c +++ b/drivers/power/pmic/pmic-uclass.c @@ -16,8 +16,6 @@ #include <power/pmic.h> #include <linux/ctype.h> -DECLARE_GLOBAL_DATA_PTR; - #if CONFIG_IS_ENABLED(PMIC_CHILDREN) int pmic_bind_children(struct udevice *pmic, ofnode parent, const struct pmic_child_info *child_info) diff --git a/drivers/power/pmic/pmic_tps65910_dm.c b/drivers/power/pmic/pmic_tps65910_dm.c index c65f38f107f..b0d0c5e9446 100644 --- a/drivers/power/pmic/pmic_tps65910_dm.c +++ b/drivers/power/pmic/pmic_tps65910_dm.c @@ -11,8 +11,6 @@ #include <power/regulator.h> #include <power/tps65910_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "ldo_", .driver = TPS65910_LDO_DRIVER }, { .prefix = "buck_", .driver = TPS65910_BUCK_DRIVER }, diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c index 735046dc43d..c83c8cf7bb3 100644 --- a/drivers/power/pmic/rk8xx.c +++ b/drivers/power/pmic/rk8xx.c @@ -11,8 +11,6 @@ #include <power/rk8xx_pmic.h> #include <power/pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "DCDC_REG", .driver = "rk8xx_buck"}, { .prefix = "LDO_REG", .driver = "rk8xx_ldo"}, diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c index 3f9525b67d6..13b3f908a49 100644 --- a/drivers/power/pmic/s2mps11.c +++ b/drivers/power/pmic/s2mps11.c @@ -13,8 +13,6 @@ #include <power/pmic.h> #include <power/s2mps11.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = S2MPS11_OF_LDO_PREFIX, .driver = S2MPS11_LDO_DRIVER }, { .prefix = S2MPS11_OF_BUCK_PREFIX, .driver = S2MPS11_BUCK_DRIVER }, diff --git a/drivers/power/pmic/s5m8767.c b/drivers/power/pmic/s5m8767.c index 3812e240ab0..e3bf3a638fb 100644 --- a/drivers/power/pmic/s5m8767.c +++ b/drivers/power/pmic/s5m8767.c @@ -13,8 +13,6 @@ #include <power/regulator.h> #include <power/s5m8767.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "LDO", .driver = S5M8767_LDO_DRIVER }, { .prefix = "BUCK", .driver = S5M8767_BUCK_DRIVER }, diff --git a/drivers/power/pmic/sandbox.c b/drivers/power/pmic/sandbox.c index e8d6faca160..80209d3d918 100644 --- a/drivers/power/pmic/sandbox.c +++ b/drivers/power/pmic/sandbox.c @@ -14,8 +14,6 @@ #include <power/regulator.h> #include <power/sandbox_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = SANDBOX_OF_LDO_PREFIX, .driver = SANDBOX_LDO_DRIVER }, { .prefix = SANDBOX_OF_BUCK_PREFIX, .driver = SANDBOX_BUCK_DRIVER }, diff --git a/drivers/power/pmic/tps65090.c b/drivers/power/pmic/tps65090.c index ee5358bcedc..1b0fd991fad 100644 --- a/drivers/power/pmic/tps65090.c +++ b/drivers/power/pmic/tps65090.c @@ -13,8 +13,6 @@ #include <power/pmic.h> #include <power/tps65090.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct pmic_child_info pmic_children_info[] = { { .prefix = "fet", .driver = TPS65090_FET_DRIVER }, { }, diff --git a/drivers/power/regulator/fixed.c b/drivers/power/regulator/fixed.c index 97b4a98bf0b..eec1914c1da 100644 --- a/drivers/power/regulator/fixed.c +++ b/drivers/power/regulator/fixed.c @@ -14,8 +14,6 @@ #include <power/pmic.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - struct fixed_regulator_platdata { struct gpio_desc gpio; /* GPIO for regulator enable control */ unsigned int startup_delay_us; diff --git a/drivers/power/regulator/lp873x_regulator.c b/drivers/power/regulator/lp873x_regulator.c index 11371a7b8ba..ba2dbd71d18 100644 --- a/drivers/power/regulator/lp873x_regulator.c +++ b/drivers/power/regulator/lp873x_regulator.c @@ -16,8 +16,6 @@ #include <power/regulator.h> #include <power/lp873x.h> -DECLARE_GLOBAL_DATA_PTR; - static const char lp873x_buck_ctrl[LP873X_BUCK_NUM] = {0x2, 0x4}; static const char lp873x_buck_volt[LP873X_BUCK_NUM] = {0x6, 0x7}; static const char lp873x_ldo_ctrl[LP873X_LDO_NUM] = {0x8, 0x9}; diff --git a/drivers/power/regulator/lp87565_regulator.c b/drivers/power/regulator/lp87565_regulator.c index d908f6d1fb2..94f09f5994e 100644 --- a/drivers/power/regulator/lp87565_regulator.c +++ b/drivers/power/regulator/lp87565_regulator.c @@ -16,8 +16,6 @@ #include <power/regulator.h> #include <power/lp87565.h> -DECLARE_GLOBAL_DATA_PTR; - static const char lp87565_buck_ctrl1[LP87565_BUCK_NUM] = {0x2, 0x4, 0x6, 0x8, 0x2, 0x6}; static const char lp87565_buck_vout[LP87565_BUCK_NUM] = {0xA, 0xC, 0xE, 0x10, 0xA, 0xE }; diff --git a/drivers/power/regulator/max77686.c b/drivers/power/regulator/max77686.c index 2212d36ed6a..6e4ac02036e 100644 --- a/drivers/power/regulator/max77686.c +++ b/drivers/power/regulator/max77686.c @@ -16,8 +16,6 @@ #include <power/regulator.h> #include <power/max77686_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - #define MODE(_id, _val, _name) { \ .id = _id, \ .register_value = _val, \ diff --git a/drivers/power/regulator/palmas_regulator.c b/drivers/power/regulator/palmas_regulator.c index 24a79772363..45c006c5b7d 100644 --- a/drivers/power/regulator/palmas_regulator.c +++ b/drivers/power/regulator/palmas_regulator.c @@ -16,8 +16,6 @@ #include <power/regulator.h> #include <power/palmas.h> -DECLARE_GLOBAL_DATA_PTR; - #define REGULATOR_ON 0x1 #define REGULATOR_OFF 0x0 diff --git a/drivers/power/regulator/pbias_regulator.c b/drivers/power/regulator/pbias_regulator.c index adf589b2249..1e042ad7124 100644 --- a/drivers/power/regulator/pbias_regulator.c +++ b/drivers/power/regulator/pbias_regulator.c @@ -16,8 +16,6 @@ #include <linux/ioport.h> #include <dm/read.h> -DECLARE_GLOBAL_DATA_PTR; - struct pbias_reg_info { u32 enable; u32 enable_mask; diff --git a/drivers/power/regulator/regulator-uclass.c b/drivers/power/regulator/regulator-uclass.c index 426a933d66d..b9e2d20e329 100644 --- a/drivers/power/regulator/regulator-uclass.c +++ b/drivers/power/regulator/regulator-uclass.c @@ -12,8 +12,6 @@ #include <power/pmic.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - int regulator_mode(struct udevice *dev, struct dm_regulator_mode **modep) { struct dm_regulator_uclass_platdata *uc_pdata; diff --git a/drivers/power/regulator/s2mps11_regulator.c b/drivers/power/regulator/s2mps11_regulator.c index 3af20e60dd0..477f0f6225c 100644 --- a/drivers/power/regulator/s2mps11_regulator.c +++ b/drivers/power/regulator/s2mps11_regulator.c @@ -14,8 +14,6 @@ #include <power/regulator.h> #include <power/s2mps11.h> -DECLARE_GLOBAL_DATA_PTR; - #define MODE(_id, _val, _name) { \ .id = _id, \ .register_value = _val, \ diff --git a/drivers/power/regulator/s5m8767.c b/drivers/power/regulator/s5m8767.c index 871da122b44..89ad587610b 100644 --- a/drivers/power/regulator/s5m8767.c +++ b/drivers/power/regulator/s5m8767.c @@ -13,8 +13,6 @@ #include <power/regulator.h> #include <power/s5m8767.h> -DECLARE_GLOBAL_DATA_PTR; - static const struct sec_voltage_desc buck_v1 = { .max = 2225000, .min = 650000, diff --git a/drivers/power/regulator/sandbox.c b/drivers/power/regulator/sandbox.c index f980a17389e..ab30c50fcc5 100644 --- a/drivers/power/regulator/sandbox.c +++ b/drivers/power/regulator/sandbox.c @@ -14,8 +14,6 @@ #include <power/regulator.h> #include <power/sandbox_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - #define MODE(_id, _val, _name) [_id] = { \ .id = _id, \ .register_value = _val, \ diff --git a/drivers/pwm/exynos_pwm.c b/drivers/pwm/exynos_pwm.c index 9520a14387d..127575263ae 100644 --- a/drivers/pwm/exynos_pwm.c +++ b/drivers/pwm/exynos_pwm.c @@ -12,8 +12,6 @@ #include <asm/arch/clock.h> #include <asm/arch/pwm.h> -DECLARE_GLOBAL_DATA_PTR; - struct exynos_pwm_priv { struct s5p_timer *regs; }; diff --git a/drivers/pwm/rk_pwm.c b/drivers/pwm/rk_pwm.c index 7d3e11d6674..4c1ee6739e6 100644 --- a/drivers/pwm/rk_pwm.c +++ b/drivers/pwm/rk_pwm.c @@ -16,8 +16,6 @@ #include <asm/arch/pwm.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - struct rk_pwm_priv { struct rk3288_pwm *regs; ulong freq; diff --git a/drivers/pwm/sandbox_pwm.c b/drivers/pwm/sandbox_pwm.c index fcb10845515..48f169842b3 100644 --- a/drivers/pwm/sandbox_pwm.c +++ b/drivers/pwm/sandbox_pwm.c @@ -11,8 +11,6 @@ #include <pwm.h> #include <asm/test.h> -DECLARE_GLOBAL_DATA_PTR; - enum { NUM_CHANNELS = 3, }; diff --git a/drivers/pwm/tegra_pwm.c b/drivers/pwm/tegra_pwm.c index b8acc1583f9..2119e1d5689 100644 --- a/drivers/pwm/tegra_pwm.c +++ b/drivers/pwm/tegra_pwm.c @@ -11,8 +11,6 @@ #include <asm/arch/clock.h> #include <asm/arch/pwm.h> -DECLARE_GLOBAL_DATA_PTR; - struct tegra_pwm_priv { struct pwm_ctlr *regs; }; diff --git a/drivers/ram/rockchip/dmc-rk3368.c b/drivers/ram/rockchip/dmc-rk3368.c index bfcb1ddefe3..6cd2f16cf27 100644 --- a/drivers/ram/rockchip/dmc-rk3368.c +++ b/drivers/ram/rockchip/dmc-rk3368.c @@ -20,8 +20,6 @@ #include <asm/arch/sdram.h> #include <asm/arch/sdram_common.h> -DECLARE_GLOBAL_DATA_PTR; - struct dram_info { struct ram_info info; struct clk ddr_clk; diff --git a/drivers/ram/rockchip/sdram_rk3128.c b/drivers/ram/rockchip/sdram_rk3128.c index a33127f4b05..eec1ebaabe7 100644 --- a/drivers/ram/rockchip/sdram_rk3128.c +++ b/drivers/ram/rockchip/sdram_rk3128.c @@ -12,7 +12,6 @@ #include <asm/arch/grf_rk3128.h> #include <asm/arch/sdram_common.h> -DECLARE_GLOBAL_DATA_PTR; struct dram_info { struct ram_info info; struct rk3128_grf *grf; diff --git a/drivers/ram/rockchip/sdram_rk3188.c b/drivers/ram/rockchip/sdram_rk3188.c index 365d00ef542..0bc05ba9dce 100644 --- a/drivers/ram/rockchip/sdram_rk3188.c +++ b/drivers/ram/rockchip/sdram_rk3188.c @@ -25,8 +25,6 @@ #include <asm/arch/sdram_common.h> #include <linux/err.h> -DECLARE_GLOBAL_DATA_PTR; - struct chan_info { struct rk3288_ddr_pctl *pctl; struct rk3288_ddr_publ *publ; diff --git a/drivers/ram/rockchip/sdram_rk3288.c b/drivers/ram/rockchip/sdram_rk3288.c index 95efb117fc1..d99bf124762 100644 --- a/drivers/ram/rockchip/sdram_rk3288.c +++ b/drivers/ram/rockchip/sdram_rk3288.c @@ -27,8 +27,6 @@ #include <power/regulator.h> #include <power/rk8xx_pmic.h> -DECLARE_GLOBAL_DATA_PTR; - struct chan_info { struct rk3288_ddr_pctl *pctl; struct rk3288_ddr_publ *publ; diff --git a/drivers/ram/rockchip/sdram_rk3328.c b/drivers/ram/rockchip/sdram_rk3328.c index 9637a35e231..292903ae1f7 100644 --- a/drivers/ram/rockchip/sdram_rk3328.c +++ b/drivers/ram/rockchip/sdram_rk3328.c @@ -12,7 +12,6 @@ #include <asm/arch/grf_rk3328.h> #include <asm/arch/sdram_common.h> -DECLARE_GLOBAL_DATA_PTR; struct dram_info { struct ram_info info; struct rk3328_grf_regs *grf; diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c index 5cb470c209f..65191c69b86 100644 --- a/drivers/ram/rockchip/sdram_rk3399.c +++ b/drivers/ram/rockchip/sdram_rk3399.c @@ -23,7 +23,6 @@ #include <linux/err.h> #include <time.h> -DECLARE_GLOBAL_DATA_PTR; struct chan_info { struct rk3399_ddr_pctl_regs *pctl; struct rk3399_ddr_pi_regs *pi; diff --git a/drivers/ram/stm32_sdram.c b/drivers/ram/stm32_sdram.c index ec2edd67dd1..62282c61386 100644 --- a/drivers/ram/stm32_sdram.c +++ b/drivers/ram/stm32_sdram.c @@ -14,8 +14,6 @@ #define MEM_MODE_MASK GENMASK(2, 0) #define NOT_FOUND 0xff -DECLARE_GLOBAL_DATA_PTR; - struct stm32_fmc_regs { /* 0x0 */ u32 bcr1; /* NOR/PSRAM Chip select control register 1 */ diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c b/drivers/ram/stm32mp1/stm32mp1_ram.c index 9599444650a..4dc84d0e291 100644 --- a/drivers/ram/stm32mp1/stm32mp1_ram.c +++ b/drivers/ram/stm32mp1/stm32mp1_ram.c @@ -13,8 +13,6 @@ #include <asm/io.h> #include "stm32mp1_ddr.h" -DECLARE_GLOBAL_DATA_PTR; - static const char *const clkname[] = { "ddrc1", "ddrc2", diff --git a/drivers/reset/ast2500-reset.c b/drivers/reset/ast2500-reset.c index b2c89e1f1e2..36d32469add 100644 --- a/drivers/reset/ast2500-reset.c +++ b/drivers/reset/ast2500-reset.c @@ -14,8 +14,6 @@ #include <asm/arch/scu_ast2500.h> #include <asm/arch/wdt.h> -DECLARE_GLOBAL_DATA_PTR; - struct ast2500_reset_priv { /* WDT used to perform resets. */ struct udevice *wdt; diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c index fa4f6538edd..05879c6ada6 100644 --- a/drivers/reset/reset-uclass.c +++ b/drivers/reset/reset-uclass.c @@ -10,8 +10,6 @@ #include <reset.h> #include <reset-uclass.h> -DECLARE_GLOBAL_DATA_PTR; - static inline struct reset_ops *reset_dev_ops(struct udevice *dev) { return (struct reset_ops *)dev->driver->ops; diff --git a/drivers/rtc/i2c_rtc_emul.c b/drivers/rtc/i2c_rtc_emul.c index 0e06c97367a..2e69a5b9572 100644 --- a/drivers/rtc/i2c_rtc_emul.c +++ b/drivers/rtc/i2c_rtc_emul.c @@ -28,8 +28,6 @@ #define debug_buffer(x, ...) #endif -DECLARE_GLOBAL_DATA_PTR; - /** * struct sandbox_i2c_rtc_plat_data - platform data for the RTC * diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 3d5b2bf15f0..4be8868536d 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -454,6 +454,13 @@ config BCM6345_SERIAL help Select this to enable UART on BCM6345 SoCs. +config FSL_LINFLEXUART + bool "Freescale Linflex UART support" + depends on DM_SERIAL + help + Select this to enable the Linflex serial module found on some + NXP SoCs like S32V234. + config FSL_LPUART bool "Freescale LPUART support" help diff --git a/drivers/serial/altera_jtag_uart.c b/drivers/serial/altera_jtag_uart.c index 4a6e60f87ef..b18300e6160 100644 --- a/drivers/serial/altera_jtag_uart.c +++ b/drivers/serial/altera_jtag_uart.c @@ -11,8 +11,6 @@ #include <serial.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - /* data register */ #define ALTERA_JTAG_RVALID BIT(15) /* Read valid */ diff --git a/drivers/serial/lpc32xx_hsuart.c b/drivers/serial/lpc32xx_hsuart.c index b42537529de..1d3e928bb1e 100644 --- a/drivers/serial/lpc32xx_hsuart.c +++ b/drivers/serial/lpc32xx_hsuart.c @@ -12,8 +12,6 @@ #include <asm/arch/uart.h> #include <linux/compiler.h> -DECLARE_GLOBAL_DATA_PTR; - struct lpc32xx_hsuart_priv { struct hsuart_regs *hsuart; }; diff --git a/drivers/serial/serial_linflexuart.c b/drivers/serial/serial_linflexuart.c index fbb39592d6c..b706fdb398e 100644 --- a/drivers/serial/serial_linflexuart.c +++ b/drivers/serial/serial_linflexuart.c @@ -35,10 +35,6 @@ DECLARE_GLOBAL_DATA_PTR; -#ifndef CONFIG_DM_SERIAL -#error "The linflex serial driver does not have non-DM support." -#endif - static void _linflex_serial_setbrg(struct linflex_fsl *base, int baudrate) { u32 clk = mxc_get_clock(MXC_UART_CLK); diff --git a/drivers/serial/serial_meson.c b/drivers/serial/serial_meson.c index 6412ca64963..a363cd9a1f4 100644 --- a/drivers/serial/serial_meson.c +++ b/drivers/serial/serial_meson.c @@ -11,8 +11,6 @@ #include <linux/compiler.h> #include <serial.h> -DECLARE_GLOBAL_DATA_PTR; - struct meson_uart { u32 wfifo; u32 rfifo; diff --git a/drivers/serial/serial_stm32.c b/drivers/serial/serial_stm32.c index 286b954fdd7..216a803a6ee 100644 --- a/drivers/serial/serial_stm32.c +++ b/drivers/serial/serial_stm32.c @@ -13,8 +13,6 @@ #include <asm/arch/stm32.h> #include "serial_stm32.h" -DECLARE_GLOBAL_DATA_PTR; - static int stm32_serial_setbrg(struct udevice *dev, int baudrate) { struct stm32x7_serial_platdata *plat = dev_get_platdata(dev); @@ -45,10 +43,19 @@ static int stm32_serial_getc(struct udevice *dev) struct stm32x7_serial_platdata *plat = dev_get_platdata(dev); bool stm32f4 = plat->uart_info->stm32f4; fdt_addr_t base = plat->base; + u32 isr = readl(base + ISR_OFFSET(stm32f4)); - if ((readl(base + ISR_OFFSET(stm32f4)) & USART_SR_FLAG_RXNE) == 0) + if ((isr & USART_ISR_FLAG_RXNE) == 0) return -EAGAIN; + if (isr & USART_ISR_FLAG_ORE) { + if (!stm32f4) + setbits_le32(base + ICR_OFFSET, USART_ICR_OREF); + else + readl(base + RDR_OFFSET(stm32f4)); + return -EIO; + } + return readl(base + RDR_OFFSET(stm32f4)); } @@ -58,7 +65,7 @@ static int stm32_serial_putc(struct udevice *dev, const char c) bool stm32f4 = plat->uart_info->stm32f4; fdt_addr_t base = plat->base; - if ((readl(base + ISR_OFFSET(stm32f4)) & USART_SR_FLAG_TXE) == 0) + if ((readl(base + ISR_OFFSET(stm32f4)) & USART_ISR_FLAG_TXE) == 0) return -EAGAIN; writel(c, base + TDR_OFFSET(stm32f4)); @@ -74,10 +81,10 @@ static int stm32_serial_pending(struct udevice *dev, bool input) if (input) return readl(base + ISR_OFFSET(stm32f4)) & - USART_SR_FLAG_RXNE ? 1 : 0; + USART_ISR_FLAG_RXNE ? 1 : 0; else return readl(base + ISR_OFFSET(stm32f4)) & - USART_SR_FLAG_TXE ? 0 : 1; + USART_ISR_FLAG_TXE ? 0 : 1; } static int stm32_serial_probe(struct udevice *dev) @@ -109,11 +116,9 @@ static int stm32_serial_probe(struct udevice *dev) return plat->clock_rate; }; - /* Disable uart-> disable overrun-> enable uart */ + /* Disable uart-> enable fifo-> enable uart */ clrbits_le32(base + CR1_OFFSET(stm32f4), USART_CR1_RE | USART_CR1_TE | BIT(uart_enable_bit)); - if (plat->uart_info->has_overrun_disable) - setbits_le32(base + CR3_OFFSET(stm32f4), USART_CR3_OVRDIS); if (plat->uart_info->has_fifo) setbits_le32(base + CR1_OFFSET(stm32f4), USART_CR1_FIFOEN); setbits_le32(base + CR1_OFFSET(stm32f4), USART_CR1_RE | USART_CR1_TE | diff --git a/drivers/serial/serial_stm32.h b/drivers/serial/serial_stm32.h index d08ba1f55fc..6ebec0acac4 100644 --- a/drivers/serial/serial_stm32.h +++ b/drivers/serial/serial_stm32.h @@ -12,6 +12,8 @@ #define CR3_OFFSET(x) (x ? 0x14 : 0x08) #define BRR_OFFSET(x) (x ? 0x08 : 0x0c) #define ISR_OFFSET(x) (x ? 0x00 : 0x1c) + +#define ICR_OFFSET 0x20 /* * STM32F4 has one Data Register (DR) for received or transmitted * data, so map Receive Data Register (RDR) and Transmit Data @@ -23,28 +25,24 @@ struct stm32_uart_info { u8 uart_enable_bit; /* UART_CR1_UE */ bool stm32f4; /* true for STM32F4, false otherwise */ - bool has_overrun_disable; bool has_fifo; }; struct stm32_uart_info stm32f4_info = { .stm32f4 = true, .uart_enable_bit = 13, - .has_overrun_disable = false, .has_fifo = false, }; struct stm32_uart_info stm32f7_info = { .uart_enable_bit = 0, .stm32f4 = false, - .has_overrun_disable = true, .has_fifo = false, }; struct stm32_uart_info stm32h7_info = { .uart_enable_bit = 0, .stm32f4 = false, - .has_overrun_disable = true, .has_fifo = true, }; @@ -62,11 +60,13 @@ struct stm32x7_serial_platdata { #define USART_CR3_OVRDIS BIT(12) -#define USART_SR_FLAG_RXNE BIT(5) -#define USART_SR_FLAG_TXE BIT(7) +#define USART_ISR_FLAG_ORE BIT(3) +#define USART_ISR_FLAG_RXNE BIT(5) +#define USART_ISR_FLAG_TXE BIT(7) #define USART_BRR_F_MASK GENMASK(7, 0) #define USART_BRR_M_SHIFT 4 #define USART_BRR_M_MASK GENMASK(15, 4) +#define USART_ICR_OREF BIT(3) #endif diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c index fedd2a9df59..ec828e6784d 100644 --- a/drivers/serial/serial_xuartlite.c +++ b/drivers/serial/serial_xuartlite.c @@ -15,8 +15,6 @@ #include <linux/compiler.h> #include <serial.h> -DECLARE_GLOBAL_DATA_PTR; - #define SR_TX_FIFO_FULL BIT(3) /* transmit FIFO full */ #define SR_TX_FIFO_EMPTY BIT(2) /* transmit FIFO empty */ #define SR_RX_FIFO_VALID_DATA BIT(0) /* data in receive FIFO */ diff --git a/drivers/serial/serial_zynq.c b/drivers/serial/serial_zynq.c index 4e86e5c2a1a..68c5c8541d3 100644 --- a/drivers/serial/serial_zynq.c +++ b/drivers/serial/serial_zynq.c @@ -17,8 +17,6 @@ #include <serial.h> #include <asm/arch/hardware.h> -DECLARE_GLOBAL_DATA_PTR; - #define ZYNQ_UART_SR_TXEMPTY (1 << 3) /* TX FIFO empty */ #define ZYNQ_UART_SR_TXACTIVE (1 << 11) /* TX active */ #define ZYNQ_UART_SR_RXEMPTY 0x00000002 /* RX FIFO empty */ diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index ec92b84ed28..6667f7321f0 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -1,4 +1,7 @@ -menu "SPI Support" +menuconfig SPI + bool "SPI Support" + +if SPI config DM_SPI bool "Enable Driver Model for SPI drivers" @@ -312,4 +315,4 @@ config OMAP3_SPI (McSPI). This driver be used to access SPI chips on platforms embedding this OMAP3 McSPI IP core. -endmenu # menu "SPI Support" +endif # menu "SPI Support" diff --git a/drivers/spi/altera_spi.c b/drivers/spi/altera_spi.c index c8dcb82150c..f729347ee24 100644 --- a/drivers/spi/altera_spi.c +++ b/drivers/spi/altera_spi.c @@ -15,8 +15,6 @@ #include <spi.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - #define ALTERA_SPI_STATUS_RRDY_MSK BIT(7) #define ALTERA_SPI_CONTROL_SSO_MSK BIT(10) diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c index 3cdfd366ab8..445d8652f90 100644 --- a/drivers/spi/atmel_spi.c +++ b/drivers/spi/atmel_spi.c @@ -24,8 +24,6 @@ #include "atmel_spi.h" -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_DM_SPI static int spi_has_wdrbt(struct atmel_spi_slave *slave) diff --git a/drivers/spi/cf_spi.c b/drivers/spi/cf_spi.c index 7be94277815..68317ed633f 100644 --- a/drivers/spi/cf_spi.c +++ b/drivers/spi/cf_spi.c @@ -288,14 +288,6 @@ int spi_cs_is_valid(unsigned int bus, unsigned int cs) return 0; } -void spi_init_f(void) -{ -} - -void spi_init_r(void) -{ -} - void spi_init(void) { cfspi_init(); diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c index 0e93b62eee1..5e2d290ddcf 100644 --- a/drivers/spi/designware_spi.c +++ b/drivers/spi/designware_spi.c @@ -425,7 +425,7 @@ static int dw_spi_xfer(struct udevice *dev, unsigned int bitlen, * in the beginning of new transfer. */ if (readl_poll_timeout(priv->regs + DW_SPI_SR, val, - !(val & SR_TF_EMPT) || (val & SR_BUSY), + (val & SR_TF_EMPT) && !(val & SR_BUSY), RX_TIMEOUT * 1000)) { ret = -ETIMEDOUT; } diff --git a/drivers/spi/fsl_dspi.c b/drivers/spi/fsl_dspi.c index 42086197d98..41d1ba2fa52 100644 --- a/drivers/spi/fsl_dspi.c +++ b/drivers/spi/fsl_dspi.c @@ -396,16 +396,6 @@ void spi_init(void) /* Nothing to do */ } -void spi_init_f(void) -{ - /* Nothing to do */ -} - -void spi_init_r(void) -{ - /* Nothing to do */ -} - int spi_cs_is_valid(unsigned int bus, unsigned int cs) { if (((cs >= 0) && (cs < 8)) && ((bus >= 0) && (bus < 8))) diff --git a/drivers/spi/rk_spi.c b/drivers/spi/rk_spi.c index 03d3fa6763d..71a665ecd41 100644 --- a/drivers/spi/rk_spi.c +++ b/drivers/spi/rk_spi.c @@ -22,8 +22,6 @@ #include <dm/pinctrl.h> #include "rk_spi.h" -DECLARE_GLOBAL_DATA_PTR; - /* Change to 1 to output registers at the start of each transaction */ #define DEBUG_RK_SPI 0 diff --git a/drivers/spi/sandbox_spi.c b/drivers/spi/sandbox_spi.c index 092b13b00bf..75ba6a1ed7e 100644 --- a/drivers/spi/sandbox_spi.c +++ b/drivers/spi/sandbox_spi.c @@ -20,8 +20,6 @@ #include <asm/state.h> #include <dm/device-internal.h> -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_SPI_IDLE_VAL # define CONFIG_SPI_IDLE_VAL 0xFF #endif diff --git a/drivers/spi/tegra114_spi.c b/drivers/spi/tegra114_spi.c index 04b4fce0612..faf609bba5c 100644 --- a/drivers/spi/tegra114_spi.c +++ b/drivers/spi/tegra114_spi.c @@ -14,8 +14,6 @@ #include <spi.h> #include "tegra_spi.h" -DECLARE_GLOBAL_DATA_PTR; - /* COMMAND1 */ #define SPI_CMD1_GO BIT(31) #define SPI_CMD1_M_S BIT(30) diff --git a/drivers/spmi/spmi-sandbox.c b/drivers/spmi/spmi-sandbox.c index 980aff2063a..a938e50d226 100644 --- a/drivers/spmi/spmi-sandbox.c +++ b/drivers/spmi/spmi-sandbox.c @@ -15,8 +15,6 @@ #include <asm/gpio.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - #define EMUL_GPIO_PID_START 0xC0 #define EMUL_GPIO_PID_END 0xC3 diff --git a/drivers/spmi/spmi-uclass.c b/drivers/spmi/spmi-uclass.c index 6edece23d82..e74cd79961a 100644 --- a/drivers/spmi/spmi-uclass.c +++ b/drivers/spmi/spmi-uclass.c @@ -12,8 +12,6 @@ #include <spmi/spmi.h> #include <linux/ctype.h> -DECLARE_GLOBAL_DATA_PTR; - int spmi_reg_read(struct udevice *dev, int usid, int pid, int reg) { const struct dm_spmi_ops *ops = dev_get_driver_ops(dev); diff --git a/drivers/sysreset/sysreset_sandbox.c b/drivers/sysreset/sysreset_sandbox.c index 12b3e5f86eb..207cc282f15 100644 --- a/drivers/sysreset/sysreset_sandbox.c +++ b/drivers/sysreset/sysreset_sandbox.c @@ -12,8 +12,6 @@ #include <asm/state.h> #include <asm/test.h> -DECLARE_GLOBAL_DATA_PTR; - static int sandbox_warm_sysreset_request(struct udevice *dev, enum sysreset_t type) { diff --git a/drivers/timer/ag101p_timer.c b/drivers/timer/ag101p_timer.c index 8dc85c4183c..f9ff5c15b41 100644 --- a/drivers/timer/ag101p_timer.c +++ b/drivers/timer/ag101p_timer.c @@ -12,8 +12,6 @@ #include <timer.h> #include <linux/io.h> -DECLARE_GLOBAL_DATA_PTR; - /* * Timer Control Register */ diff --git a/drivers/timer/altera_timer.c b/drivers/timer/altera_timer.c index 1ba85c43996..f80debb2d7f 100644 --- a/drivers/timer/altera_timer.c +++ b/drivers/timer/altera_timer.c @@ -14,8 +14,6 @@ #include <timer.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - /* control register */ #define ALTERA_TIMER_CONT BIT(1) /* Continuous mode */ #define ALTERA_TIMER_START BIT(2) /* Start timer */ diff --git a/drivers/timer/ast_timer.c b/drivers/timer/ast_timer.c index e194c50f4a7..ab1e4af79fe 100644 --- a/drivers/timer/ast_timer.c +++ b/drivers/timer/ast_timer.c @@ -11,8 +11,6 @@ #include <asm/io.h> #include <asm/arch/timer.h> -DECLARE_GLOBAL_DATA_PTR; - #define AST_TICK_TIMER 1 #define AST_TMC_RELOAD_VAL 0xffffffff diff --git a/drivers/timer/atcpit100_timer.c b/drivers/timer/atcpit100_timer.c index 963f978d206..4322921b71b 100644 --- a/drivers/timer/atcpit100_timer.c +++ b/drivers/timer/atcpit100_timer.c @@ -12,8 +12,6 @@ #include <timer.h> #include <linux/io.h> -DECLARE_GLOBAL_DATA_PTR; - #define REG32_TMR(x) (*(u32 *) ((plat->regs) + (x>>2))) /* diff --git a/drivers/timer/omap-timer.c b/drivers/timer/omap-timer.c index 4cc61055057..051c69081e8 100644 --- a/drivers/timer/omap-timer.c +++ b/drivers/timer/omap-timer.c @@ -13,8 +13,6 @@ #include <asm/io.h> #include <asm/arch/clock.h> -DECLARE_GLOBAL_DATA_PTR; - /* Timer register bits */ #define TCLR_START BIT(0) /* Start=1 */ #define TCLR_AUTO_RELOAD BIT(1) /* Auto reload */ diff --git a/drivers/timer/rockchip_timer.c b/drivers/timer/rockchip_timer.c index 07d14482d68..b847bc40c4e 100644 --- a/drivers/timer/rockchip_timer.c +++ b/drivers/timer/rockchip_timer.c @@ -152,6 +152,8 @@ static const struct timer_ops rockchip_timer_ops = { }; static const struct udevice_id rockchip_timer_ids[] = { + { .compatible = "rockchip,rk3188-timer" }, + { .compatible = "rockchip,rk3288-timer" }, { .compatible = "rockchip,rk3368-timer" }, {} }; diff --git a/drivers/tpm/tpm_tis_infineon.c b/drivers/tpm/tpm_tis_infineon.c index 41b748e7a23..f740c780525 100644 --- a/drivers/tpm/tpm_tis_infineon.c +++ b/drivers/tpm/tpm_tis_infineon.c @@ -33,8 +33,6 @@ #include "tpm_tis.h" #include "tpm_internal.h" -DECLARE_GLOBAL_DATA_PTR; - enum i2c_chip_type { SLB9635, SLB9645, diff --git a/drivers/usb/emul/sandbox_flash.c b/drivers/usb/emul/sandbox_flash.c index 2f84b360ec6..dbece6ecf29 100644 --- a/drivers/usb/emul/sandbox_flash.c +++ b/drivers/usb/emul/sandbox_flash.c @@ -11,8 +11,6 @@ #include <scsi.h> #include <usb.h> -DECLARE_GLOBAL_DATA_PTR; - /* * This driver emulates a flash stick using the UFI command specification and * the BBB (bulk/bulk/bulk) protocol. It supports only a single logical unit diff --git a/drivers/usb/emul/sandbox_hub.c b/drivers/usb/emul/sandbox_hub.c index 9a0f47b81c4..f5dda8123f2 100644 --- a/drivers/usb/emul/sandbox_hub.c +++ b/drivers/usb/emul/sandbox_hub.c @@ -10,8 +10,6 @@ #include <usb.h> #include <dm/device-internal.h> -DECLARE_GLOBAL_DATA_PTR; - /* We only support up to 8 */ #define SANDBOX_NUM_PORTS 4 diff --git a/drivers/usb/emul/sandbox_keyb.c b/drivers/usb/emul/sandbox_keyb.c index cff017668f2..2fb67e7611d 100644 --- a/drivers/usb/emul/sandbox_keyb.c +++ b/drivers/usb/emul/sandbox_keyb.c @@ -11,8 +11,6 @@ #include <scsi.h> #include <usb.h> -DECLARE_GLOBAL_DATA_PTR; - /* * This driver emulates a USB keyboard using the USB HID specification (boot * protocol) diff --git a/drivers/usb/emul/usb-emul-uclass.c b/drivers/usb/emul/usb-emul-uclass.c index fbe11f31353..01ae6dfce78 100644 --- a/drivers/usb/emul/usb-emul-uclass.c +++ b/drivers/usb/emul/usb-emul-uclass.c @@ -10,8 +10,6 @@ #include <usb.h> #include <dm/device-internal.h> -DECLARE_GLOBAL_DATA_PTR; - static int copy_to_unicode(char *buff, int length, const char *str) { int ptr; diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index d0ee7847b98..a87639def97 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -838,6 +838,9 @@ unknown: ctrl->bRequestType, ctrl->bRequest, w_value, w_index, w_length); + if (!cdev->config) + goto done; + /* * functions always handle their interfaces and endpoints... * punt other recipients (other, WUSB, ...) to the current @@ -882,7 +885,7 @@ unknown: value = f->setup(f, ctrl); else { c = cdev->config; - if (c && c->setup) + if (c->setup) value = c->setup(c, ctrl); } diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c index 4862ab0e7db..b63a630d37c 100644 --- a/drivers/usb/host/dwc2.c +++ b/drivers/usb/host/dwc2.c @@ -19,8 +19,6 @@ #include "dwc2.h" -DECLARE_GLOBAL_DATA_PTR; - /* Use only HC channel 0. */ #define DWC2_HC_CHANNEL 0 diff --git a/drivers/usb/host/dwc3-of-simple.c b/drivers/usb/host/dwc3-of-simple.c index 440dd1027d5..9b122b18bc0 100644 --- a/drivers/usb/host/dwc3-of-simple.c +++ b/drivers/usb/host/dwc3-of-simple.c @@ -17,8 +17,6 @@ #include <reset.h> #include <clk.h> -DECLARE_GLOBAL_DATA_PTR; - struct dwc3_of_simple { struct clk_bulk clks; struct reset_ctl_bulk resets; diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index f6c6b019caa..f912510a21e 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -15,8 +15,6 @@ #include "ehci.h" -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_DM_USB int ehci_hcd_init(int index, enum usb_init_type init, diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index f317cf00ea0..f07a287dd45 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -20,8 +20,6 @@ #include "ehci.h" -DECLARE_GLOBAL_DATA_PTR; - #define USB1_ADDR_MASK 0xFFFF0000 #define HOSTPC1_DEVLC 0x84 diff --git a/drivers/usb/host/usb-sandbox.c b/drivers/usb/host/usb-sandbox.c index 15055b351a5..1a35a00bffb 100644 --- a/drivers/usb/host/usb-sandbox.c +++ b/drivers/usb/host/usb-sandbox.c @@ -10,8 +10,6 @@ #include <usb.h> #include <dm/root.h> -DECLARE_GLOBAL_DATA_PTR; - struct sandbox_usb_ctrl { int rootdev; }; diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c index 4e40f4bc3d2..fa7a4397e4d 100644 --- a/drivers/usb/host/usb-uclass.c +++ b/drivers/usb/host/usb-uclass.c @@ -16,8 +16,6 @@ #include <dm/lists.h> #include <dm/uclass-internal.h> -DECLARE_GLOBAL_DATA_PTR; - extern bool usb_started; /* flag for the started/stopped USB status */ static bool asynch_allowed; diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c index c1007350b72..912190b8bc2 100644 --- a/drivers/usb/host/xhci-dwc3.c +++ b/drivers/usb/host/xhci-dwc3.c @@ -19,8 +19,6 @@ #include <linux/usb/dwc3.h> #include <linux/usb/otg.h> -DECLARE_GLOBAL_DATA_PTR; - struct xhci_dwc3_platdata { struct phy *usb_phys; int num_phys; @@ -113,16 +111,21 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val) } #ifdef CONFIG_DM_USB -static int xhci_dwc3_setup_phy(struct udevice *dev, int count) +static int xhci_dwc3_setup_phy(struct udevice *dev) { struct xhci_dwc3_platdata *plat = dev_get_platdata(dev); - int i, ret; + int i, ret, count; - if (!count) + /* Return if no phy declared */ + if (!dev_read_prop(dev, "phys", NULL)) return 0; + count = dev_count_phandle_with_args(dev, "phys", "#phy-cells"); + if (count <= 0) + return count; + plat->usb_phys = devm_kcalloc(dev, count, sizeof(struct phy), - GFP_KERNEL); + GFP_KERNEL); if (!plat->usb_phys) return -ENOMEM; @@ -136,7 +139,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count) ++plat->num_phys; } - + for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_init(&plat->usb_phys[i]); if (ret) { @@ -145,7 +148,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count) goto phys_init_err; } } - + for (i = 0; i < plat->num_phys; i++) { ret = generic_phy_power_on(&plat->usb_phys[i]); if (ret) { @@ -157,7 +160,6 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count) return 0; - phys_poweron_err: for (; i >= 0; i--) generic_phy_power_off(&plat->usb_phys[i]); @@ -187,7 +189,7 @@ static int xhci_dwc3_shutdown_phy(struct udevice *dev) ret |= generic_phy_exit(&plat->usb_phys[i]); if (ret) { pr_err("Can't shutdown USB PHY%d for %s\n", - i, dev->name); + i, dev->name); } } @@ -206,8 +208,7 @@ static int xhci_dwc3_probe(struct udevice *dev) hcor = (struct xhci_hcor *)((uintptr_t)hccr + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase))); - ret = xhci_dwc3_setup_phy(dev, dev_count_phandle_with_args( - dev, "phys", "#phy-cells")); + ret = xhci_dwc3_setup_phy(dev); if (ret) return ret; diff --git a/drivers/usb/host/xhci-fsl.c b/drivers/usb/host/xhci-fsl.c index f77c78d4221..25b14a9a8db 100644 --- a/drivers/usb/host/xhci-fsl.c +++ b/drivers/usb/host/xhci-fsl.c @@ -20,8 +20,6 @@ #include <dm.h> /* Declare global data pointer */ -DECLARE_GLOBAL_DATA_PTR; - #ifndef CONFIG_DM_USB static struct fsl_xhci fsl_xhci; unsigned long ctr_addr[] = FSL_USB_XHCI_ADDR; diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c index dbdfce38da2..f51e6773864 100644 --- a/drivers/usb/host/xhci-mvebu.c +++ b/drivers/usb/host/xhci-mvebu.c @@ -15,8 +15,6 @@ #include "xhci.h" -DECLARE_GLOBAL_DATA_PTR; - struct mvebu_xhci_platdata { fdt_addr_t hcd_base; }; diff --git a/drivers/usb/host/xhci-omap.c b/drivers/usb/host/xhci-omap.c index b814500bdbb..d05b3028073 100644 --- a/drivers/usb/host/xhci-omap.c +++ b/drivers/usb/host/xhci-omap.c @@ -23,8 +23,6 @@ #include "xhci.h" /* Declare global data pointer */ -DECLARE_GLOBAL_DATA_PTR; - static struct omap_xhci omap; static int omap_xhci_core_init(struct omap_xhci *omap) diff --git a/drivers/usb/host/xhci-rockchip.c b/drivers/usb/host/xhci-rockchip.c index b1f98842739..7f637d9237d 100644 --- a/drivers/usb/host/xhci-rockchip.c +++ b/drivers/usb/host/xhci-rockchip.c @@ -16,8 +16,6 @@ #include "xhci.h" -DECLARE_GLOBAL_DATA_PTR; - struct rockchip_xhci_platdata { fdt_addr_t hcd_base; fdt_addr_t phy_base; diff --git a/drivers/usb/host/xhci-zynqmp.c b/drivers/usb/host/xhci-zynqmp.c index cec1bc46d0a..c57e9abbaf4 100644 --- a/drivers/usb/host/xhci-zynqmp.c +++ b/drivers/usb/host/xhci-zynqmp.c @@ -19,8 +19,6 @@ #include "xhci.h" /* Declare global data pointer */ -DECLARE_GLOBAL_DATA_PTR; - /* Default to the ZYNQMP XHCI defines */ #define USB3_PWRCTL_CLK_CMD_MASK 0x3FE000 #define USB3_PWRCTL_CLK_FREQ_MASK 0xFFC diff --git a/drivers/usb/musb-new/Kconfig b/drivers/usb/musb-new/Kconfig index ea5bae260ef..f8f2205a62d 100644 --- a/drivers/usb/musb-new/Kconfig +++ b/drivers/usb/musb-new/Kconfig @@ -5,12 +5,16 @@ comment "MUSB Controller Driver" config USB_MUSB_HOST bool "MUSB host mode support" + select SPL_SPRINTF if SPL + select TPL_SPRINTF if TPL help Enables the MUSB USB dual-role controller in host mode. config USB_MUSB_GADGET bool "MUSB gadget mode support" select USB_GADGET_DUALSPEED + select SPL_SPRINTF if SPL + select TPL_SPRINTF if TPL help Enables the MUSB USB dual-role controller in gadget mode. diff --git a/drivers/video/backlight_gpio.c b/drivers/video/backlight_gpio.c index 772df5d3026..acb6f1c1b83 100644 --- a/drivers/video/backlight_gpio.c +++ b/drivers/video/backlight_gpio.c @@ -10,8 +10,6 @@ #include <backlight.h> #include <asm/gpio.h> -DECLARE_GLOBAL_DATA_PTR; - struct gpio_backlight_priv { struct gpio_desc gpio; bool def_value; diff --git a/drivers/video/bridge/anx6345.c b/drivers/video/bridge/anx6345.c index 0a94affb9f9..6f52d2f0416 100644 --- a/drivers/video/bridge/anx6345.c +++ b/drivers/video/bridge/anx6345.c @@ -16,8 +16,6 @@ #define DP_MAX_LANE_COUNT 0x002 #define DP_MAX_LANE_COUNT_MASK 0x1f -DECLARE_GLOBAL_DATA_PTR; - struct anx6345_priv { u8 edid[EDID_SIZE]; }; diff --git a/drivers/video/exynos/exynos_dp_lowlevel.c b/drivers/video/exynos/exynos_dp_lowlevel.c index f84dd7097f6..3f9a0e12fcd 100644 --- a/drivers/video/exynos/exynos_dp_lowlevel.c +++ b/drivers/video/exynos/exynos_dp_lowlevel.c @@ -17,8 +17,6 @@ #include "exynos_dp_lowlevel.h" /* Declare global data pointer */ -DECLARE_GLOBAL_DATA_PTR; - static void exynos_dp_enable_video_input(struct exynos_dp *dp_regs, unsigned int enable) { diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index 78e595ea4a2..fad027f0647 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c @@ -344,8 +344,6 @@ union chan_param_mem { struct chan_param_mem_interleaved ip; }; -DECLARE_GLOBAL_DATA_PTR; - /* graphics setup */ static GraphicDevice panel; static struct ctfb_res_modes *mode; diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c index f40e57bb8e6..28565a1e2c0 100644 --- a/drivers/video/pwm_backlight.c +++ b/drivers/video/pwm_backlight.c @@ -12,8 +12,6 @@ #include <asm/gpio.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - struct pwm_backlight_priv { struct udevice *reg; struct gpio_desc enable; diff --git a/drivers/video/rockchip/rk3288_mipi.c b/drivers/video/rockchip/rk3288_mipi.c index a7fa9c5110e..0a6f7e6b6db 100644 --- a/drivers/video/rockchip/rk3288_mipi.c +++ b/drivers/video/rockchip/rk3288_mipi.c @@ -24,8 +24,6 @@ #include <asm/arch/grf_rk3288.h> #include <asm/arch/rockchip_mipi_dsi.h> -DECLARE_GLOBAL_DATA_PTR; - #define MHz 1000000 /* Select mipi dsi source, big or little vop */ diff --git a/drivers/video/rockchip/rk3399_mipi.c b/drivers/video/rockchip/rk3399_mipi.c index b936fcec9ba..c085d8b6a59 100644 --- a/drivers/video/rockchip/rk3399_mipi.c +++ b/drivers/video/rockchip/rk3399_mipi.c @@ -24,8 +24,6 @@ #include <asm/arch/grf_rk3399.h> #include <asm/arch/rockchip_mipi_dsi.h> -DECLARE_GLOBAL_DATA_PTR; - /* Select mipi dsi source, big or little vop */ static int rk_mipi_dsi_source_select(struct udevice *dev) { diff --git a/drivers/video/rockchip/rk_edp.c b/drivers/video/rockchip/rk_edp.c index 1527f96eca2..2ea7340e7f1 100644 --- a/drivers/video/rockchip/rk_edp.c +++ b/drivers/video/rockchip/rk_edp.c @@ -20,8 +20,6 @@ #include <asm/arch/grf_rk3288.h> #include <dt-bindings/clock/rk3288-cru.h> -DECLARE_GLOBAL_DATA_PTR; - #define MAX_CR_LOOP 5 #define MAX_EQ_LOOP 5 #define DP_LINK_STATUS_SIZE 6 diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c index c0ce199c6af..8824f47e2ea 100644 --- a/drivers/video/simple_panel.c +++ b/drivers/video/simple_panel.c @@ -12,8 +12,6 @@ #include <asm/gpio.h> #include <power/regulator.h> -DECLARE_GLOBAL_DATA_PTR; - struct simple_panel_priv { struct udevice *reg; struct udevice *backlight; diff --git a/drivers/video/tegra124/display.c b/drivers/video/tegra124/display.c index 4164fa1bd96..0c6882cc51b 100644 --- a/drivers/video/tegra124/display.c +++ b/drivers/video/tegra124/display.c @@ -22,8 +22,6 @@ #include <dm/uclass-internal.h> #include "displayport.h" -DECLARE_GLOBAL_DATA_PTR; - /* return in 1000ths of a Hertz */ static int tegra_dc_calc_refresh(const struct display_timing *timing) { diff --git a/drivers/video/tegra124/dp.c b/drivers/video/tegra124/dp.c index 95d743d0f43..09e5aa75a27 100644 --- a/drivers/video/tegra124/dp.c +++ b/drivers/video/tegra124/dp.c @@ -18,8 +18,6 @@ #include "sor.h" #include "displayport.h" -DECLARE_GLOBAL_DATA_PTR; - #define DO_FAST_LINK_TRAINING 1 struct tegra_dp_plat { diff --git a/drivers/video/tegra124/sor.c b/drivers/video/tegra124/sor.c index 700ab25d467..a91643a21a0 100644 --- a/drivers/video/tegra124/sor.c +++ b/drivers/video/tegra124/sor.c @@ -17,8 +17,6 @@ #include "displayport.h" #include "sor.h" -DECLARE_GLOBAL_DATA_PTR; - #define DEBUG_SOR 0 #define APBDEV_PMC_DPD_SAMPLE 0x20 diff --git a/drivers/watchdog/ast_wdt.c b/drivers/watchdog/ast_wdt.c index aab077e3d1e..35398448408 100644 --- a/drivers/watchdog/ast_wdt.c +++ b/drivers/watchdog/ast_wdt.c @@ -14,8 +14,6 @@ #define WDT_AST2500 2500 #define WDT_AST2400 2400 -DECLARE_GLOBAL_DATA_PTR; - struct ast_wdt_priv { struct ast_wdt *regs; }; diff --git a/drivers/watchdog/mpc8xx_wdt.c b/drivers/watchdog/mpc8xx_wdt.c index ded80c4d6a9..5d2b624e002 100644 --- a/drivers/watchdog/mpc8xx_wdt.c +++ b/drivers/watchdog/mpc8xx_wdt.c @@ -9,8 +9,6 @@ #include <asm/cpm_8xx.h> #include <asm/io.h> -DECLARE_GLOBAL_DATA_PTR; - void hw_watchdog_reset(void) { immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR; diff --git a/drivers/watchdog/sandbox_wdt.c b/drivers/watchdog/sandbox_wdt.c index 02b57f39865..5ec32b25d61 100644 --- a/drivers/watchdog/sandbox_wdt.c +++ b/drivers/watchdog/sandbox_wdt.c @@ -9,8 +9,6 @@ #include <wdt.h> #include <asm/state.h> -DECLARE_GLOBAL_DATA_PTR; - static int sandbox_wdt_start(struct udevice *dev, u64 timeout, ulong flags) { struct sandbox_state *state = state_get_current(); diff --git a/drivers/watchdog/ulp_wdog.c b/drivers/watchdog/ulp_wdog.c index 72ec694cdd4..17fe670ce4c 100644 --- a/drivers/watchdog/ulp_wdog.c +++ b/drivers/watchdog/ulp_wdog.c @@ -40,8 +40,6 @@ struct wdog_regs { #define WDG_32KHZ_CLK (0x2) #define WDG_EXT_CLK (0x3) -DECLARE_GLOBAL_DATA_PTR; - void hw_watchdog_set_timeout(u16 val) { /* setting timeout value */ diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c index 8a30f024fdb..1eb5721d1a6 100644 --- a/drivers/watchdog/wdt-uclass.c +++ b/drivers/watchdog/wdt-uclass.c @@ -11,8 +11,6 @@ #include <dm/device-internal.h> #include <dm/lists.h> -DECLARE_GLOBAL_DATA_PTR; - int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) { const struct wdt_ops *ops = device_get_ops(dev); |