> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 为 Kodiak/LeMans/Monaco/Talos 平台启用 GP_MN 支持

> 在 Kodiak、LeMans、Monaco 和 Talos 平台上启用 GP_MN（通用 M/N 时钟）支持所需的软件更改。

# 为 Kodiak/LeMans/Monaco/Talos 平台启用 GP\_MN 支持

## 概述

本文档介绍在 **Kodiak**、**LeMans** 和 **Monaco** 平台上启用 **GP\_MN**（通用 M/N 时钟）支持所需的软件更改。在这些平台上，启用 GP\_MN 需要更新内核配置。

## 内核配置更新

### DEFCONFIG 更新

```config theme={null}
CONFIG_QCOM_CLK_GP_MND=m
```

本文档还介绍了如何在基于 **Qualcomm QCS615 SoC** 的 **Talos** 平台上启用 **GP\_MN**。对于 Talos，更新内容包括对引脚控制驱动程序、内核配置和设备树条目的更改。

## 1. GPIO 配置更改

**文件：** `drivers/pinctrl/qcom/pinctrl-qcs615.c`

### 更改

```diff theme={null}
--- a/drivers/pinctrl/qcom/pinctrl-qcs615.c
+++ b/drivers/pinctrl/qcom/pinctrl-qcs615.c
@@ -404,6 +404,7 @@ enum qcs615_functions {
      msm_mux_emac_phy_intr,
      msm_mux_forced_usb,
      msm_mux_gcc_gp,
+      msm_mux_gp_mn,
      msm_mux_gp_pdm,
      msm_mux_gps_tx,
      msm_mux_hs0_mi2s,
@@ -581,6 +582,10 @@ static const char *const gcc_gp_groups[] = {
      "gpio59", "gpio78",
};

+static const char *const gp_mn_groups[] = {
+      "gpio29",
+};
+
static const char *const gp_pdm_groups[] = {
      "gpio8", "gpio54", "gpio63", "gpio66",
      "gpio79", "gpio95",
@@ -840,6 +845,7 @@ static const struct pinfunction qcs615_functions[] = {
      MSM_PIN_FUNCTION(emac_phy_intr),
      MSM_PIN_FUNCTION(forced_usb),
      MSM_PIN_FUNCTION(gcc_gp),
+      MSM_PIN_FUNCTION(gp_mn),
      MSM_PIN_FUNCTION(gp_pdm),
      MSM_PIN_FUNCTION(gps_tx),
      MSM_PIN_FUNCTION(hs0_mi2s),
@@ -929,7 +935,7 @@ static const struct msm_pingroup qcs615_groups[] = {
      [26] = PINGROUP(26, EAST, cci_async, hs1_mi2s, jitter_bist, _, _, _, _, _, _),
      [27] = PINGROUP(27, EAST, hs1_mi2s, pll_bist, _, _, _, _, _, _, _),
      [28] = PINGROUP(28, EAST, cam_mclk, agera_pll, qdss_gpio, _, _, _, _, _, _),
-      [29] = PINGROUP(29, EAST, cam_mclk, _, qdss_gpio, atest_tsens, _, _, _, _, _),
+      [29] = PINGROUP(29, EAST, cam_mclk, gp_mn, qdss_gpio, atest_tsens, _, _, _, _, _),
      [30] = PINGROUP(30, EAST, cam_mclk, qdss_gpio, _, _, _, _, _, _, _),
      [31] = PINGROUP(31, EAST, cam_mclk, _, qdss_gpio, _, _, _, _, _, _),
      [32] = PINGROUP(32, EAST, cci_i2c, _, qdss_gpio, _, _, _, _, _, _),
```

## 2. 内核配置更新

### DEFCONFIG 更新

```config theme={null}
CONFIG_QCOM_CLK_GP_MND=m
```

## 3. 设备树配置

**文件：** `arch/arm64/boot/dts/qcom/talos.dtsi`

### TLMM 引脚配置

在 `tlmm` 节点下添加以下内容：

```dts theme={null}
gp_mn_active: gp_mn_active-state {
	pins = "gpio29";
	function = "gp_mn";
	drive-strength = <2>;
	bias-disable;
};
```

### GP\_MN 节点

在 `soc` 节点下添加以下内容：

```dts theme={null}
gp_mn: clock-controller@88d3000 {
	compatible = "qcom,clk-gp-mnd";
	reg = <0x0 0x088d3000 0x0 0xc>;
	clocks = <&gcc GCC_PDM_XO4_CLK>,
	         <&gcc GCC_PDM_AHB_CLK>;
	clock-names = "pdm_clk", "ahb_clk";
	clock-output-names = "gp_mn_clk";
	#clock-cells = <0>;
	pinctrl-names = "active";
	pinctrl-0 = <&gp_mn_active>;
	assigned-clocks = <&gcc GCC_PDM_XO4_CLK>;
	assigned-clock-rates = <4800000>;
};
```

## 总结

要启用 GP\_MN 支持：

### Kodiak / LeMans / Monaco

* 在内核配置中启用 GP\_MND 时钟驱动程序：

```config theme={null}
CONFIG_QCOM_CLK_GP_MND=m
```

### Talos (QCS615)

1. 更新 QCS615 pinctrl 驱动程序，添加 `gp_mn` 复用功能并将其映射到 `gpio29`。
2. 在内核配置中使用 `CONFIG_QCOM_CLK_GP_MND=m` 启用 GP\_MND 时钟驱动程序。
3. 在 `talos.dtsi` 中添加所需的 TLMM pinctrl 状态和 GP\_MN 时钟控制器节点。
