devbus
*ticks = (time_ps + devbus->tick_ps - 1) / devbus->tick_ps;
dev_dbg(devbus->dev, "%s: %u ps -> 0x%x\n",
static int devbus_get_timing_params(struct devbus *devbus,
dev_err(devbus->dev,
dev_err(devbus->dev, "invalid bus width %d\n", r->bus_width);
err = get_timing_param_ps(devbus, node, "devbus,badr-skew-ps",
err = get_timing_param_ps(devbus, node, "devbus,turn-off-ps",
err = get_timing_param_ps(devbus, node, "devbus,acc-first-ps",
err = get_timing_param_ps(devbus, node, "devbus,acc-next-ps",
if (of_device_is_compatible(devbus->dev->of_node, "marvell,mvebu-devbus")) {
err = get_timing_param_ps(devbus, node, "devbus,rd-setup-ps",
err = get_timing_param_ps(devbus, node, "devbus,rd-hold-ps",
dev_err(devbus->dev,
err = get_timing_param_ps(devbus, node, "devbus,ale-wr-ps",
err = get_timing_param_ps(devbus, node, "devbus,wr-low-ps",
err = get_timing_param_ps(devbus, node, "devbus,wr-high-ps",
static void devbus_orion_set_timing_params(struct devbus *devbus,
writel(value, devbus->base);
static void devbus_armada_set_timing_params(struct devbus *devbus,
dev_dbg(devbus->dev, "read parameters register 0x%p = 0x%x\n",
devbus->base + ARMADA_READ_PARAM_OFFSET,
writel(value, devbus->base + ARMADA_READ_PARAM_OFFSET);
dev_dbg(devbus->dev, "write parameters register: 0x%p = 0x%x\n",
devbus->base + ARMADA_WRITE_PARAM_OFFSET,
writel(value, devbus->base + ARMADA_WRITE_PARAM_OFFSET);
struct devbus *devbus;
devbus = devm_kzalloc(&pdev->dev, sizeof(struct devbus), GFP_KERNEL);
if (!devbus)
devbus->dev = dev;
devbus->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(devbus->base))
return PTR_ERR(devbus->base);
devbus->tick_ps = 1000000000 / rate;
dev_dbg(devbus->dev, "Setting timing parameter, tick is %lu ps\n",
devbus->tick_ps);
err = devbus_get_timing_params(devbus, node, &r, &w);
devbus_orion_set_timing_params(devbus, node, &r, &w);
devbus_armada_set_timing_params(devbus, node, &r, &w);
static int get_timing_param_ps(struct devbus *devbus,
dev_err(devbus->dev, "%pOF has no '%s' property\n",