diff --git a/6.12/target/linux/bcm27xx/patches-6.12/950-0350-usb-dwc3-Set-DMA-and-coherent-masks-early.patch b/6.12/target/linux/bcm27xx/patches-6.12/950-0350-usb-dwc3-Set-DMA-and-coherent-masks-early.patch deleted file mode 100644 index 68a160c1..00000000 --- a/6.12/target/linux/bcm27xx/patches-6.12/950-0350-usb-dwc3-Set-DMA-and-coherent-masks-early.patch +++ /dev/null @@ -1,380 +0,0 @@ -From e0a2250e98b19cf3555db55376dc23cbe7139718 Mon Sep 17 00:00:00 2001 -From: Jonathan Bell -Date: Mon, 13 Sep 2021 11:14:32 +0100 -Subject: [PATCH 350/697] usb: dwc3: Set DMA and coherent masks early - -dwc3 allocates scratch and event buffers in the top-level driver. Hack the -probe function to set the DMA mask before trying to allocate these. - -I think the event buffers are only used in device mode, but the scratch -buffers may be used if core hibernation is enabled. - -usb: dwc3: add support for new DT quirks - -Apply the optional axi-pipe-limit and dis-in-autoretry-quirk properties -during driver probe. - -Signed-off-by: Jonathan Bell - -phy: phy-brcm-usb: Add 2712 support - -usb: dwc3: if the host controller instance number is present in DT, use it - -If two instances of a dwc3 host controller are specified in devicetree, -then the probe order may be arbitrary which results in the device names -swapping on a per-boot basis. - -If a "usb" alias with the instance number is specified, then use -that to construct the device name instead of autogenerating one. - -Signed-off-by: Jonathan Bell - -rp1 dwc3 changes - -drivers: usb: dwc3: allow setting GTXTHRCFG on dwc_usb3.0 hardware - -Equivalent register fields exist in the SuperSpeed Host version of the -hardware, so allow the use of TX thresholds if specified in devicetree. - -Signed-off-by: Jonathan Bell - -drivers: usb: dwc3: remove downstream quirk dis-in-autoretry - -Upstream have unilaterally disabled the feature. - -Partially reverts 6e9142a26ee0fdc3a5adc49ed6cedc0b16ec2ed1 (downstream) - -Signed-off-by: Jonathan Bell ---- - drivers/phy/broadcom/Kconfig | 2 +- - .../phy/broadcom/phy-brcm-usb-init-synopsys.c | 59 +++++++++++++++++++ - drivers/phy/broadcom/phy-brcm-usb-init.h | 2 + - drivers/phy/broadcom/phy-brcm-usb.c | 18 +++++- - drivers/usb/dwc3/core.c | 53 +++++++++++++++++ - drivers/usb/dwc3/core.h | 5 ++ - drivers/usb/dwc3/host.c | 9 ++- - 7 files changed, 145 insertions(+), 3 deletions(-) - ---- a/drivers/phy/broadcom/Kconfig -+++ b/drivers/phy/broadcom/Kconfig -@@ -93,7 +93,7 @@ config PHY_BRCM_SATA - - config PHY_BRCM_USB - tristate "Broadcom STB USB PHY driver" -- depends on ARCH_BCMBCA || ARCH_BRCMSTB || COMPILE_TEST -+ depends on ARCH_BCMBCA || ARCH_BRCMSTB || ARCH_BCM2835 || COMPILE_TEST - depends on OF - select GENERIC_PHY - select SOC_BRCMSTB if ARCH_BRCMSTB ---- a/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c -+++ b/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c -@@ -341,6 +341,36 @@ static void usb_init_common_7216(struct - usb_init_common(params); - } - -+static void usb_init_common_2712(struct brcm_usb_init_params *params) -+{ -+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL]; -+ void __iomem *bdc_ec = params->regs[BRCM_REGS_BDC_EC]; -+ u32 reg; -+ -+ if (params->syscon_piarbctl) -+ syscon_piarbctl_init(params->syscon_piarbctl); -+ -+ USB_CTRL_UNSET(ctrl, USB_PM, USB_PWRDN); -+ -+ usb_wake_enable_7211b0(params, false); -+ -+ usb_init_common(params); -+ -+ /* -+ * The BDC controller will get occasional failures with -+ * the default "Read Transaction Size" of 6 (1024 bytes). -+ * Set it to 4 (256 bytes). -+ */ -+ if ((params->supported_port_modes != USB_CTLR_MODE_HOST) && bdc_ec) { -+ reg = brcm_usb_readl(bdc_ec + BDC_EC_AXIRDA); -+ reg &= ~BDC_EC_AXIRDA_RTS_MASK; -+ reg |= (0x4 << BDC_EC_AXIRDA_RTS_SHIFT); -+ brcm_usb_writel(reg, bdc_ec + BDC_EC_AXIRDA); -+ } -+ -+ usb2_eye_fix_7211b0(params); -+} -+ - static void usb_init_xhci(struct brcm_usb_init_params *params) - { - pr_debug("%s\n", __func__); -@@ -386,6 +416,18 @@ static void usb_uninit_common_7211b0(str - - } - -+static void usb_uninit_common_2712(struct brcm_usb_init_params *params) -+{ -+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL]; -+ -+ if (params->wake_enabled) { -+ USB_CTRL_SET(ctrl, TEST_PORT_CTL, TPOUT_SEL_PME_GEN); -+ usb_wake_enable_7211b0(params, true); -+ } else { -+ USB_CTRL_SET(ctrl, USB_PM, USB_PWRDN); -+ } -+} -+ - static void usb_uninit_xhci(struct brcm_usb_init_params *params) - { - -@@ -440,6 +482,16 @@ static const struct brcm_usb_init_ops bc - .set_dual_select = usb_set_dual_select, - }; - -+static const struct brcm_usb_init_ops bcm2712_ops = { -+ .init_ipp = usb_init_ipp, -+ .init_common = usb_init_common_2712, -+ .init_xhci = usb_init_xhci, -+ .uninit_common = usb_uninit_common_2712, -+ .uninit_xhci = usb_uninit_xhci, -+ .get_dual_select = usb_get_dual_select, -+ .set_dual_select = usb_set_dual_select, -+}; -+ - void brcm_usb_dvr_init_7216(struct brcm_usb_init_params *params) - { - -@@ -457,3 +509,10 @@ void brcm_usb_dvr_init_7211b0(struct brc - params->family_name = "7211"; - params->ops = &bcm7211b0_ops; - } -+ -+void brcm_usb_dvr_init_2712(struct brcm_usb_init_params *params) -+{ -+ params->family_name = "2712"; -+ params->ops = &bcm2712_ops; -+ params->suspend_with_clocks = true; -+} ---- a/drivers/phy/broadcom/phy-brcm-usb-init.h -+++ b/drivers/phy/broadcom/phy-brcm-usb-init.h -@@ -70,12 +70,14 @@ struct brcm_usb_init_params { - const struct brcm_usb_init_ops *ops; - struct regmap *syscon_piarbctl; - bool wake_enabled; -+ bool suspend_with_clocks; - }; - - void brcm_usb_dvr_init_4908(struct brcm_usb_init_params *params); - void brcm_usb_dvr_init_7445(struct brcm_usb_init_params *params); - void brcm_usb_dvr_init_7216(struct brcm_usb_init_params *params); - void brcm_usb_dvr_init_7211b0(struct brcm_usb_init_params *params); -+void brcm_usb_dvr_init_2712(struct brcm_usb_init_params *params); - - static inline u32 brcm_usb_readl(void __iomem *addr) - { ---- a/drivers/phy/broadcom/phy-brcm-usb.c -+++ b/drivers/phy/broadcom/phy-brcm-usb.c -@@ -75,7 +75,7 @@ struct brcm_usb_phy_data { - }; - - static s8 *node_reg_names[BRCM_REGS_MAX] = { -- "crtl", "xhci_ec", "xhci_gbl", "usb_phy", "usb_mdio", "bdc_ec" -+ "ctrl", "xhci_ec", "xhci_gbl", "usb_phy", "usb_mdio", "bdc_ec" - }; - - static int brcm_pm_notifier(struct notifier_block *notifier, -@@ -315,6 +315,18 @@ static const struct match_chip_info chip - .optional_reg = BRCM_REGS_BDC_EC, - }; - -+static const struct match_chip_info chip_info_2712 = { -+ .init_func = &brcm_usb_dvr_init_2712, -+ .required_regs = { -+ BRCM_REGS_CTRL, -+ BRCM_REGS_XHCI_EC, -+ BRCM_REGS_XHCI_GBL, -+ BRCM_REGS_USB_MDIO, -+ -1, -+ }, -+ .optional_reg = BRCM_REGS_BDC_EC, -+}; -+ - static const struct match_chip_info chip_info_7445 = { - .init_func = &brcm_usb_dvr_init_7445, - .required_regs = { -@@ -338,6 +350,10 @@ static const struct of_device_id brcm_us - .data = &chip_info_7211b0, - }, - { -+ .compatible = "brcm,bcm2712-usb-phy", -+ .data = &chip_info_2712, -+ }, -+ { - .compatible = "brcm,brcmstb-usb-phy", - .data = &chip_info_7445, - }, ---- a/drivers/usb/dwc3/core.c -+++ b/drivers/usb/dwc3/core.c -@@ -1304,6 +1304,24 @@ static void dwc3_config_threshold(struct - } - } - -+static void dwc3_set_axi_pipe_limit(struct dwc3 *dwc) -+{ -+ struct device *dev = dwc->dev; -+ u32 cfg; -+ -+ if (!dwc->axi_pipe_limit) -+ return; -+ if (dwc->axi_pipe_limit > 16) { -+ dev_err(dev, "Invalid axi_pipe_limit property\n"); -+ return; -+ } -+ cfg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG1); -+ cfg &= ~DWC3_GSBUSCFG1_PIPETRANSLIMIT(15); -+ cfg |= DWC3_GSBUSCFG1_PIPETRANSLIMIT(dwc->axi_pipe_limit - 1); -+ -+ dwc3_writel(dwc->regs, DWC3_GSBUSCFG1, cfg); -+} -+ - /** - * dwc3_core_init - Low-level initialization of DWC3 Core - * @dwc: Pointer to our controller context structure -@@ -1371,6 +1389,8 @@ static int dwc3_core_init(struct dwc3 *d - - dwc3_config_soc_bus(dwc); - -+ dwc3_set_axi_pipe_limit(dwc); -+ - ret = dwc3_phy_power_on(dwc); - if (ret) - goto err_exit_phy; -@@ -1475,6 +1495,24 @@ static int dwc3_core_init(struct dwc3 *d - dwc3_writel(dwc->regs, DWC3_LLUCTL, reg); - } - -+ if (DWC3_IP_IS(DWC3) && dwc->dr_mode == USB_DR_MODE_HOST) { -+ u8 tx_thr_num = dwc->tx_thr_num_pkt_prd; -+ u8 tx_maxburst = dwc->tx_max_burst_prd; -+ -+ if (tx_thr_num && tx_maxburst) { -+ reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG); -+ reg |= DWC3_GTXTHRCFG_PKTCNTSEL; -+ -+ reg &= ~DWC3_GTXTHRCFG_TXPKTCNT(~0); -+ reg |= DWC3_GTXTHRCFG_TXPKTCNT(tx_thr_num); -+ -+ reg &= ~DWC3_GTXTHRCFG_MAXTXBURSTSIZE(~0); -+ reg |= DWC3_GTXTHRCFG_MAXTXBURSTSIZE(tx_maxburst); -+ -+ dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg); -+ } -+ } -+ - return 0; - - err_power_off_phy: -@@ -1660,6 +1698,7 @@ static void dwc3_get_properties(struct d - u8 tx_thr_num_pkt_prd = 0; - u8 tx_max_burst_prd = 0; - u8 tx_fifo_resize_max_num; -+ u8 axi_pipe_limit; - const char *usb_psy_name; - int ret; - -@@ -1682,6 +1721,9 @@ static void dwc3_get_properties(struct d - */ - tx_fifo_resize_max_num = 6; - -+ /* Default to 0 (don't override hardware defaults) */ -+ axi_pipe_limit = 0; -+ - dwc->maximum_speed = usb_get_maximum_speed(dev); - dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev); - dwc->dr_mode = usb_get_dr_mode(dev); -@@ -1803,6 +1845,9 @@ static void dwc3_get_properties(struct d - dwc->dis_split_quirk = device_property_read_bool(dev, - "snps,dis-split-quirk"); - -+ device_property_read_u8(dev, "snps,axi-pipe-limit", -+ &axi_pipe_limit); -+ - dwc->lpm_nyet_threshold = lpm_nyet_threshold; - dwc->tx_de_emphasis = tx_de_emphasis; - -@@ -1820,6 +1865,8 @@ static void dwc3_get_properties(struct d - dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd; - dwc->tx_max_burst_prd = tx_max_burst_prd; - -+ dwc->axi_pipe_limit = axi_pipe_limit; -+ - dwc->imod_interval = 0; - - dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num; -@@ -2161,6 +2208,12 @@ static int dwc3_probe(struct platform_de - - dwc3_get_software_properties(dwc); - -+ if (!dwc->sysdev_is_parent) { -+ ret = dma_set_mask_and_coherent(dwc->sysdev, DMA_BIT_MASK(64)); -+ if (ret) -+ return ret; -+ } -+ - dwc->reset = devm_reset_control_array_get_optional_shared(dev); - if (IS_ERR(dwc->reset)) { - ret = PTR_ERR(dwc->reset); ---- a/drivers/usb/dwc3/core.h -+++ b/drivers/usb/dwc3/core.h -@@ -198,6 +198,9 @@ - #define DWC3_GSBUSCFG0_REQINFO(n) (((n) & 0xffff) << 16) - #define DWC3_GSBUSCFG0_REQINFO_UNSPECIFIED 0xffffffff - -+/* Global SoC Bus Configuration Register 1 */ -+#define DWC3_GSBUSCFG1_PIPETRANSLIMIT(n) (((n) & 0xf) << 8) -+ - /* Global Debug LSP MUX Select */ - #define DWC3_GDBGLSPMUX_ENDBC BIT(15) /* Host only */ - #define DWC3_GDBGLSPMUX_HOSTSELECT(n) ((n) & 0x3fff) -@@ -1086,6 +1089,7 @@ struct dwc3_scratchpad_array { - * @tx_max_burst_prd: max periodic ESS transmit burst size - * @tx_fifo_resize_max_num: max number of fifos allocated during txfifo resize - * @clear_stall_protocol: endpoint number that requires a delayed status phase -+ * @axi_max_pipe: set to override the maximum number of pipelined AXI transfers - * @hsphy_interface: "utmi" or "ulpi" - * @connected: true when we're connected to a host, false otherwise - * @softconnect: true when gadget connect is called, false when disconnect runs -@@ -1333,6 +1337,7 @@ struct dwc3 { - u8 tx_max_burst_prd; - u8 tx_fifo_resize_max_num; - u8 clear_stall_protocol; -+ u8 axi_pipe_limit; - - const char *hsphy_interface; - ---- a/drivers/usb/dwc3/host.c -+++ b/drivers/usb/dwc3/host.c -@@ -126,10 +126,12 @@ out: - - int dwc3_host_init(struct dwc3 *dwc) - { -+ struct platform_device *pdev = to_platform_device(dwc->dev); - struct property_entry props[6]; - struct platform_device *xhci; - int ret, irq; - int prop_idx = 0; -+ int id; - - /* - * Some platforms need to power off all Root hub ports immediately after DWC3 set to host -@@ -141,7 +143,12 @@ int dwc3_host_init(struct dwc3 *dwc) - if (irq < 0) - return irq; - -- xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); -+ id = of_alias_get_id(pdev->dev.of_node, "usb"); -+ if (id >= 0) -+ xhci = platform_device_alloc("xhci-hcd", id); -+ else -+ xhci = platform_device_alloc("xhci-hcd", PLATFORM_DEVID_AUTO); -+ - if (!xhci) { - dev_err(dwc->dev, "couldn't allocate xHCI device\n"); - return -ENOMEM; diff --git a/6.12/target/linux/bcm27xx/patches-6.12/950-0696-media-i2c-ov9282-Correct-the-exposure-offset.patch b/6.12/target/linux/bcm27xx/patches-6.12/950-0696-media-i2c-ov9282-Correct-the-exposure-offset.patch deleted file mode 100644 index c69db10e..00000000 --- a/6.12/target/linux/bcm27xx/patches-6.12/950-0696-media-i2c-ov9282-Correct-the-exposure-offset.patch +++ /dev/null @@ -1,31 +0,0 @@ -From ac1e5f4bf230b954e07c5133e694e0ba696b34b0 Mon Sep 17 00:00:00 2001 -From: Dave Stevenson -Date: Mon, 9 Dec 2024 10:43:18 +0000 -Subject: [PATCH 696/697] media: i2c: ov9282: Correct the exposure offset - -The datasheet lists that "Maximum exposure time is frame -length -25 row periods, where frame length is set by -registers {0x380E, 0x380F}". -However this driver had OV9282_EXPOSURE_OFFSET set to 12 -which allowed that restriction to be violated, and would -result in very under-exposed images. - -Correct the offset. - -Fixes: 14ea315bbeb7 ("media: i2c: Add ov9282 camera sensor driver") -Signed-off-by: Dave Stevenson ---- - drivers/media/i2c/ov9282.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/media/i2c/ov9282.c -+++ b/drivers/media/i2c/ov9282.c -@@ -40,7 +40,7 @@ - /* Exposure control */ - #define OV9282_REG_EXPOSURE 0x3500 - #define OV9282_EXPOSURE_MIN 1 --#define OV9282_EXPOSURE_OFFSET 12 -+#define OV9282_EXPOSURE_OFFSET 25 - #define OV9282_EXPOSURE_STEP 1 - #define OV9282_EXPOSURE_DEFAULT 0x0282 -