diff mbox

[v4,3/3] media: mtk-mdp: Fix mdp device tree

Message ID 1495509851-29159-4-git-send-email-minghsiu.tsai@mediatek.com (mailing list archive)
State New, archived
Headers show

Commit Message

Minghsiu Tsai May 23, 2017, 3:24 a.m. UTC
From: Daniel Kurtz <djkurtz@chromium.org>

If the mdp_* nodes are under an mdp sub-node, their corresponding
platform device does not automatically get its iommu assigned properly.

Fix this by moving the mdp component nodes up a level such that they are
siblings of mdp and all other SoC subsystems.  This also simplifies the
device tree.

Although it fixes iommu assignment issue, it also break compatibility
with old device tree. So, the patch in driver is needed to iterate over
sibling mdp device nodes, not child ones, to keep driver work properly.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>

---
 drivers/media/platform/mtk-mdp/mtk_mdp_core.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Matthias Brugger June 7, 2017, 8:44 a.m. UTC | #1
Hi Hans, hi Mauro,

On 23/05/17 05:24, Minghsiu Tsai wrote:
> From: Daniel Kurtz <djkurtz@chromium.org>
> 
> If the mdp_* nodes are under an mdp sub-node, their corresponding
> platform device does not automatically get its iommu assigned properly.
> 
> Fix this by moving the mdp component nodes up a level such that they are
> siblings of mdp and all other SoC subsystems.  This also simplifies the
> device tree.
> 
> Although it fixes iommu assignment issue, it also break compatibility
> with old device tree. So, the patch in driver is needed to iterate over
> sibling mdp device nodes, not child ones, to keep driver work properly.
> 
> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
> 

Are you OK to take this patch, or do you have any further comments?

Regards,
Matthias

> ---
>   drivers/media/platform/mtk-mdp/mtk_mdp_core.c | 12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
> index 9e4eb7d..8134755 100644
> --- a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
> +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
> @@ -103,7 +103,7 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>   {
>   	struct mtk_mdp_dev *mdp;
>   	struct device *dev = &pdev->dev;
> -	struct device_node *node;
> +	struct device_node *node, *parent;
>   	int i, ret = 0;
>   
>   	mdp = devm_kzalloc(dev, sizeof(*mdp), GFP_KERNEL);
> @@ -117,8 +117,16 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>   	mutex_init(&mdp->lock);
>   	mutex_init(&mdp->vpulock);
>   
> +	/* Old dts had the components as child nodes */
> +	if (of_get_next_child(dev->of_node, NULL)) {
> +		parent = dev->of_node;
> +		dev_warn(dev, "device tree is out of date\n");
> +	} else {
> +		parent = dev->of_node->parent;
> +	}
> +
>   	/* Iterate over sibling MDP function blocks */
> -	for_each_child_of_node(dev->of_node, node) {
> +	for_each_child_of_node(parent, node) {
>   		const struct of_device_id *of_id;
>   		enum mtk_mdp_comp_type comp_type;
>   		int comp_id;
>
Hans Verkuil June 7, 2017, 8:56 a.m. UTC | #2
On 07/06/17 10:44, Matthias Brugger wrote:
> Hi Hans, hi Mauro,
> 
> On 23/05/17 05:24, Minghsiu Tsai wrote:
>> From: Daniel Kurtz <djkurtz@chromium.org>
>>
>> If the mdp_* nodes are under an mdp sub-node, their corresponding
>> platform device does not automatically get its iommu assigned properly.
>>
>> Fix this by moving the mdp component nodes up a level such that they are
>> siblings of mdp and all other SoC subsystems.  This also simplifies the
>> device tree.
>>
>> Although it fixes iommu assignment issue, it also break compatibility
>> with old device tree. So, the patch in driver is needed to iterate over
>> sibling mdp device nodes, not child ones, to keep driver work properly.
>>
>> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
>> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>>
> 
> Are you OK to take this patch, or do you have any further comments?

Nope, it's all good. Queued for 4.13.

Regards,

	Hans

> 
> Regards,
> Matthias
> 
>> ---
>>   drivers/media/platform/mtk-mdp/mtk_mdp_core.c | 12 ++++++++++--
>>   1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>> index 9e4eb7d..8134755 100644
>> --- a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>> +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>> @@ -103,7 +103,7 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>>   {
>>       struct mtk_mdp_dev *mdp;
>>       struct device *dev = &pdev->dev;
>> -    struct device_node *node;
>> +    struct device_node *node, *parent;
>>       int i, ret = 0;
>>         mdp = devm_kzalloc(dev, sizeof(*mdp), GFP_KERNEL);
>> @@ -117,8 +117,16 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>>       mutex_init(&mdp->lock);
>>       mutex_init(&mdp->vpulock);
>>   +    /* Old dts had the components as child nodes */
>> +    if (of_get_next_child(dev->of_node, NULL)) {
>> +        parent = dev->of_node;
>> +        dev_warn(dev, "device tree is out of date\n");
>> +    } else {
>> +        parent = dev->of_node->parent;
>> +    }
>> +
>>       /* Iterate over sibling MDP function blocks */
>> -    for_each_child_of_node(dev->of_node, node) {
>> +    for_each_child_of_node(parent, node) {
>>           const struct of_device_id *of_id;
>>           enum mtk_mdp_comp_type comp_type;
>>           int comp_id;
>>
Matthias Brugger June 7, 2017, 9:07 a.m. UTC | #3
On 07/06/17 10:56, Hans Verkuil wrote:
> On 07/06/17 10:44, Matthias Brugger wrote:
>> Hi Hans, hi Mauro,
>>
>> On 23/05/17 05:24, Minghsiu Tsai wrote:
>>> From: Daniel Kurtz <djkurtz@chromium.org>
>>>
>>> If the mdp_* nodes are under an mdp sub-node, their corresponding
>>> platform device does not automatically get its iommu assigned properly.
>>>
>>> Fix this by moving the mdp component nodes up a level such that they are
>>> siblings of mdp and all other SoC subsystems.  This also simplifies the
>>> device tree.
>>>
>>> Although it fixes iommu assignment issue, it also break compatibility
>>> with old device tree. So, the patch in driver is needed to iterate over
>>> sibling mdp device nodes, not child ones, to keep driver work properly.
>>>
>>> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
>>> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
>>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>>>
>>
>> Are you OK to take this patch, or do you have any further comments?
> 
> Nope, it's all good. Queued for 4.13.
> 

Thanks!

I queued the other two in v4.12-next/dts64

Regards,
Matthias

> Regards,
> 
> 	Hans
> 
>>
>> Regards,
>> Matthias
>>
>>> ---
>>>    drivers/media/platform/mtk-mdp/mtk_mdp_core.c | 12 ++++++++++--
>>>    1 file changed, 10 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>>> index 9e4eb7d..8134755 100644
>>> --- a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>>> +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
>>> @@ -103,7 +103,7 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>>>    {
>>>        struct mtk_mdp_dev *mdp;
>>>        struct device *dev = &pdev->dev;
>>> -    struct device_node *node;
>>> +    struct device_node *node, *parent;
>>>        int i, ret = 0;
>>>          mdp = devm_kzalloc(dev, sizeof(*mdp), GFP_KERNEL);
>>> @@ -117,8 +117,16 @@ static int mtk_mdp_probe(struct platform_device *pdev)
>>>        mutex_init(&mdp->lock);
>>>        mutex_init(&mdp->vpulock);
>>>    +    /* Old dts had the components as child nodes */
>>> +    if (of_get_next_child(dev->of_node, NULL)) {
>>> +        parent = dev->of_node;
>>> +        dev_warn(dev, "device tree is out of date\n");
>>> +    } else {
>>> +        parent = dev->of_node->parent;
>>> +    }
>>> +
>>>        /* Iterate over sibling MDP function blocks */
>>> -    for_each_child_of_node(dev->of_node, node) {
>>> +    for_each_child_of_node(parent, node) {
>>>            const struct of_device_id *of_id;
>>>            enum mtk_mdp_comp_type comp_type;
>>>            int comp_id;
>>>
>
Hans Verkuil June 7, 2017, 9:11 a.m. UTC | #4
On 07/06/17 11:07, Matthias Brugger wrote:
> 
> 
> On 07/06/17 10:56, Hans Verkuil wrote:
>> On 07/06/17 10:44, Matthias Brugger wrote:
>>> Hi Hans, hi Mauro,
>>>
>>> On 23/05/17 05:24, Minghsiu Tsai wrote:
>>>> From: Daniel Kurtz <djkurtz@chromium.org>
>>>>
>>>> If the mdp_* nodes are under an mdp sub-node, their corresponding
>>>> platform device does not automatically get its iommu assigned properly.
>>>>
>>>> Fix this by moving the mdp component nodes up a level such that they are
>>>> siblings of mdp and all other SoC subsystems.  This also simplifies the
>>>> device tree.
>>>>
>>>> Although it fixes iommu assignment issue, it also break compatibility
>>>> with old device tree. So, the patch in driver is needed to iterate over
>>>> sibling mdp device nodes, not child ones, to keep driver work properly.
>>>>
>>>> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
>>>> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
>>>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>>>>
>>>
>>> Are you OK to take this patch, or do you have any further comments?
>>
>> Nope, it's all good. Queued for 4.13.
>>
> 
> Thanks!
> 
> I queued the other two in v4.12-next/dts64

Media bindings normally go through the media subsystem, but you've taken
that one as well? I need to know, because then I drop it in my tree.

Regards,

	Hans
Matthias Brugger June 7, 2017, 9:13 a.m. UTC | #5
On 07/06/17 11:11, Hans Verkuil wrote:
> On 07/06/17 11:07, Matthias Brugger wrote:
>>
>>
>> On 07/06/17 10:56, Hans Verkuil wrote:
>>> On 07/06/17 10:44, Matthias Brugger wrote:
>>>> Hi Hans, hi Mauro,
>>>>
>>>> On 23/05/17 05:24, Minghsiu Tsai wrote:
>>>>> From: Daniel Kurtz <djkurtz@chromium.org>
>>>>>
>>>>> If the mdp_* nodes are under an mdp sub-node, their corresponding
>>>>> platform device does not automatically get its iommu assigned properly.
>>>>>
>>>>> Fix this by moving the mdp component nodes up a level such that they are
>>>>> siblings of mdp and all other SoC subsystems.  This also simplifies the
>>>>> device tree.
>>>>>
>>>>> Although it fixes iommu assignment issue, it also break compatibility
>>>>> with old device tree. So, the patch in driver is needed to iterate over
>>>>> sibling mdp device nodes, not child ones, to keep driver work properly.
>>>>>
>>>>> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
>>>>> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
>>>>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>>>>>
>>>>
>>>> Are you OK to take this patch, or do you have any further comments?
>>>
>>> Nope, it's all good. Queued for 4.13.
>>>
>>
>> Thanks!
>>
>> I queued the other two in v4.12-next/dts64
> 
> Media bindings normally go through the media subsystem, but you've taken
> that one as well? I need to know, because then I drop it in my tree.
> 

My fault, I'll drop it from my tree. After that I only queued patch 2/3.

Sorry.
Matthias
Hans Verkuil June 7, 2017, 9:15 a.m. UTC | #6
On 07/06/17 11:13, Matthias Brugger wrote:
> 
> 
> On 07/06/17 11:11, Hans Verkuil wrote:
>> On 07/06/17 11:07, Matthias Brugger wrote:
>>>
>>>
>>> On 07/06/17 10:56, Hans Verkuil wrote:
>>>> On 07/06/17 10:44, Matthias Brugger wrote:
>>>>> Hi Hans, hi Mauro,
>>>>>
>>>>> On 23/05/17 05:24, Minghsiu Tsai wrote:
>>>>>> From: Daniel Kurtz <djkurtz@chromium.org>
>>>>>>
>>>>>> If the mdp_* nodes are under an mdp sub-node, their corresponding
>>>>>> platform device does not automatically get its iommu assigned properly.
>>>>>>
>>>>>> Fix this by moving the mdp component nodes up a level such that they are
>>>>>> siblings of mdp and all other SoC subsystems.  This also simplifies the
>>>>>> device tree.
>>>>>>
>>>>>> Although it fixes iommu assignment issue, it also break compatibility
>>>>>> with old device tree. So, the patch in driver is needed to iterate over
>>>>>> sibling mdp device nodes, not child ones, to keep driver work properly.
>>>>>>
>>>>>> Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
>>>>>> Signed-off-by: Minghsiu Tsai <minghsiu.tsai@mediatek.com>
>>>>>> Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
>>>>>>
>>>>>
>>>>> Are you OK to take this patch, or do you have any further comments?
>>>>
>>>> Nope, it's all good. Queued for 4.13.
>>>>
>>>
>>> Thanks!
>>>
>>> I queued the other two in v4.12-next/dts64
>>
>> Media bindings normally go through the media subsystem, but you've taken
>> that one as well? I need to know, because then I drop it in my tree.
>>
> 
> My fault, I'll drop it from my tree. After that I only queued patch 2/3.

OK, thanks. Then I'll take patch 1/3 and 3/3.

Regards,

	Hans
diff mbox

Patch

diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
index 9e4eb7d..8134755 100644
--- a/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
+++ b/drivers/media/platform/mtk-mdp/mtk_mdp_core.c
@@ -103,7 +103,7 @@  static int mtk_mdp_probe(struct platform_device *pdev)
 {
 	struct mtk_mdp_dev *mdp;
 	struct device *dev = &pdev->dev;
-	struct device_node *node;
+	struct device_node *node, *parent;
 	int i, ret = 0;
 
 	mdp = devm_kzalloc(dev, sizeof(*mdp), GFP_KERNEL);
@@ -117,8 +117,16 @@  static int mtk_mdp_probe(struct platform_device *pdev)
 	mutex_init(&mdp->lock);
 	mutex_init(&mdp->vpulock);
 
+	/* Old dts had the components as child nodes */
+	if (of_get_next_child(dev->of_node, NULL)) {
+		parent = dev->of_node;
+		dev_warn(dev, "device tree is out of date\n");
+	} else {
+		parent = dev->of_node->parent;
+	}
+
 	/* Iterate over sibling MDP function blocks */
-	for_each_child_of_node(dev->of_node, node) {
+	for_each_child_of_node(parent, node) {
 		const struct of_device_id *of_id;
 		enum mtk_mdp_comp_type comp_type;
 		int comp_id;