Skip to content

Commit 9bb4a10

Browse files
ADSP enable adsp-gptimer-counter
1 parent 76b1771 commit 9bb4a10

File tree

2 files changed

+44
-25
lines changed

2 files changed

+44
-25
lines changed

arch/arm64/boot/dts/adi/sc59x-64.dtsi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,10 @@
227227
status = "disabled";
228228
};
229229

230-
// gptimer_counter: gptimer-counters@0 {
231-
// compatible = "adi,gptimer-counter";
232-
// status = "okay";
233-
// };
230+
gptimer_counter: gptimer-counters@0 {
231+
compatible = "adi,gptimer-counter";
232+
status = "okay";
233+
};
234234

235235
rcu: rcu@3108c000 {
236236
compatible = "adi,reset-controller";

drivers/clocksource/timer-adi-adsp-sc5xx.c

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,9 @@ struct sc5xx_gptimer_controller {
115115
struct clockevent_gptimer *cevt;
116116
struct sc5xx_gptimer *timers;
117117
size_t num_timers;
118-
struct counter_device counter_dev;
119118
};
120119

121-
static struct sc5xx_gptimer_controller gptimer_controller = { 0 };
120+
static struct sc5xx_gptimer_controller gptimer_controller = { 0x00 };
122121

123122
static struct clockevent_gptimer *to_clockevent_gptimer(struct
124123
clock_event_device
@@ -430,25 +429,30 @@ static int __init sc5xx_gptimer_controller_init(struct device_node *np)
430429
int ret;
431430
int i, n;
432431

432+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
433+
433434
if (gptimer_controller.base) {
434435
pr_err
435436
("%s: Tried to initialize a second gptimer controller; check your device tree\n",
436437
__func__);
437438
return -EINVAL;
438439
}
440+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
439441

440442
base = of_iomap(np, 0);
441443
if (!base) {
442444
pr_err("%s: Unable to map gptimer registers\n", __func__);
443445
return -ENODEV;
444446
}
447+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
445448

446449
clk = of_clk_get(np, 0);
447450
if (IS_ERR(clk)) {
448451
pr_err("%s: could not find sclk0_0 = %ld\n", __func__,
449452
PTR_ERR(clk));
450453
return PTR_ERR(clk);
451454
}
455+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
452456

453457
ret = clk_prepare_enable(clk);
454458
if (ret) {
@@ -463,8 +467,9 @@ static int __init sc5xx_gptimer_controller_init(struct device_node *np)
463467
n = of_get_child_count(np);
464468
gptimer_controller.num_timers = n;
465469
gptimer_controller.timers =
466-
kcalloc(n, sizeof(*gptimer_controller.timers), GFP_KERNEL);
470+
kcalloc(n, sizeof(*gptimer_controller.timers), GFP_KERNEL);
467471

472+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
468473
if (!gptimer_controller.timers) {
469474
pr_err("%s: Unable to allocate memory for timers\n",
470475
__func__);
@@ -476,6 +481,7 @@ static int __init sc5xx_gptimer_controller_init(struct device_node *np)
476481
ret =
477482
sc5xx_gptimer_init(timer_np,
478483
&gptimer_controller.timers[i]);
484+
printk(KERN_ERR" sc5xx_gptimer_controller_init %d\n",__LINE__);
479485
if (ret) {
480486
of_node_put(timer_np);
481487
return ret;
@@ -493,35 +499,48 @@ TIMER_OF_DECLARE(sc5xx_gptimers, "adi,sc5xx-gptimers",
493499
static int gptimer_counter_probe(struct platform_device *pdev)
494500
{
495501
struct device *dev = &pdev->dev;
496-
struct counter_count *counts;
502+
struct counter_count *adi_counts;
503+
struct sc5xx_gptimer_controller *priv;
504+
struct counter_device *counter;
497505
uint32_t i;
506+
int ret;
498507

499-
if (!gptimer_controller.base) {
500-
dev_err(dev, "gptimer controller not yet mapped?\n");
501-
return -ENODEV;
508+
adi_counts =
509+
devm_kcalloc(dev, gptimer_controller.num_timers,
510+
sizeof(*adi_counts), GFP_KERNEL);
511+
if (!adi_counts) {
512+
return -ENOMEM;
502513
}
503514

504-
counts =
505-
devm_kcalloc(dev, gptimer_controller.num_timers,
506-
sizeof(*counts), GFP_KERNEL);
507-
if (!counts)
515+
516+
counter = devm_counter_alloc(dev, sizeof(*priv));
517+
if (!counter)
508518
return -ENOMEM;
509519

520+
priv = counter_priv(counter);
521+
522+
510523
for (i = 0; i < gptimer_controller.num_timers; ++i) {
511-
counts[i].id = i;
512-
counts[i].name =
524+
adi_counts[i].name =
513525
kasprintf(GFP_KERNEL, "gptimer_counter%d", i);
514526
}
515527

516-
gptimer_controller.counter_dev.name = dev_name(dev);
517-
gptimer_controller.counter_dev.parent = dev;
518-
gptimer_controller.counter_dev.ops = &gptimer_counter_ops;
519-
gptimer_controller.counter_dev.counts = counts;
520-
gptimer_controller.counter_dev.num_counts =
521-
gptimer_controller.num_timers;
528+
priv->clk = gptimer_controller.clk;
529+
530+
counter->name = dev_name(dev);
531+
counter->parent = dev;
532+
counter->ops = &gptimer_counter_ops;
533+
counter->counts = adi_counts;
534+
counter->num_counts = gptimer_controller.num_timers;
535+
536+
/* Register Counter device */
537+
ret = devm_counter_add(dev, counter);
538+
if (ret < 0) {
539+
dev_err_probe(dev, ret, "Failed to add counter\n");
540+
}
541+
return ret;
522542

523-
//changed from devm_counter_register
524-
return devm_counter_add(dev, &gptimer_controller.counter_dev);
543+
525544
}
526545

527546
static const struct of_device_id adsp_gptimer_counter_match[] = {

0 commit comments

Comments
 (0)