• Home
  • Raw
  • Download

Lines Matching +full:clk +full:- +full:delay +full:- +full:cycles

8  * TI AEMIF driver, Copyright (C) 2010 - 2013 Texas Instruments Inc.
16 #include <linux/clk.h>
56 struct clk *clk; member
64 int cycles; in pl172_timing_prop() local
68 cycles = DIV_ROUND_UP(val * pl172->rate, NSEC_PER_MSEC) - start; in pl172_timing_prop()
69 if (cycles < 0) { in pl172_timing_prop()
70 cycles = 0; in pl172_timing_prop()
71 } else if (cycles > max) { in pl172_timing_prop()
72 dev_err(&adev->dev, "%s timing too tight\n", name); in pl172_timing_prop()
73 return -EINVAL; in pl172_timing_prop()
76 writel(cycles, pl172->base + reg_offset); in pl172_timing_prop()
79 dev_dbg(&adev->dev, "%s: %u cycle(s)\n", name, start + in pl172_timing_prop()
80 readl(pl172->base + reg_offset)); in pl172_timing_prop()
93 if (!of_property_read_u32(np, "mpmc,memory-width", &cfg)) { in pl172_setup_static()
101 dev_err(&adev->dev, "invalid memory width cs%u\n", cs); in pl172_setup_static()
102 return -EINVAL; in pl172_setup_static()
105 dev_err(&adev->dev, "memory-width property required\n"); in pl172_setup_static()
106 return -EINVAL; in pl172_setup_static()
109 if (of_property_read_bool(np, "mpmc,async-page-mode")) in pl172_setup_static()
112 if (of_property_read_bool(np, "mpmc,cs-active-high")) in pl172_setup_static()
115 if (of_property_read_bool(np, "mpmc,byte-lane-low")) in pl172_setup_static()
118 if (of_property_read_bool(np, "mpmc,extended-wait")) in pl172_setup_static()
122 of_property_read_bool(np, "mpmc,buffer-enable")) in pl172_setup_static()
125 if (of_property_read_bool(np, "mpmc,write-protect")) in pl172_setup_static()
128 writel(cfg, pl172->base + MPMC_STATIC_CFG(cs)); in pl172_setup_static()
129 dev_dbg(&adev->dev, "mpmc static config cs%u: 0x%08x\n", cs, cfg); in pl172_setup_static()
132 ret = pl172_timing_prop(adev, np, "mpmc,write-enable-delay", in pl172_setup_static()
138 ret = pl172_timing_prop(adev, np, "mpmc,output-enable-delay", in pl172_setup_static()
144 ret = pl172_timing_prop(adev, np, "mpmc,read-access-delay", in pl172_setup_static()
150 ret = pl172_timing_prop(adev, np, "mpmc,page-mode-read-delay", in pl172_setup_static()
156 ret = pl172_timing_prop(adev, np, "mpmc,write-access-delay", in pl172_setup_static()
162 ret = pl172_timing_prop(adev, np, "mpmc,turn-round-delay", in pl172_setup_static()
170 dev_err(&adev->dev, "failed to configure cs%u\n", cs); in pl172_setup_static()
181 dev_err(&adev->dev, "cs%u invalid\n", cs); in pl172_parse_cs_config()
182 return -EINVAL; in pl172_parse_cs_config()
188 dev_err(&adev->dev, "cs property required\n"); in pl172_parse_cs_config()
190 return -EINVAL; in pl172_parse_cs_config()
199 struct device_node *child_np, *np = adev->dev.of_node; in pl172_probe()
200 struct device *dev = &adev->dev; in pl172_probe()
220 return -ENOMEM; in pl172_probe()
222 pl172->clk = devm_clk_get(dev, "mpmcclk"); in pl172_probe()
223 if (IS_ERR(pl172->clk)) { in pl172_probe()
225 return PTR_ERR(pl172->clk); in pl172_probe()
228 ret = clk_prepare_enable(pl172->clk); in pl172_probe()
234 pl172->rate = clk_get_rate(pl172->clk) / MSEC_PER_SEC; in pl172_probe()
235 if (!pl172->rate) { in pl172_probe()
237 ret = -EINVAL; in pl172_probe()
247 pl172->base = devm_ioremap(dev, adev->res.start, in pl172_probe()
248 resource_size(&adev->res)); in pl172_probe()
249 if (!pl172->base) { in pl172_probe()
251 ret = -ENOMEM; in pl172_probe()
275 clk_disable_unprepare(pl172->clk); in pl172_probe()
283 clk_disable_unprepare(pl172->clk); in pl172_remove()
311 .name = "memory-pl172",