soc: bcm: bcm-pmb: add BCM63138 SATA support
authorRafał Miłecki <rafal@milecki.pl>
Thu, 14 Jan 2021 17:53:39 +0000 (18:53 +0100)
committerFlorian Fainelli <f.fainelli@gmail.com>
Thu, 25 Mar 2021 21:24:43 +0000 (14:24 -0700)
BCM63138 has SATA controller that needs to be powered up using PMB.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
drivers/soc/bcm/bcm63xx/bcm-pmb.c
include/dt-bindings/soc/bcm-pmb.h

index c223023..774465c 100644 (file)
@@ -209,6 +209,28 @@ static int bcm_pmb_power_on_device(struct bcm_pmb *pmb, int bus, u8 device)
        return err;
 }
 
+static int bcm_pmb_power_on_sata(struct bcm_pmb *pmb, int bus, u8 device)
+{
+       int err;
+
+       err = bcm_pmb_power_on_zone(pmb, bus, device, 0);
+       if (err)
+               return err;
+
+       /* Does not apply to the BCM963158 */
+       err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_MISC_CONTROL, 0);
+       if (err)
+               return err;
+
+       err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_SR_CONTROL, 0xffffffff);
+       if (err)
+               return err;
+
+       err = bcm_pmb_bpcm_write(pmb, bus, device, BPCM_SR_CONTROL, 0);
+
+       return err;
+}
+
 static int bcm_pmb_power_on(struct generic_pm_domain *genpd)
 {
        struct bcm_pmb_pm_domain *pd = container_of(genpd, struct bcm_pmb_pm_domain, genpd);
@@ -222,6 +244,8 @@ static int bcm_pmb_power_on(struct generic_pm_domain *genpd)
                return bcm_pmb_power_on_zone(pmb, data->bus, data->device, 0);
        case BCM_PMB_HOST_USB:
                return bcm_pmb_power_on_device(pmb, data->bus, data->device);
+       case BCM_PMB_SATA:
+               return bcm_pmb_power_on_sata(pmb, data->bus, data->device);
        default:
                dev_err(pmb->dev, "unsupported device id: %d\n", data->id);
                return -EINVAL;
@@ -317,8 +341,14 @@ static const struct bcm_pmb_pd_data bcm_pmb_bcm4908_data[] = {
        { },
 };
 
+static const struct bcm_pmb_pd_data bcm_pmb_bcm63138_data[] = {
+       { .name = "sata", .id = BCM_PMB_SATA, .bus = 0, .device = 3, },
+       { },
+};
+
 static const struct of_device_id bcm_pmb_of_match[] = {
        { .compatible = "brcm,bcm4908-pmb", .data = &bcm_pmb_bcm4908_data, },
+       { .compatible = "brcm,bcm63138-pmb", .data = &bcm_pmb_bcm63138_data, },
        { },
 };
 
index 744dc3a..3858844 100644 (file)
@@ -7,5 +7,6 @@
 #define BCM_PMB_PCIE1                          0x02
 #define BCM_PMB_PCIE2                          0x03
 #define BCM_PMB_HOST_USB                       0x04
+#define BCM_PMB_SATA                           0x05
 
 #endif