Skip to contentSkip to conversation

What's the proper use of con_id in clkdev

DISCUSSION York Sun 3 participants 4 messages Oct 5, 2015 – Oct 6, 2015 Common clk

lore
Share & tools
lore

York Sun

author
#0 lore raw

Michael and Stephen,

Can you help me to understand "#define MAX_CON_ID 16" in clkdev.c? I am trying to use clk_get() to acquire the clock with its name. This fails when the clock name is more than 15 characters. I traced it to this macro.

The reason of using clk_get() is I don't have device tree for my platform until device tree overlay is officially supported. So I use clkdev_add() in the clock driver.

So my issue is with the MAX_CON_ID. Is there a reason to limit it to 16? Wouldn't it be better to use kstrdup() in vclkdev_alloc()?

York

#1 lore raw
Quoted 6 lines · York Sun

Michael and Stephen,

Can you help me to understand "#define MAX_CON_ID 16" in clkdev.c? I am trying to use clk_get() to acquire the clock with its name. This fails when the clock name is more than 15 characters. I traced it to this macro.

Quoted 7 lines

The reason of using clk_get() is I don't have device tree for my platform until device tree overlay is officially supported. So I use clkdev_add() in the clock driver.

So my issue is with the MAX_CON_ID. Is there a reason to limit it to 16? Wouldn't it be better to use kstrdup() in vclkdev_alloc()?

Mike and I are not the maintainers of clkdev. The maintainer of clkdev is Russell King.

I believe we can't use kstrdup() in vclkdev_alloc() because we don't know if vclkdev_alloc() is called before the slab allocators are up and running (this is why we have a __clkdev_alloc() function). The simplest solution is to use shorter names, can you do that?

Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
#2 lore raw
Quoted 15 lines · Stephen Boyd
Quoted 6 lines · York Sun

Michael and Stephen,

Can you help me to understand "#define MAX_CON_ID 16" in clkdev.c? I am trying to use clk_get() to acquire the clock with its name. This fails when the clock name is more than 15 characters. I traced it to this macro.

Quoted 7 lines

The reason of using clk_get() is I don't have device tree for my platform until device tree overlay is officially supported. So I use clkdev_add() in the clock driver.

So my issue is with the MAX_CON_ID. Is there a reason to limit it to 16? Wouldn't it be better to use kstrdup() in vclkdev_alloc()?

Quoted 8 lines

Mike and I are not the maintainers of clkdev. The maintainer of clkdev is Russell King.

I believe we can't use kstrdup() in vclkdev_alloc() because we don't know if vclkdev_alloc() is called before the slab allocators are up and running (this is why we have a __clkdev_alloc() function). The simplest solution is to use shorter names, can you do that?

Why does anyone need a _connection_ _id_ longer than 15 characters anyway?

It's not a system clock name - it's supposed to be a device _specific_ clock _input_ name. This statement comes from many years experience, where people have repeatedly passed clk_get(NULL, "global clock name") and eventually run into great problems, ending up having to pass clk connection names through platform data, or clk pointers through platform data. Both are abhorrent.

Use the API as it was designed to be used: always use clk_get(device, "device-input-name") or clk_get_sys("device-name", "device-input-name") and not clk_get(NULL, "global-clock-name").

Signature · 2 lines
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
author
#3 lore raw
Quoted 35 lines · Russell King - ARM Linux
Quoted 15 lines · Stephen Boyd
Quoted 6 lines · York Sun

Michael and Stephen,

Can you help me to understand "#define MAX_CON_ID 16" in clkdev.c? I am trying to use clk_get() to acquire the clock with its name. This fails when the clock name is more than 15 characters. I traced it to this macro.

Quoted 7 lines

The reason of using clk_get() is I don't have device tree for my platform until device tree overlay is officially supported. So I use clkdev_add() in the clock driver.

So my issue is with the MAX_CON_ID. Is there a reason to limit it to 16? Wouldn't it be better to use kstrdup() in vclkdev_alloc()?

Quoted 8 lines

Mike and I are not the maintainers of clkdev. The maintainer of clkdev is Russell King.

I believe we can't use kstrdup() in vclkdev_alloc() because we don't know if vclkdev_alloc() is called before the slab allocators are up and running (this is why we have a __clkdev_alloc() function). The simplest solution is to use shorter names, can you do that?

Why does anyone need a _connection_ _id_ longer than 15 characters anyway?

It's not a system clock name - it's supposed to be a device _specific_ clock _input_ name. This statement comes from many years experience, where people have repeatedly passed clk_get(NULL, "global clock name") and eventually run into great problems, ending up having to pass clk connection names through platform data, or clk pointers through platform data. Both are abhorrent.

Quoted 4 lines

Use the API as it was designed to be used: always use clk_get(device, "device-input-name") or clk_get_sys("device-name", "device-input-name") and not clk_get(NULL, "global-clock-name").

Thanks to all for the guidance.

York