FROMLIST: usb: dwc3: Specify maximum number of XHCI interrupters
Allow for the DWC3 host driver to pass along XHCI property that defines how many interrupters to allocate. This is in relation for the number of event rings that can be potentially used by other processors within the system. Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> Bug: 392112015 Link: https://lore.kernel.org/linux-usb/20250121210518.2436771-7-quic_wcheng@quicinc.com/ Change-Id: I41d355c7a8ac63854e828a51dde6a74d140abed1 Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
This commit is contained in:
committed by
Neill Kapron
parent
551a5598ea
commit
6e805dc198
@@ -1660,6 +1660,7 @@ static void dwc3_get_properties(struct dwc3 *dwc)
|
||||
u8 tx_thr_num_pkt_prd = 0;
|
||||
u8 tx_max_burst_prd = 0;
|
||||
u8 tx_fifo_resize_max_num;
|
||||
u16 num_hc_interrupters;
|
||||
const char *usb_psy_name;
|
||||
int ret;
|
||||
|
||||
@@ -1682,6 +1683,9 @@ static void dwc3_get_properties(struct dwc3 *dwc)
|
||||
*/
|
||||
tx_fifo_resize_max_num = 6;
|
||||
|
||||
/* default to a single XHCI interrupter */
|
||||
num_hc_interrupters = 1;
|
||||
|
||||
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);
|
||||
@@ -1735,6 +1739,12 @@ static void dwc3_get_properties(struct dwc3 *dwc)
|
||||
&tx_thr_num_pkt_prd);
|
||||
device_property_read_u8(dev, "snps,tx-max-burst-prd",
|
||||
&tx_max_burst_prd);
|
||||
device_property_read_u16(dev, "num-hc-interrupters",
|
||||
&num_hc_interrupters);
|
||||
/* DWC3 core allowed to have a max of 8 interrupters */
|
||||
if (num_hc_interrupters > 8)
|
||||
num_hc_interrupters = 8;
|
||||
|
||||
dwc->do_fifo_resize = device_property_read_bool(dev,
|
||||
"tx-fifo-resize");
|
||||
if (dwc->do_fifo_resize)
|
||||
@@ -1823,6 +1833,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
|
||||
dwc->imod_interval = 0;
|
||||
|
||||
dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num;
|
||||
|
||||
dwc->num_hc_interrupters = num_hc_interrupters;
|
||||
}
|
||||
|
||||
/* check whether the core supports IMOD */
|
||||
|
||||
@@ -1087,6 +1087,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
|
||||
* @num_hc_interrupters: number of host controller interrupters
|
||||
* @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
|
||||
@@ -1334,6 +1335,7 @@ struct dwc3 {
|
||||
u8 tx_max_burst_prd;
|
||||
u8 tx_fifo_resize_max_num;
|
||||
u8 clear_stall_protocol;
|
||||
u16 num_hc_interrupters;
|
||||
|
||||
const char *hsphy_interface;
|
||||
|
||||
|
||||
@@ -182,6 +182,9 @@ int dwc3_host_init(struct dwc3 *dwc)
|
||||
if (DWC3_VER_IS_WITHIN(DWC3, ANY, 300A))
|
||||
props[prop_idx++] = PROPERTY_ENTRY_BOOL("quirk-broken-port-ped");
|
||||
|
||||
props[prop_idx++] = PROPERTY_ENTRY_U16("num-hc-interrupters",
|
||||
dwc->num_hc_interrupters);
|
||||
|
||||
if (prop_idx) {
|
||||
ret = device_create_managed_software_node(&xhci->dev, props, NULL);
|
||||
if (ret) {
|
||||
|
||||
Reference in New Issue
Block a user