soc: qcom: eud: Add support for EUD TCSR register check

For some targets like Bengal, eud enablement expects a TCSR register
to be configured first. This would be one time enablement during
drivers probe. Due to this register disabled, eud was not getting
enabled on Bengal platform.

If this register is not configured for EUD, do not enable
eud-tcsr-check-enable parameter.

Change-Id: Iaabfaecf343090d964d06807dcee5ea6a2dca3dc
Signed-off-by: Shadab Naseem <snaseem@codeaurora.org>
Signed-off-by: Mukesh Ojha <mojha@codeaurora.org>
This commit is contained in:
Shadab Naseem 2019-12-06 20:37:43 +05:30 • committed by Mukesh Ojha
commit 12ac024c7c

View file

@ -58,6 +58,8 @@
#define UART_ID 0x90
#define MAX_FIFO_SIZE 14
#define EUD_TCSR_ENABLE_BIT BIT(0)
struct eud_chip {
struct device *dev;
int eud_irq;
@ -586,6 +588,8 @@ static int msm_eud_probe(struct platform_device *pdev)
struct uart_port *port;
struct resource *res;
int ret;
bool eud_tcsr_check_state;
phys_addr_t eud_tcsr_check;
chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
if (!chip)
@ -678,6 +682,33 @@ static int msm_eud_probe(struct platform_device *pdev)
port->irq = chip->eud_irq;
port->ops = &eud_uart_ops;
/*
* Before enabling EUD, check for TCSR register
* and if present, enable it.
*/
eud_tcsr_check_state = of_property_read_bool(
pdev->dev.of_node, "qcom,eud-tcsr-check-enable");
if (eud_tcsr_check_state) {
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"eud_tcsr_check_reg");
if (res) {
eud_tcsr_check = res->start;
ret = qcom_scm_io_writel(eud_tcsr_check,
EUD_TCSR_ENABLE_BIT);
if (ret) {
dev_err(&pdev->dev,
"TCSR qcom_scm_io_writel failed with rc:%d\n",
ret);
goto error;
}
} else {
dev_err(chip->dev,
"Failed to get resource for tcsr check!\n");
goto error;
}
}
ret = uart_add_one_port(&eud_uart_driver, port);
if (ret) {
dev_err(chip->dev, "failed to add uart port!\n");