From patchwork Mon Oct 3 22:46:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Andersson X-Patchwork-Id: 1685725 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=yiZ7KVdw; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=lqSuQfLj; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MhGD31Gj3z1yqn for ; Tue, 4 Oct 2022 09:46:40 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=qc9uL1yhFXs4FawYNoqUG9PHk07okmRq5RBj8cT3JVs=; b=yiZ7KVdwpo5S1F XE1QeH3KoaQlUehQccbx6fWM3YKIKQCir7qX5b5qf3ZK9xXsXSTeNzWW9Gza9vAGc8aMSGU97UHC/ tkIkfFqEZwEzEusMbEdTmqVY6CcKvkT7ma2qiHez1GO7IK6tWWsQnzFqJS7/OUgmZ3lMnRQpmIrcg SCArSJfr8Ctph3San/SitTo5/Wx2Bl4cT1K6MFzmcJyI7+ZI/vVlezzBBPJA+leke7/vJXaIAU8ZD AHF8GhXHBmIOi5P7+g+9tQGhjp3tfEYrQPtAuhaA4uSq61zIKldKiLd2C3tWUi5B54UN8iVrxjnlh IVoj38C7+QXwi2AQ2zeA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ofUCS-007xN7-74; Mon, 03 Oct 2022 22:46:12 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ofUCN-007xM7-5T for linux-arm-kernel@lists.infradead.org; Mon, 03 Oct 2022 22:46:10 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E746D6120F; Mon, 3 Oct 2022 22:46:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85B90C433D6; Mon, 3 Oct 2022 22:46:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1664837163; bh=peSrmHpf2GXRWRl5yVxhsQJ/OYfXzFXrMIsBwtA+O/g=; h=From:To:Cc:Subject:Date:From; b=lqSuQfLj92la/rl5AsYz7FOUs53UQbuRjAEaZLydPxLYyaWkCOpRQj0k8XFBinKlH BVxaJoj5TOHSH/fuIa2VVCYNOQyL45V2XwdMvm57OWUiCrR4EHnm6ZY963DiAFDB+s 7B6H6UkoPq5ZaAbWlbKbHfrqP3F2dlVxLUowt4OwyqOFR1ijKrO65Pdsi6jWP34usG Z+k2/wRXL20U4FwnZThZ7Ju7REsssvsjfEtTmfJxGNud3hF1SoDafX+x+rvcOu6u/B EW44Ed9qWPzezFO9vQOas6Bssz3ShQiHB8dLjsCkUtjmWRchb57EqF/39dwwFW6kzg E55Pb6Acx15Vg== From: Bjorn Andersson To: Stephen Boyd , linux-clk@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Andy Gross , Dmitry Baryshkov , Konrad Dybcio , Robert Marko , Stephan Gerhold , Yassine Oudjana , Christian Marangi , Richard Acayan , Taniya Das , Johan Hovold , Rajendra Nayak , Adam Skladowski , Bjorn Andersson , Iskren Chernev , Adam Skladowski , Andrew Halaney , Dang Huynh , Krishna chaitanya chundru , Krzysztof Kozlowski , Li Zhengyu , Luca Weiss , Marijn Suijten , Satya Priya Subject: [GIT PULL] Qualcomm clock updates for v6.1 Date: Mon, 3 Oct 2022 17:46:00 -0500 Message-Id: <20221003224600.2327879-1-andersson@kernel.org> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221003_154607_314359_B08A0BCF X-CRM114-Status: GOOD ( 15.39 ) X-Spam-Score: -5.4 (-----) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: The following changes since commit 568035b01cfb107af8d2e4bd2fb9aea22cf5b868: Linux 6.0-rc1 (2022-08-14 15:50:18 -0700) are available in the Git repository at: Content analysis details: (-5.4 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [139.178.84.217 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.2 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org The following changes since commit 568035b01cfb107af8d2e4bd2fb9aea22cf5b868: Linux 6.0-rc1 (2022-08-14 15:50:18 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git tags/qcom-clk-for-6.1 for you to fetch changes up to 994c77ed371e464ae4c1bfc316f7aff7309b2d59: clk: qcom: gcc-msm8939: use ARRAY_SIZE instead of specifying num_parents (2022-09-29 11:42:12 -0500) ---------------------------------------------------------------- Qualcomm clock updates for v6.1 This introduces display clock controllers are introduces for SM6115 and SM8450, and SC8280XP gains a GPU clock controller. MSM8909 and SM6375 gains global and SMD RPM clock controller drivers. The handling of GDSCs with PWRSTS_RET was fixed, to keep the GDSC on while powering down the parent supply. This solved retention issues during suspend of USB on sc7180/7280 and SC8280XP. SM6115 and QCM2260 are moved to reuse PLL configuration. SDM660 SDCC1 was moved to floor ops. Support for the APCS PLLs for IPQ8064, IPQ8074 and IPQ6018 was added/fixed. The MSM8996 CPU clocks was updated, with support for ACD clocks added. Support for SDM670 was added to the SDM845 Glbal clock controller and the RPMh clock controller driver. Transition to parent_data, parent_hws and use of ARRAY_SIZE() for num_parents was done for MSM8660, MSM8916, MSM8939, MSM8960 global clock controllers, IPQ8064 LPASS clock controller and MSM8960 multimedia clock controller. Support for per-reset defined delay of was introduced. ---------------------------------------------------------------- Adam Skladowski (3): dt-bindings: clock: add QCOM SM6115 display clock bindings clk: qcom: Add display clock controller driver for SM6115 clk: qcom: gcc-sm6115: Override default Alpha PLL regs Andrew Halaney (1): dt-bindings: clocks: qcom,gcc-sc8280xp: Fix typos Bjorn Andersson (3): Merge branch '1662005846-4838-1-git-send-email-quic_c_skakit@quicinc.com' into clk-for-6.1 dt-bindings: clock: Add Qualcomm SC8280XP GPU binding clk: qcom: Add SC8280XP GPU clock controller Christian Marangi (5): dt-bindings: clock: add pcm reset for ipq806x lcc clk: qcom: lcc-ipq806x: add reset definition clk: qcom: lcc-ipq806x: convert to parent data clk: qcom: lcc-ipq806x: use ARRAY_SIZE for num_parents clk: qcom: clk-rcg2: add rcg2 mux ops Dang Huynh (1): clk: qcom: sm6115: Select QCOM_GDSC Dmitry Baryshkov (32): dt-bindings: clk: qcom,gcc-*: use qcom,gcc.yaml dt-bindings: clock: separate bindings for MSM8916 GCC device clk: qcom: gcc-msm8916: use ARRAY_SIZE instead of specifying num_parents clk: qcom: gcc-msm8916: move GPLL definitions up clk: qcom: gcc-msm8916: move gcc_mss_q6_bimc_axi_clk down clk: qcom: gcc-msm8916: use parent_hws/_data instead of parent_names dt-bindings: clock: qcom,mmcc: fix clocks/clock-names definitions dt-bindings: clock: qcom,mmcc: define clocks/clock-names for MSM8996 dt-bindings: clock: qcom,gcc-msm8660: separate GCC bindings for MSM8660 clk: qcom: gcc-msm8660: use ARRAY_SIZE instead of specifying num_parents clk: qcom: gcc-msm8660: use parent_hws/_data instead of parent_names clk: qcom: a53-pll: convert to use parent_data rather than parent_names dt-bindings: clocks: qcom,gcc-apq8064: define clocks/-names properties dt-bindings: clocks: qcom,mmcc: define clocks/clock-names for MSM8960 clk: qcom: gcc-msm8960: use ARRAY_SIZE instead of specifying num_parents clk: qcom: gcc-msm8960: use parent_hws/_data instead of parent_names clk: qcom: lcc-msm8960: use macros to implement mi2s clocks clk: qcom: lcc-msm8960: use parent_hws/_data instead of parent_names clk: qcom: mmcc-msm8960: use ARRAY_SIZE instead of specifying num_parents clk: qcom: mmcc-msm8960: move clock parent tables down clk: qcom: mmcc-msm8960: use parent_hws/_data instead of parent_names clk: qcom: cpu-8996: switch to devm_clk_notifier_register clk: qcom: cpu-8996: declare ACD clocks clk: qcom: cpu-8996: move ACD logic to clk_cpu_8996_pmux_determine_rate clk: qcom: cpu-8996: don't store parents in clk_cpu_8996_pmux clk: qcom: cpu-8996: use constant mask for pmux dt-bindings: clock: qcom: add bindings for dispcc on SM8450 clk: qcom: alpha-pll: add support for power off mode for lucid evo PLL clk: qcom: Add support for Display Clock Controller on SM8450 dt-bindings: clock: move qcom,gcc-msm8939 to qcom,gcc-msm8916.yaml clk: qcom: gcc-msm8939: use parent_hws where possible clk: qcom: gcc-msm8939: use ARRAY_SIZE instead of specifying num_parents Iskren Chernev (2): clk: qcom: gcc-sm6115: Move alpha pll bramo overrides clk: qcom: Merge alt alpha plls for qcm2260, sm6115 Johan Hovold (4): clk: gcc-sc8280xp: keep PCIe power-domains always-on clk: gcc-sc8280xp: keep USB power-domains always-on clk: qcom: gdsc: add missing error handling clk: qcom: gcc-sc8280xp: use retention for USB power domains Konrad Dybcio (6): dt-bindings: clock: qcom,rpmcc: Add compatible for SM6375 dt-bindings: clock: qcom: rpmcc: Add BIMC_FREQ_LOG clk: qcom: smd: Add SM6375 clocks clk: qcom: alpha: Add support for programming the PLL_FSM_LEGACY_MODE bit dt-bindings: clock: add SM6375 QCOM global clock bindings clk: qcom: Add global clock controller driver for SM6375 Krishna chaitanya chundru (1): clk: qcom: gcc-sc7280: Update the .pwrsts for PCIe GDSC Krzysztof Kozlowski (1): dt-bindings: clock: qcom,a53pll: replace maintainer Li Zhengyu (1): clk: qcom: clk-rpmh: Remove redundant if statement Luca Weiss (1): clk: qcom: gcc-sm6350: Update the .pwrsts for usb gdscs Marijn Suijten (1): clk: qcom: gcc-sdm660: Use floor ops for SDCC1 clock Rajendra Nayak (3): clk: qcom: gdsc: Fix the handling of PWRSTS_RET support clk: qcom: gcc-sc7180: Update the .pwrsts for usb gdsc clk: qcom: gcc-sc7280: Update the .pwrsts for usb gdscs Richard Acayan (5): dt-bindings: clock: gcc-sdm845: add sdm670 global clocks clk: qcom: gcc-sdm845: use device tree match data clk: qcom: gcc-sdm845: add sdm670 global clock data dt-bindings: clock: add rpmhcc bindings for sdm670 clk: qcom: rpmhcc: add sdm670 clocks Robert Marko (6): clk: qcom: apss-ipq6018: fix apcs_alias0_clk_src clk: qcom: apss-ipq6018: mark apcs_alias0_core_clk as critical dt-bindings: clock: qcom,a53pll: add IPQ8074 compatible clk: qcom: apss-ipq-pll: use OF match data for Alpha PLL config clk: qcom: apss-ipq-pll: update IPQ6018 Alpha PLL config clk: qcom: apss-ipq-pll: add support for IPQ8074 Satya Priya (1): clk: qcom: lpass: Fix lpass audiocc probe Stephan Gerhold (6): dt-bindings: clock: Add schema for MSM8909 GCC clk: qcom: Add driver for MSM8909 GCC clk: qcom: reset: Allow specifying custom reset delay clk: qcom: gcc-msm8909: Increase delay for USB PHY reset dt-bindings: clock: qcom,rpmcc: Add MSM8909 clk: qcom: smd-rpm: Add clocks for MSM8909 Taniya Das (5): dt-bindings: clock: Add "qcom,adsp-pil-mode" property dt-bindings: clock: Add resets for LPASS audio clock controller for SC7280 dt-bindings: clock: Add support for external MCLKs for LPASS on SC7280 clk: qcom: lpass: Handle the regmap overlap of lpasscc and lpass_aon clk: qcom: lpass: Add support for resets & external mclk for SC7280 Yassine Oudjana (6): clk: qcom: msm8996-cpu: Rename DIV_2_INDEX to SMUX_INDEX clk: qcom: msm8996-cpu: Statically define PLL dividers clk: qcom: msm8996-cpu: Unify cluster order clk: qcom: msm8996-cpu: Convert secondary muxes to clk_regmap_mux dt-bindings: clock: qcom,msm8996-apcc: Fix clocks clk: qcom: msm8996-cpu: Use parent_data/_hws for all clocks .../devicetree/bindings/clock/qcom,a53pll.yaml | 3 +- .../bindings/clock/qcom,gcc-apq8064.yaml | 9 + .../bindings/clock/qcom,gcc-msm8660.yaml | 54 + .../bindings/clock/qcom,gcc-msm8909.yaml | 58 + .../bindings/clock/qcom,gcc-msm8916.yaml | 66 + .../bindings/clock/qcom,gcc-msm8976.yaml | 21 +- .../bindings/clock/qcom,gcc-msm8994.yaml | 21 +- .../bindings/clock/qcom,gcc-msm8996.yaml | 25 +- .../bindings/clock/qcom,gcc-msm8998.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-other.yaml | 7 - .../bindings/clock/qcom,gcc-qcm2290.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sc7180.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sc7280.yaml | 21 +- .../bindings/clock/qcom,gcc-sc8180x.yaml | 25 +- .../bindings/clock/qcom,gcc-sc8280xp.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sdm845.yaml | 84 +- .../devicetree/bindings/clock/qcom,gcc-sdx55.yaml | 21 +- .../devicetree/bindings/clock/qcom,gcc-sdx65.yaml | 21 +- .../devicetree/bindings/clock/qcom,gcc-sm6115.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sm6125.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sm6350.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sm8150.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sm8250.yaml | 25 +- .../devicetree/bindings/clock/qcom,gcc-sm8350.yaml | 21 +- .../devicetree/bindings/clock/qcom,gcc-sm8450.yaml | 21 +- .../devicetree/bindings/clock/qcom,gpucc.yaml | 2 + .../devicetree/bindings/clock/qcom,mmcc.yaml | 209 +- .../bindings/clock/qcom,msm8996-apcc.yaml | 15 +- .../devicetree/bindings/clock/qcom,rpmcc.yaml | 2 + .../devicetree/bindings/clock/qcom,rpmhcc.yaml | 1 + .../bindings/clock/qcom,sc7280-lpasscc.yaml | 6 +- .../bindings/clock/qcom,sc7280-lpasscorecc.yaml | 26 +- .../bindings/clock/qcom,sm6115-dispcc.yaml | 70 + .../devicetree/bindings/clock/qcom,sm6375-gcc.yaml | 52 + .../bindings/clock/qcom,sm8450-dispcc.yaml | 98 + drivers/clk/qcom/Kconfig | 47 +- drivers/clk/qcom/Makefile | 5 + drivers/clk/qcom/a53-pll.c | 4 +- drivers/clk/qcom/apss-ipq-pll.c | 33 +- drivers/clk/qcom/apss-ipq6018.c | 15 +- drivers/clk/qcom/clk-alpha-pll.c | 66 +- drivers/clk/qcom/clk-alpha-pll.h | 8 +- drivers/clk/qcom/clk-cpu-8996.c | 329 +- drivers/clk/qcom/clk-rcg.h | 1 + drivers/clk/qcom/clk-rcg2.c | 7 + drivers/clk/qcom/clk-rpmh.c | 25 +- drivers/clk/qcom/clk-smd-rpm.c | 83 +- drivers/clk/qcom/dispcc-sm6115.c | 608 +++ drivers/clk/qcom/dispcc-sm8450.c | 1829 +++++++++ drivers/clk/qcom/gcc-msm8660.c | 330 +- drivers/clk/qcom/gcc-msm8909.c | 2731 ++++++++++++++ drivers/clk/qcom/gcc-msm8916.c | 1020 ++--- drivers/clk/qcom/gcc-msm8939.c | 552 +-- drivers/clk/qcom/gcc-msm8960.c | 436 ++- drivers/clk/qcom/gcc-qcm2290.c | 56 +- drivers/clk/qcom/gcc-sc7180.c | 2 +- drivers/clk/qcom/gcc-sc7280.c | 6 +- drivers/clk/qcom/gcc-sc8280xp.c | 20 +- drivers/clk/qcom/gcc-sdm660.c | 2 +- drivers/clk/qcom/gcc-sdm845.c | 400 +- drivers/clk/qcom/gcc-sm6115.c | 48 +- drivers/clk/qcom/gcc-sm6350.c | 2 +- drivers/clk/qcom/gcc-sm6375.c | 3931 ++++++++++++++++++++ drivers/clk/qcom/gdsc.c | 35 +- drivers/clk/qcom/gdsc.h | 5 + drivers/clk/qcom/gpucc-sc8280xp.c | 461 +++ drivers/clk/qcom/lcc-ipq806x.c | 84 +- drivers/clk/qcom/lcc-msm8960.c | 211 +- drivers/clk/qcom/lpassaudiocc-sc7280.c | 66 +- drivers/clk/qcom/lpasscc-sc7280.c | 44 - drivers/clk/qcom/lpasscorecc-sc7280.c | 33 + drivers/clk/qcom/mmcc-msm8960.c | 454 ++- drivers/clk/qcom/reset.c | 4 +- drivers/clk/qcom/reset.h | 1 + include/dt-bindings/clock/qcom,gcc-msm8909.h | 218 ++ include/dt-bindings/clock/qcom,gcc-sdm845.h | 1 + include/dt-bindings/clock/qcom,gpucc-sc8280xp.h | 35 + include/dt-bindings/clock/qcom,lcc-ipq806x.h | 2 + .../dt-bindings/clock/qcom,lpassaudiocc-sc7280.h | 5 + .../dt-bindings/clock/qcom,lpasscorecc-sc7280.h | 2 + include/dt-bindings/clock/qcom,rpmcc.h | 1 + include/dt-bindings/clock/qcom,sm6115-dispcc.h | 36 + include/dt-bindings/clock/qcom,sm6375-gcc.h | 234 ++ include/dt-bindings/clock/qcom,sm8450-dispcc.h | 103 + include/linux/soc/qcom/smd-rpm.h | 1 + 85 files changed, 13613 insertions(+), 2203 deletions(-) create mode 100644 Documentation/devicetree/bindings/clock/qcom,gcc-msm8660.yaml create mode 100644 Documentation/devicetree/bindings/clock/qcom,gcc-msm8909.yaml create mode 100644 Documentation/devicetree/bindings/clock/qcom,gcc-msm8916.yaml create mode 100644 Documentation/devicetree/bindings/clock/qcom,sm6115-dispcc.yaml create mode 100644 Documentation/devicetree/bindings/clock/qcom,sm6375-gcc.yaml create mode 100644 Documentation/devicetree/bindings/clock/qcom,sm8450-dispcc.yaml create mode 100644 drivers/clk/qcom/dispcc-sm6115.c create mode 100644 drivers/clk/qcom/dispcc-sm8450.c create mode 100644 drivers/clk/qcom/gcc-msm8909.c create mode 100644 drivers/clk/qcom/gcc-sm6375.c create mode 100644 drivers/clk/qcom/gpucc-sc8280xp.c create mode 100644 include/dt-bindings/clock/qcom,gcc-msm8909.h create mode 100644 include/dt-bindings/clock/qcom,gpucc-sc8280xp.h create mode 100644 include/dt-bindings/clock/qcom,sm6115-dispcc.h create mode 100644 include/dt-bindings/clock/qcom,sm6375-gcc.h create mode 100644 include/dt-bindings/clock/qcom,sm8450-dispcc.h