Skip to contentSkip to conversation

media: tegra-cec: Support Tegra186 and Tegra194

PATCH Superseded Thierry Reding 3 participants 11 messages Dec 10, 2018 – Dec 11, 2018

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 media: tegra-cec: Support Tegra186 and Tegra194

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

---
 drivers/media/platform/tegra-cec/tegra_cec.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/media/platform/tegra-cec/tegra_cec.c +2 -0
index aba488cd0e64..8a1e10d008d0 100644
@@ -472,6 +472,8 @@ static const struct of_device_id tegra_cec_of_match[] = {
 	{ .compatible = "nvidia,tegra114-cec", },
 	{ .compatible = "nvidia,tegra124-cec", },
 	{ .compatible = "nvidia,tegra210-cec", },
+	{ .compatible = "nvidia,tegra186-cec", },
+	{ .compatible = "nvidia,tegra194-cec", },
 	{},
 };
 
Signature · 1 line
2.19.1
#1 lore raw

PATCH 2/2 media: tegra-cec: Export OF device ID match table

From: Thierry Reding <[email protected]>

Exporting the OF device ID match table allows udev to automatically load the module upon receiving an "ADD" uevent for the CEC controller device.

---
 drivers/media/platform/tegra-cec/tegra_cec.c | 1 +
 1 file changed, 1 insertion(+)
drivers/media/platform/tegra-cec/tegra_cec.c +1 -0
index 8a1e10d008d0..4e9f91528f77 100644
@@ -476,6 +476,7 @@ static const struct of_device_id tegra_cec_of_match[] = {
 	{ .compatible = "nvidia,tegra194-cec", },
 	{},
 };
+MODULE_DEVICE_TABLE(of, tegra_cec_of_match);
 
 static struct platform_driver tegra_cec_driver = {
 	.driver = {
Signature · 1 line
2.19.1
#2 lore raw
In reply to Thierry Reding

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

HDMI inputs CAN share the CEC line, but never outputs. There should have been two CEC blocks, one for each HDMI output.

It should not be possible to use the same CEC block for both HDMI outputs on the 186. Ideally it should be a required dts property that determines this. I'm not sure where that should happen. One option might be to use the cec_notifier_get_conn() function so you can register the CEC adapter for a specific connector only. For older tegra versions the connector name would be NULL (i.e. don't care), for the 186 (and perhaps 194) it would be a required property that tells the CEC driver which connector it is associated with.

Just a suggestion, there might be other ways to implement this as well.

So before I can merge this I need to know first how you plan to handle this HW bug.

Regards,

Hans

Quoted 20 lines
---
 drivers/media/platform/tegra-cec/tegra_cec.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/media/platform/tegra-cec/tegra_cec.c +2 -0
index aba488cd0e64..8a1e10d008d0 100644
@@ -472,6 +472,8 @@ static const struct of_device_id tegra_cec_of_match[] = {
 	{ .compatible = "nvidia,tegra114-cec", },
 	{ .compatible = "nvidia,tegra124-cec", },
 	{ .compatible = "nvidia,tegra210-cec", },
+	{ .compatible = "nvidia,tegra186-cec", },
+	{ .compatible = "nvidia,tegra194-cec", },
 	{},
 };
 
#3 lore raw
Quoted 5 lines · Hans Verkuil

Hi Thierry,

Quoted 2 lines · Thierry Reding

From: Thierry Reding <[email protected]>

Quoted 8 lines
Quoted 2 lines

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

You may already have access to the schematics, if not you can download them here:

https://developer.nvidia.com/embedded/dlc/jetson-tx1-tx2-developer-kit-carrier-board-c02-design-files

It's slightly annoying because it requires registration. But in those schematics you'll see that the HDMI_CEC pin is just routed directly from the processor module to the connector on the carrier board via the connector.

Quoted 2 lines

HDMI inputs CAN share the CEC line, but never outputs. There should have been two CEC blocks, one for each HDMI output.

Like I said, I don't think these are shared. The board design will have to choose which connector gets the SOR and CEC pins for HDMI. Typically the other SOR will be used for DisplayPort, not HDMI, though that would technically be possible. I think in case where there really were two HDMI connectors on a design, a decision would have to be made as to which one gets the CEC pin.

Quoted 10 lines

It should not be possible to use the same CEC block for both HDMI outputs on the 186. Ideally it should be a required dts property that determines this. I'm not sure where that should happen. One option might be to use the cec_notifier_get_conn() function so you can register the CEC adapter for a specific connector only. For older tegra versions the connector name would be NULL (i.e. don't care), for the 186 (and perhaps 194) it would be a required property that tells the CEC driver which connector it is associated with.

Just a suggestion, there might be other ways to implement this as well.

Given the documentation that I have, I don't think we need to take any additional precautions. We just to hook up the CEC controller to the correct HDMI connector via the hdmi-phandle property.

Quoted 2 lines

So before I can merge this I need to know first how you plan to handle this HW bug.

I don't think this is an actual bug. It's more of a restriction of the SoC that allows only a single HDMI connector with CEC support.

Thierry

#4 lore raw
Quoted 12 lines · Thierry Reding
Quoted 11 lines · Hans Verkuil

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

Quoted 8 lines
Quoted 2 lines

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

Sorry, my memory was not completely correct.

The problem is that the 186 can be configured with two HDMI outputs, but it has only one CEC block. So CEC can be used for only one of the two. I checked the TRM for the Tegra194 and that has up to four HDMI outputs, but still only one CEC block.

And yes, it is the responsibility for the board designer to hook up the CEC pin to only one of the outputs, but the TRM never explicitly mentions this and given the general lack of knowledge about CEC it wouldn't surprise me at all if there will be wrong board designs.

But be that as it may, the core problem remains: you cannot allow multiple HDMI outputs to be connected to the same CEC device.

However, I now realize that your patches will actually work fine since each HDMI connector tries to get a cec notifier for its own HDMI device, but the tegra-cec driver will only register a notifier for the HDMI device pointed to by the hdmi-phandle property. So only one of the HDMI devices will actually get a working CEC.

Although if board designers mess this up and connect multiple CEC lines to the same CEC pin, this would still break, but there is nothing that can be done about that. I still believe the TRM should have made this clear since it is not obvious. Even better would be to have the same number of CEC blocks as there are configurable HDMI outputs. Typically, if you support CEC on one HDMI output, you want to support it for all. And today that's not possible without adding external CEC devices (as we - Cisco - do).

Apologies for the confusion, I should never send emails after 5pm :-)

Regards,

Hans

Quoted 44 lines

You may already have access to the schematics, if not you can download them here:

https://developer.nvidia.com/embedded/dlc/jetson-tx1-tx2-developer-kit-carrier-board-c02-design-files

It's slightly annoying because it requires registration. But in those schematics you'll see that the HDMI_CEC pin is just routed directly from the processor module to the connector on the carrier board via the connector.

Quoted 2 lines

HDMI inputs CAN share the CEC line, but never outputs. There should have been two CEC blocks, one for each HDMI output.

Like I said, I don't think these are shared. The board design will have to choose which connector gets the SOR and CEC pins for HDMI. Typically the other SOR will be used for DisplayPort, not HDMI, though that would technically be possible. I think in case where there really were two HDMI connectors on a design, a decision would have to be made as to which one gets the CEC pin.

Quoted 10 lines

It should not be possible to use the same CEC block for both HDMI outputs on the 186. Ideally it should be a required dts property that determines this. I'm not sure where that should happen. One option might be to use the cec_notifier_get_conn() function so you can register the CEC adapter for a specific connector only. For older tegra versions the connector name would be NULL (i.e. don't care), for the 186 (and perhaps 194) it would be a required property that tells the CEC driver which connector it is associated with.

Just a suggestion, there might be other ways to implement this as well.

Given the documentation that I have, I don't think we need to take any additional precautions. We just to hook up the CEC controller to the correct HDMI connector via the hdmi-phandle property.

Quoted 2 lines

So before I can merge this I need to know first how you plan to handle this HW bug.

I don't think this is an actual bug. It's more of a restriction of the SoC that allows only a single HDMI connector with CEC support.

Thierry

#5 lore raw
Quoted 43 lines · Hans Verkuil
Quoted 12 lines · Thierry Reding
Quoted 11 lines · Hans Verkuil

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

Quoted 8 lines
Quoted 2 lines

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

Sorry, my memory was not completely correct.

The problem is that the 186 can be configured with two HDMI outputs, but it has only one CEC block. So CEC can be used for only one of the two. I checked the TRM for the Tegra194 and that has up to four HDMI outputs, but still only one CEC block.

And yes, it is the responsibility for the board designer to hook up the CEC pin to only one of the outputs, but the TRM never explicitly mentions this and given the general lack of knowledge about CEC it wouldn't surprise me at all if there will be wrong board designs.

But be that as it may, the core problem remains: you cannot allow multiple HDMI outputs to be connected to the same CEC device.

However, I now realize that your patches will actually work fine since each HDMI connector tries to get a cec notifier for its own HDMI device, but the tegra-cec driver will only register a notifier for the HDMI device pointed to by the hdmi-phandle property. So only one of the HDMI devices will actually get a working CEC.

Quoted 7 lines

Although if board designers mess this up and connect multiple CEC lines to the same CEC pin, this would still break, but there is nothing that can be done about that. I still believe the TRM should have made this clear since it is not obvious. Even better would be to have the same number of CEC blocks as there are configurable HDMI outputs. Typically, if you support CEC on one HDMI output, you want to support it for all. And today that's not possible without adding external CEC devices (as we - Cisco - do).

I wasn't aware that anyone was using a Tegra with support for multiple HDMI outputs. Do you have a contact that you can forward this kind of request to? It certainly sounds like something that would be useful to add in future chips if there's a customer need.

I can also forward this internally, but I expect it to have more weight coming directly from Cisco. =)

Quoted 1 line

Apologies for the confusion, I should never send emails after 5pm :-)

No worries.

Thierry

#6 lore raw
Quoted 66 lines · Thierry Reding
Quoted 43 lines · Hans Verkuil
Quoted 12 lines · Thierry Reding
Quoted 11 lines · Hans Verkuil

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

Quoted 8 lines
Quoted 2 lines

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

Sorry, my memory was not completely correct.

The problem is that the 186 can be configured with two HDMI outputs, but it has only one CEC block. So CEC can be used for only one of the two. I checked the TRM for the Tegra194 and that has up to four HDMI outputs, but still only one CEC block.

And yes, it is the responsibility for the board designer to hook up the CEC pin to only one of the outputs, but the TRM never explicitly mentions this and given the general lack of knowledge about CEC it wouldn't surprise me at all if there will be wrong board designs.

But be that as it may, the core problem remains: you cannot allow multiple HDMI outputs to be connected to the same CEC device.

However, I now realize that your patches will actually work fine since each HDMI connector tries to get a cec notifier for its own HDMI device, but the tegra-cec driver will only register a notifier for the HDMI device pointed to by the hdmi-phandle property. So only one of the HDMI devices will actually get a working CEC.

Quoted 7 lines

Although if board designers mess this up and connect multiple CEC lines to the same CEC pin, this would still break, but there is nothing that can be done about that. I still believe the TRM should have made this clear since it is not obvious. Even better would be to have the same number of CEC blocks as there are configurable HDMI outputs. Typically, if you support CEC on one HDMI output, you want to support it for all. And today that's not possible without adding external CEC devices (as we - Cisco - do).

I wasn't aware that anyone was using a Tegra with support for multiple HDMI outputs. Do you have a contact that you can forward this kind of request to? It certainly sounds like something that would be useful to add in future chips if there's a customer need.

I can also forward this internally, but I expect it to have more weight coming directly from Cisco. =)

Quoted 1 line

Apologies for the confusion, I should never send emails after 5pm :-)

No worries.

Thierry

#7 lore raw
In reply to Thierry Reding

(Resend, this time with a proper reply)

Quoted 52 lines · Thierry Reding
Quoted 43 lines · Hans Verkuil
Quoted 12 lines · Thierry Reding
Quoted 11 lines · Hans Verkuil

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

Quoted 8 lines
Quoted 2 lines

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

Sorry, my memory was not completely correct.

The problem is that the 186 can be configured with two HDMI outputs, but it has only one CEC block. So CEC can be used for only one of the two. I checked the TRM for the Tegra194 and that has up to four HDMI outputs, but still only one CEC block.

And yes, it is the responsibility for the board designer to hook up the CEC pin to only one of the outputs, but the TRM never explicitly mentions this and given the general lack of knowledge about CEC it wouldn't surprise me at all if there will be wrong board designs.

But be that as it may, the core problem remains: you cannot allow multiple HDMI outputs to be connected to the same CEC device.

However, I now realize that your patches will actually work fine since each HDMI connector tries to get a cec notifier for its own HDMI device, but the tegra-cec driver will only register a notifier for the HDMI device pointed to by the hdmi-phandle property. So only one of the HDMI devices will actually get a working CEC.

Quoted 7 lines

Although if board designers mess this up and connect multiple CEC lines to the same CEC pin, this would still break, but there is nothing that can be done about that. I still believe the TRM should have made this clear since it is not obvious. Even better would be to have the same number of CEC blocks as there are configurable HDMI outputs. Typically, if you support CEC on one HDMI output, you want to support it for all. And today that's not possible without adding external CEC devices (as we - Cisco - do).

Quoted 4 lines

I wasn't aware that anyone was using a Tegra with support for multiple HDMI outputs. Do you have a contact that you can forward this kind of request to? It certainly sounds like something that would be useful to add in future chips if there's a customer need.

We have contacts, and we did report it, but nothing happened with it AFAIK. It was likely too late for changes to the Tegra194 design in any case.

Regards,

Hans

Quoted 10 lines

I can also forward this internally, but I expect it to have more weight coming directly from Cisco. =)

Quoted 1 line

Apologies for the confusion, I should never send emails after 5pm :-)

No worries.

Thierry

#8 lore raw
Quoted 55 lines · Hans Verkuil

(Resend, this time with a proper reply)

Quoted 52 lines · Thierry Reding
Quoted 50 lines · Hans Verkuil
Quoted 12 lines · Thierry Reding
Quoted 11 lines · Hans Verkuil

Hi Thierry,

Quoted 4 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

Well... at least for the Tegra186 there is a problem that needs to be addressed first. No idea if this was solved for the Tegra194, it might be present there as well.

Quoted 8 lines
Quoted 2 lines

The Tegra186 hardware connected the CEC lines of both HDMI outputs together. This is a HW bug, and it means that only one of the two HDMI outputs can use the CEC block.

I don't know where you got that information from, but I can't find any indication of that in the documentation. My understanding is that there is a single CEC block that is completely independent and it is merely a decision of the board designer where to connect it. I'm not aware of any boards that expose more than a single CEC.

Sorry, my memory was not completely correct.

The problem is that the 186 can be configured with two HDMI outputs, but it has only one CEC block. So CEC can be used for only one of the two. I checked the TRM for the Tegra194 and that has up to four HDMI outputs, but still only one CEC block.

And yes, it is the responsibility for the board designer to hook up the CEC pin to only one of the outputs, but the TRM never explicitly mentions this and given the general lack of knowledge about CEC it wouldn't surprise me at all if there will be wrong board designs.

But be that as it may, the core problem remains: you cannot allow multiple HDMI outputs to be connected to the same CEC device.

However, I now realize that your patches will actually work fine since each HDMI connector tries to get a cec notifier for its own HDMI device, but the tegra-cec driver will only register a notifier for the HDMI device pointed to by the hdmi-phandle property. So only one of the HDMI devices will actually get a working CEC.

Although if board designers mess this up and connect multiple CEC lines to the same CEC pin, this would still break, but there is nothing that can be done about that. I still believe the TRM should have made this clear since it is not obvious. Even better would be to have the same number of CEC blocks as there are configurable HDMI outputs. Typically, if you support CEC on one HDMI output, you want to support it for all. And today that's not possible without adding external CEC devices (as we - Cisco - do).

Quoted 8 lines
Quoted 4 lines

I wasn't aware that anyone was using a Tegra with support for multiple HDMI outputs. Do you have a contact that you can forward this kind of request to? It certainly sounds like something that would be useful to add in future chips if there's a customer need.

We have contacts, and we did report it, but nothing happened with it AFAIK. It was likely too late for changes to the Tegra194 design in any case.

Okay. I'll follow up internally, see if I can find out what the story is.

Thanks,
Thierry

#9 lore raw
In reply to Thierry Reding
Quoted 16 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

---
 drivers/media/platform/tegra-cec/tegra_cec.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/media/platform/tegra-cec/tegra_cec.c +0 -0
index aba488cd0e64..8a1e10d008d0 100644

drivers/media/platform/tegra-cec/tegra_cec.c static const struct of_device_id tegra_cec_of_match[] = { · line 479

Quoted 8 lines
drivers/media/platform/tegra-cec/tegra_cec.c +2 -0
@@ -472,6 +472,8 @@ static const struct of_device_id tegra_cec_of_match[] = {
 	{ .compatible = "nvidia,tegra114-cec", },
 	{ .compatible = "nvidia,tegra124-cec", },
 	{ .compatible = "nvidia,tegra210-cec", },
+	{ .compatible = "nvidia,tegra186-cec", },
+	{ .compatible = "nvidia,tegra194-cec", },
 	{},
 };
 

Applying: media: tegra-cec: Support Tegra186 and Tegra194
WARNING: DT compatible string "nvidia,tegra186-cec" appears un-documented -- check ./Documentation/devicetree/bindings/ #9: FILE: drivers/media/platform/tegra-cec/tegra_cec.c:475:
+ { .compatible = "nvidia,tegra186-cec", },

WARNING: DT compatible string "nvidia,tegra194-cec" appears un-documented -- check ./Documentation/devicetree/bindings/ #10: FILE: drivers/media/platform/tegra-cec/tegra_cec.c:476:
+ { .compatible = "nvidia,tegra194-cec", },

I need an additional patch adding the new bindings to Documentation/devicetree/bindings/media/tegra-cec.txt.

Regards,

Hans

#10 lore raw
Quoted 31 lines · Hans Verkuil
Quoted 16 lines · Thierry Reding

From: Thierry Reding <[email protected]>

The CEC controller found on Tegra186 and Tegra194 is the same as on earlier generations.

---
 drivers/media/platform/tegra-cec/tegra_cec.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/media/platform/tegra-cec/tegra_cec.c +0 -0
index aba488cd0e64..8a1e10d008d0 100644

drivers/media/platform/tegra-cec/tegra_cec.c static const struct of_device_id tegra_cec_of_match[] = { · line 479

Quoted 8 lines
drivers/media/platform/tegra-cec/tegra_cec.c +2 -0
@@ -472,6 +472,8 @@ static const struct of_device_id tegra_cec_of_match[] = {
 	{ .compatible = "nvidia,tegra114-cec", },
 	{ .compatible = "nvidia,tegra124-cec", },
 	{ .compatible = "nvidia,tegra210-cec", },
+	{ .compatible = "nvidia,tegra186-cec", },
+	{ .compatible = "nvidia,tegra194-cec", },
 	{},
 };
 

Applying: media: tegra-cec: Support Tegra186 and Tegra194
WARNING: DT compatible string "nvidia,tegra186-cec" appears un-documented -- check ./Documentation/devicetree/bindings/ #9: FILE: drivers/media/platform/tegra-cec/tegra_cec.c:475:
+ { .compatible = "nvidia,tegra186-cec", },

Quoted 3 lines

WARNING: DT compatible string "nvidia,tegra194-cec" appears un-documented -- check ./Documentation/devicetree/bindings/ #10: FILE: drivers/media/platform/tegra-cec/tegra_cec.c:476:
+ { .compatible = "nvidia,tegra194-cec", },

Ugh... I usually have a git hook in place to catch this kind of mistake, but it's currently disabled because it was getting in the way of some large rebases I've been doing lately...

Quoted 2 lines

I need an additional patch adding the new bindings to Documentation/devicetree/bindings/media/tegra-cec.txt.

Will send a patch right away.

Thanks,
Thierry