This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM65x/DRA80xM Processors. Disable broadcast

In some of our products we need to disable reception of broadcast.

I have tried to remode BC bit in am65xIcssgAddrFilterSet(). But iit does not work.O am still receiving broadcast frames.

The modification:

/* match on Broadcast or MAC_PRU address */
regVal = RX_CLASS_FT_BC | RX_CLASS_FT_DA_P;
if (akNetEmacBroadcastDisabled[pDrvCtrl->emacUnit] == 1) {
regVal = RX_CLASS_FT_DA_P;
}

How can I disable broadcast?

  • Being part of the same team, I'd like to add some context and clarification to the original post.

    The question relates to PRU-ICSSG EMAC network interfaces which are being used in a commercial real-time operating system.  The code fragment in the original post is an excerpt from the RTOS device driver for the EMAC interface; this driver was written using the TI Linux PRU-ICSSG EMAC driver as a reference, and the corresponding code in the Linux driver is in icssg_classifier.c:icssg_class_default():

    void icssg_class_default(struct regmap *miig_rt, int slice, bool allmulti,
    			 bool is_sr1)
    {
    	u32 data;
    	int n;
    	int classifiers_in_use = ICSSG_NUM_CLASSIFIERS_IN_USE;
    
    	if (!is_sr1)
    		classifiers_in_use = 1;
    
    	/* defaults */
    	icssg_class_disable(miig_rt, slice);
    
    	/* Setup Classifier */
    	for (n = 0; n < classifiers_in_use; n++) {
    		/* match on Broadcast or MAC_PRU address */
    		data = RX_CLASS_FT_BC | RX_CLASS_FT_DA_P;
    
    		/* multicast? */
    		if (allmulti)
    			data |= RX_CLASS_FT_MC;
    
    		rx_class_set_or(miig_rt, slice, n, data);
    
    		/* set CFG1 for OR_OR_AND for classifier */
    		rx_class_sel_set_type(miig_rt, slice, n,
    				      RX_CLASS_SEL_TYPE_OR_OR_AND);
    	}
    
    	/* clear CFG2 */
    	regmap_write(miig_rt, offs[slice].rx_class_cfg2, 0);
    }
    

    It appears that the RX_CLASS_FT_BC bit should control whether inbound frames with broadcast destination addresses are received or filtered out.  However, in our tests, broadcast frames are received irrespective of whether this bit is set in the classifier "OR-enable" register.

    Noting that broadcast frames might also be classified as multicast frames, we have also tried clearing the RX_CLASS_FT_MC bit but this also does not prevent receipt of broadcast frames.

    Is it possible to configure the EMAC hardware/firmware to filter out (not receive) frames with a broadcast destination MAC address?  If so, how exactly should this be done?

    Thanks.

  • Hello Brede & Ian,

    Thanks for clarifying that you are using a non-TI RTOS. Please keep in mind that we are not able to support non-TI software.

    I am reassigning your thread to someone from the PRU Networking team to comment on your questions about using specific PRU registers. Please ping the thread if you do not have a response by early next week.

    Regards,

    Nick

  • Hello Nick - bumping this as we have had no reply.

  • Hi

    I do not have any answer yet!

  • Brede,

    Apologies for the delayed response. I am trying to get a team member to reply here before our sync tomorrow.

    Regards,

    Nick

  • Hi Ian,
    I am Danish from Linux driver side. I checked the icssg_class_default() API. I can confirm that toggling RX_CLASS_FT_BC does not result in disabling of Broadcast traffic. Currently disabling of broadcast traffic is not supported by EMAC firmware.

    Thanks and Regards,
    Danish.